R600/SI: Implement SIInstrInfo::isTriviallyRematerializable()
authorTom Stellard <thomas.stellard@amd.com>
Mon, 31 Mar 2014 14:01:56 +0000 (14:01 +0000)
committerTom Stellard <thomas.stellard@amd.com>
Mon, 31 Mar 2014 14:01:56 +0000 (14:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205188 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/R600/SIInstrInfo.cpp
lib/Target/R600/SIInstrInfo.h

index 336f6aa5667f876a2605649a17ff451db6b005dd..c39b1dbb141782f7107397cffff6df28355e0eb3 100644 (file)
@@ -308,6 +308,18 @@ SIInstrInfo::isSafeToMoveRegClassDefs(const TargetRegisterClass *RC) const {
   return RC != &AMDGPU::EXECRegRegClass;
 }
 
+bool
+SIInstrInfo::isTriviallyReMaterializable(const MachineInstr *MI,
+                                         AliasAnalysis *AA) const {
+  switch(MI->getOpcode()) {
+  default: return AMDGPUInstrInfo::isTriviallyReMaterializable(MI, AA);
+  case AMDGPU::S_MOV_B32:
+  case AMDGPU::S_MOV_B64:
+  case AMDGPU::V_MOV_B32_e32:
+    return MI->getOperand(1).isImm();
+  }
+}
+
 namespace llvm {
 namespace AMDGPU {
 // Helper function generated by tablegen.  We are wrapping this with
index 7cfb655b36b0a3962440682864427ecdfa2bc585..d143b8a510607b7ba58aef09e93c08e392221ca9 100644 (file)
@@ -77,6 +77,9 @@ public:
   virtual MachineInstr *commuteInstruction(MachineInstr *MI,
                                            bool NewMI=false) const;
 
+  bool isTriviallyReMaterializable(const MachineInstr *MI,
+                                   AliasAnalysis *AA = 0) const;
+
   virtual unsigned getIEQOpcode() const {
     llvm_unreachable("Unimplemented");
   }