diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2015-04-23 23:34:48 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2015-04-23 23:34:48 +0000 |
commit | a48b8660680722be531d073d0abab3f2c07d1699 (patch) | |
tree | 1a08518441d3bcf18f4bbd0761fbaf944694215c | |
parent | 0bad85de10d5415395cb627c5981e1a7b7346de7 (diff) | |
download | bcm5719-llvm-a48b8660680722be531d073d0abab3f2c07d1699.tar.gz bcm5719-llvm-a48b8660680722be531d073d0abab3f2c07d1699.zip |
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
-rw-r--r-- | llvm/lib/Target/R600/SIInstrInfo.cpp | 14 | ||||
-rw-r--r-- | llvm/lib/Target/R600/SIInstrInfo.h | 3 |
2 files changed, 17 insertions, 0 deletions
diff --git a/llvm/lib/Target/R600/SIInstrInfo.cpp b/llvm/lib/Target/R600/SIInstrInfo.cpp index ba98ad7dd70..6617075e5ea 100644 --- a/llvm/lib/Target/R600/SIInstrInfo.cpp +++ b/llvm/lib/Target/R600/SIInstrInfo.cpp @@ -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 { diff --git a/llvm/lib/Target/R600/SIInstrInfo.h b/llvm/lib/Target/R600/SIInstrInfo.h index a9aa99fc227..7e049dca7b1 100644 --- a/llvm/lib/Target/R600/SIInstrInfo.h +++ b/llvm/lib/Target/R600/SIInstrInfo.h @@ -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; |