mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-22 20:26:31 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235671 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6ec2992aca
commit
784f73714b
@ -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…
x
Reference in New Issue
Block a user