R600: Add IsExport bit to TableGen instruction definitions
authorTom Stellard <thomas.stellard@amd.com>
Fri, 16 Aug 2013 01:11:51 +0000 (01:11 +0000)
committerTom Stellard <thomas.stellard@amd.com>
Fri, 16 Aug 2013 01:11:51 +0000 (01:11 +0000)
Tested-by: Aaron Watry <awatry@gmail.com>
llvm-svn: 188516

llvm/lib/Target/R600/R600ControlFlowFinalizer.cpp
llvm/lib/Target/R600/R600Defines.h
llvm/lib/Target/R600/R600InstrFormats.td
llvm/lib/Target/R600/R600InstrInfo.cpp
llvm/lib/Target/R600/R600InstrInfo.h
llvm/lib/Target/R600/R600Instructions.td

index ab71bc126ccdaa87aa7ea65fe7fc218c76e6a3c4..ac3d8f63d57fe4d016999c4789565bdff35c66f6 100644 (file)
@@ -373,15 +373,6 @@ public:
         case AMDGPU::CF_ALU:
           I = MI;
           AluClauses.push_back(MakeALUClause(MBB, I));
-        case AMDGPU::EG_ExportBuf:
-        case AMDGPU::EG_ExportSwz:
-        case AMDGPU::R600_ExportBuf:
-        case AMDGPU::R600_ExportSwz:
-        case AMDGPU::RAT_WRITE_CACHELESS_32_eg:
-        case AMDGPU::RAT_WRITE_CACHELESS_64_eg:
-        case AMDGPU::RAT_WRITE_CACHELESS_128_eg:
-        case AMDGPU::RAT_STORE_DWORD32:
-        case AMDGPU::RAT_STORE_DWORD64:
           DEBUG(dbgs() << CfCount << ":"; MI->dump(););
           CfCount++;
           break;
@@ -491,6 +482,10 @@ public:
             EmitALUClause(I, AluClauses[i], CfCount);
         }
         default:
+          if (TII->isExport(MI->getOpcode())) {
+            DEBUG(dbgs() << CfCount << ":"; MI->dump(););
+            CfCount++;
+          }
           break;
         }
       }
index 90fc29ce14d9bf7941743e2b43a5be1801c526e0..8dc9ebb0cc25917366ded577f0a3ec9888c8e92a 100644 (file)
@@ -44,7 +44,8 @@ namespace R600_InstFlag {
     TEX_INST = (1 << 13),
     ALU_INST = (1 << 14),
     LDS_1A = (1 << 15),
-    LDS_1A1D = (1 << 16)
+    LDS_1A1D = (1 << 16),
+    IS_EXPORT = (1 << 17)
   };
 }
 
index 2d72404702f5e014ad3f614c0fb9790e17ef29a8..2ae33114112c071a6316aec4294c4f175a124f73 100644 (file)
@@ -29,6 +29,7 @@ class InstR600 <dag outs, dag ins, string asm, list<dag> pattern,
   bit VTXInst = 0;
   bit TEXInst = 0;
   bit ALUInst = 0;
+  bit IsExport = 0;
 
   let Namespace = "AMDGPU";
   let OutOperandList = outs;
@@ -53,6 +54,7 @@ class InstR600 <dag outs, dag ins, string asm, list<dag> pattern,
   let TSFlags{14} = ALUInst;
   let TSFlags{15} = LDS_1A;
   let TSFlags{16} = LDS_1A1D;
+  let TSFlags{17} = IsExport;
 }
 
 //===----------------------------------------------------------------------===//
index 4e7eff96ae8a602d325fb2a58c4795e6027e3666..9548a34104c889a9c7395a3ea912c8878dc1ea63 100644 (file)
@@ -160,6 +160,10 @@ bool R600InstrInfo::isTransOnly(const MachineInstr *MI) const {
   return isTransOnly(MI->getOpcode());
 }
 
+bool R600InstrInfo::isExport(unsigned Opcode) const {
+  return (get(Opcode).TSFlags & R600_InstFlag::IS_EXPORT);
+}
+
 bool R600InstrInfo::usesVertexCache(unsigned Opcode) const {
   return ST.hasVertexCache() && IS_VTX(get(Opcode));
 }
index cdaa2fbefc896cc401e2877e6c2d6b084ce2bcdc..e28d7718a3760353aa9e9a48b0c8dc993e466581 100644 (file)
@@ -68,6 +68,7 @@ namespace llvm {
 
   bool isTransOnly(unsigned Opcode) const;
   bool isTransOnly(const MachineInstr *MI) const;
+  bool isExport(unsigned Opcode) const;
 
   bool usesVertexCache(unsigned Opcode) const;
   bool usesVertexCache(const MachineInstr *MI) const;
index a67276ce6ee9e4555407dc12d500fe72f8c30c36..bacedfc0a61e711f9b7f7def749deaedbdb711f8 100644 (file)
@@ -278,6 +278,7 @@ class EG_CF_RAT <bits <8> cfinst, bits <6> ratinst, bits<4> ratid, bits<4> mask,
 
   let Inst{31-0} = Word0;
   let Inst{63-32} = Word1;
+  let IsExport = 1;
 
 }
 
@@ -551,6 +552,7 @@ class ExportSwzInst : InstR600ISA<(
   let elem_size = 3;
   let Inst{31-0} = Word0;
   let Inst{63-32} = Word1;
+  let IsExport = 1;
 }
 
 } // End usesCustomInserter = 1
@@ -564,6 +566,7 @@ class ExportBufInst : InstR600ISA<(
   let elem_size = 0;
   let Inst{31-0} = Word0;
   let Inst{63-32} = Word1;
+  let IsExport = 1;
 }
 
 //===----------------------------------------------------------------------===//