forked from OSchip/llvm-project
R600/SI: Special case v_mov_b32 as really rematerializable
This should be fixed to properly understand all rematerializable instructions while ignoring implicit reads of exec. llvm-svn: 235671
This commit is contained in:
parent
0bad85de10
commit
a48b866068
|
@ -74,6 +74,20 @@ static bool nodesHaveSameOperandValue(SDNode *N0, SDNode* N1, unsigned OpName) {
|
|||
return N0->getOperand(Op0Idx) == N1->getOperand(Op1Idx);
|
||||
}
|
||||
|
||||
bool SIInstrInfo::isReallyTriviallyReMaterializable(const MachineInstr *MI,
|
||||
AliasAnalysis *AA) const {
|
||||
// TODO: The generic check fails for VALU instructions that should be
|
||||
// rematerializable due to implicit reads of exec. We really want all of the
|
||||
// generic logic for this except for this.
|
||||
switch (MI->getOpcode()) {
|
||||
case AMDGPU::V_MOV_B32_e32:
|
||||
case AMDGPU::V_MOV_B32_e64:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool SIInstrInfo::areLoadsFromSameBasePtr(SDNode *Load0, SDNode *Load1,
|
||||
int64_t &Offset0,
|
||||
int64_t &Offset1) const {
|
||||
|
|
|
@ -72,6 +72,9 @@ public:
|
|||
return RI;
|
||||
}
|
||||
|
||||
bool isReallyTriviallyReMaterializable(const MachineInstr *MI,
|
||||
AliasAnalysis *AA) const override;
|
||||
|
||||
bool areLoadsFromSameBasePtr(SDNode *Load1, SDNode *Load2,
|
||||
int64_t &Offset1,
|
||||
int64_t &Offset2) const override;
|
||||
|
|
Loading…
Reference in New Issue