R600: Factorize maximum alu per clause in a single location
authorVincent Lejeune <vljn@ovi.com>
Wed, 3 Apr 2013 16:49:34 +0000 (16:49 +0000)
committerVincent Lejeune <vljn@ovi.com>
Wed, 3 Apr 2013 16:49:34 +0000 (16:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178667 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/R600/R600EmitClauseMarkers.cpp
lib/Target/R600/R600InstrInfo.cpp
lib/Target/R600/R600InstrInfo.h
lib/Target/R600/R600MachineScheduler.cpp

index bda3703af7fd1cb0f6898fdbbfa779e5a716b49d..06cf8ac6c42e88851c58c8fc431796ee39b40354 100644 (file)
@@ -201,7 +201,7 @@ private:
           !SubstituteKCacheBank(I, KCacheBanks))
         break;
       AluInstCount += OccupiedDwords(I);
-      if (AluInstCount > 124)
+      if (AluInstCount > TII->getMaxAlusPerClause())
         break;
     }
     unsigned Opcode = PushBeforeModifier ?
index 08650980fd5a35bb1c02f288d4a015bae2c07bef..b232188a264182bfb9aa7c97e7e9c27956f8c541 100644 (file)
@@ -645,6 +645,9 @@ const TargetRegisterClass *R600InstrInfo::getSuperIndirectRegClass() const {
   return &AMDGPU::IndirectRegRegClass;
 }
 
+unsigned R600InstrInfo::getMaxAlusPerClause() const {
+  return 115;
+}
 
 MachineInstrBuilder R600InstrInfo::buildDefaultInstruction(MachineBasicBlock &MBB,
                                                   MachineBasicBlock::iterator I,
index bf9569e6598aee42af8c6afe26e9f4308af40ece..dbae90013d22d5961cf4eb0d86b4d76f0a274eac 100644 (file)
@@ -145,6 +145,7 @@ namespace llvm {
 
   virtual const TargetRegisterClass *getSuperIndirectRegClass() const;
 
+  unsigned getMaxAlusPerClause() const;
 
   ///buildDefaultInstruction - This function returns a MachineInstr with
   /// all the instruction modifiers initialized to their default values.
index 9074364bb3a2391a7f6cf0bab253a375c73db887..a777142a9e70401e1ba7ba50056d8c744d01662a 100644 (file)
@@ -37,7 +37,7 @@ void R600SchedStrategy::initialize(ScheduleDAGMI *dag) {
   CurInstKind = IDOther;
   CurEmitted = 0;
   OccupedSlotsMask = 15;
-  InstKindLimit[IDAlu] = 120; // 120 minus 8 for security
+  InstKindLimit[IDAlu] = TII->getMaxAlusPerClause();
 
 
   const AMDGPUSubtarget &ST = DAG->TM.getSubtarget<AMDGPUSubtarget>();