R600/SI: Set hasSideEffects = 0 on load and store instructions.
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 18 Nov 2014 23:57:33 +0000 (23:57 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 18 Nov 2014 23:57:33 +0000 (23:57 +0000)
Assuming unmodeled side effects interferes with some scheduling
opportunities.

Don't put it in the base class of DS instructions since there
are a few weird effecting, non load/store instructions there.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222285 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/R600/SIInstrFormats.td
lib/Target/R600/SIInstrInfo.td

index bc8c01104717cac3f88d4a50ff1f3ff409bf7b59..10e0a3f0c13e76c437a387db9db3bf055576738e 100644 (file)
@@ -223,6 +223,7 @@ class SMRD <dag outs, dag ins, string asm, list<dag> pattern> :
   let SMRD = 1;
   let mayStore = 0;
   let mayLoad = 1;
+  let hasSideEffects = 0;
   let UseNamedOperandTable = 1;
 }
 
@@ -527,10 +528,9 @@ class VOPC <bits<8> op, dag ins, string asm, list<dag> pattern> :
 
 class VINTRP <bits <2> op, dag outs, dag ins, string asm, list<dag> pattern> :
     InstSI <outs, ins, asm, pattern>, VINTRPe<op> {
-
-  let neverHasSideEffects = 1;
   let mayLoad = 1;
   let mayStore = 0;
+  let hasSideEffects = 0;
 }
 
 } // End Uses = [EXEC]
@@ -555,7 +555,7 @@ class MUBUF <bits<7> op, dag outs, dag ins, string asm, list<dag> pattern> :
   let EXP_CNT = 1;
   let MUBUF = 1;
 
-  let neverHasSideEffects = 1;
+  let hasSideEffects = 0;
   let UseNamedOperandTable = 1;
 }
 
@@ -591,6 +591,8 @@ class MIMG <bits<7> op, dag outs, dag ins, string asm, list<dag> pattern> :
   let VM_CNT = 1;
   let EXP_CNT = 1;
   let MIMG = 1;
+
+  let hasSideEffects = 0; // XXX ????
 }
 
 
index 2c9ffaffca8f0f70a369bf44f65fac5387b8ffe1..713e84edefd279bfdf3ff97eaab221c3c9056ca8 100644 (file)
@@ -941,6 +941,8 @@ class DS_1A <bits<8> op, dag outs, dag ins, string asm, list<dag> pat> :
   // Single load interpret the 2 i8imm operands as a single i16 offset.
   let offset0 = offset{7-0};
   let offset1 = offset{15-8};
+
+  let hasSideEffects = 0;
 }
 
 class DS_Load_Helper <bits<8> op, string asm, RegisterClass regClass> : DS_1A <
@@ -965,6 +967,7 @@ class DS_Load2_Helper <bits<8> op, string asm, RegisterClass regClass> : DS <
   let data1 = 0;
   let mayLoad = 1;
   let mayStore = 0;
+  let hasSideEffects = 0;
 }
 
 class DS_Store_Helper <bits<8> op, string asm, RegisterClass regClass> : DS_1A <
@@ -988,6 +991,7 @@ class DS_Store2_Helper <bits<8> op, string asm, RegisterClass regClass> : DS <
   []> {
   let mayStore = 1;
   let mayLoad = 0;
+  let hasSideEffects = 0;
   let vdst = 0;
 }
 
@@ -1016,7 +1020,6 @@ class DS_1A2D_RET <bits<8> op, string asm, RegisterClass rc, string noRetOp = ""
   AtomicNoRet<noRetOp, 1> {
   let mayStore = 1;
   let mayLoad = 1;
-
   let hasPostISelHook = 1; // Adjusted to no return version.
 }