[llvm-commits] [llvm] r158206 - in /llvm/trunk: lib/Target/PowerPC/PPCInstrInfo.cpp lib/Target/PowerPC/PPCTargetMachine.cpp test/CodeGen/PowerPC/ctrloop-reg.ll test/CodeGen/PowerPC/ctrloops.ll

Hal Finkel hfinkel at anl.gov
Fri Jun 8 08:38:26 PDT 2012


Author: hfinkel
Date: Fri Jun  8 10:38:25 2012
New Revision: 158206

URL: http://llvm.org/viewvc/llvm-project?rev=158206&view=rev
Log:
Disable the PPC CTR-Loops pass by default.

The pass itself works well, but the something in the Machine* infrastructure
does not understand terminators which define registers. Without the ability
to use the block-placement pass, etc. this causes performance regressions (and
so is turned off by default). Turning off the analysis turns off the problems
with the Machine* infrastructure.

Modified:
    llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp
    llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp
    llvm/trunk/test/CodeGen/PowerPC/ctrloop-reg.ll
    llvm/trunk/test/CodeGen/PowerPC/ctrloops.ll

Modified: llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp?rev=158206&r1=158205&r2=158206&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp Fri Jun  8 10:38:25 2012
@@ -40,6 +40,10 @@
 
 using namespace llvm;
 
+static cl::
+opt<bool> EnableCTRLoopAnal("enable-ppc-ctrloop-analysis", cl::Hidden,
+            cl::desc("Enable analysis for CTR loops (experimental)"));
+
 PPCInstrInfo::PPCInstrInfo(PPCTargetMachine &tm)
   : PPCGenInstrInfo(PPC::ADJCALLSTACKDOWN, PPC::ADJCALLSTACKUP),
     TM(tm), RI(*TM.getSubtargetImpl(), *this) {}
@@ -229,6 +233,8 @@
                LastInst->getOpcode() == PPC::BDNZ) {
       if (!LastInst->getOperand(0).isMBB())
         return true;
+      if (!EnableCTRLoopAnal)
+        return true;
       TBB = LastInst->getOperand(0).getMBB();
       Cond.push_back(MachineOperand::CreateImm(1));
       Cond.push_back(MachineOperand::CreateReg(isPPC64 ? PPC::CTR8 : PPC::CTR,
@@ -238,6 +244,8 @@
                LastInst->getOpcode() == PPC::BDZ) {
       if (!LastInst->getOperand(0).isMBB())
         return true;
+      if (!EnableCTRLoopAnal)
+        return true;
       TBB = LastInst->getOperand(0).getMBB();
       Cond.push_back(MachineOperand::CreateImm(0));
       Cond.push_back(MachineOperand::CreateReg(isPPC64 ? PPC::CTR8 : PPC::CTR,
@@ -274,6 +282,8 @@
     if (!SecondLastInst->getOperand(0).isMBB() ||
         !LastInst->getOperand(0).isMBB())
       return true;
+    if (!EnableCTRLoopAnal)
+      return true;
     TBB = SecondLastInst->getOperand(0).getMBB();
     Cond.push_back(MachineOperand::CreateImm(1));
     Cond.push_back(MachineOperand::CreateReg(isPPC64 ? PPC::CTR8 : PPC::CTR,
@@ -286,6 +296,8 @@
     if (!SecondLastInst->getOperand(0).isMBB() ||
         !LastInst->getOperand(0).isMBB())
       return true;
+    if (!EnableCTRLoopAnal)
+      return true;
     TBB = SecondLastInst->getOperand(0).getMBB();
     Cond.push_back(MachineOperand::CreateImm(0));
     Cond.push_back(MachineOperand::CreateReg(isPPC64 ? PPC::CTR8 : PPC::CTR,

Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp?rev=158206&r1=158205&r2=158206&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp Fri Jun  8 10:38:25 2012
@@ -23,8 +23,8 @@
 using namespace llvm;
 
 static cl::
-opt<bool> DisableCTRLoops("disable-ppc-ctrloops", cl::Hidden,
-                        cl::desc("Disable CTR loops for PPC"));
+opt<bool> EnableCTRLoops("enable-ppc-ctrloops", cl::Hidden,
+                        cl::desc("Enable CTR loops for PPC"));
 
 extern "C" void LLVMInitializePowerPCTarget() {
   // Register the targets
@@ -103,9 +103,10 @@
 }
 
 bool PPCPassConfig::addPreRegAlloc() {
-  if (!DisableCTRLoops && getOptLevel() != CodeGenOpt::None) {
+  // FIXME: Once this can be enabled by default, this condition should read:
+  // if (!DisableCTRLoops && getOptLevel() != CodeGenOpt::None)
+  if (EnableCTRLoops)
     PM->add(createPPCCTRLoops());
-  }
 
   return false;
 }

Modified: llvm/trunk/test/CodeGen/PowerPC/ctrloop-reg.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/ctrloop-reg.ll?rev=158206&r1=158205&r2=158206&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/PowerPC/ctrloop-reg.ll (original)
+++ llvm/trunk/test/CodeGen/PowerPC/ctrloop-reg.ll Fri Jun  8 10:38:25 2012
@@ -1,7 +1,7 @@
 ; ModuleID = 'bugpoint-reduced-simplified.bc'
 target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32:64"
 target triple = "powerpc64-unknown-linux-gnu"
-; RUN: llc < %s -march=ppc64 | FileCheck %s
+; RUN: llc -enable-ppc-ctrloops < %s -march=ppc64 | FileCheck %s
 
 %struct.ref_s.1.49.91.115.121.139.145.151.157.163.169.175.181.211 = type { %union.v.0.48.90.114.120.138.144.150.156.162.168.174.180.210, i16, i16 }
 %union.v.0.48.90.114.120.138.144.150.156.162.168.174.180.210 = type { i64 }

Modified: llvm/trunk/test/CodeGen/PowerPC/ctrloops.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/ctrloops.ll?rev=158206&r1=158205&r2=158206&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/PowerPC/ctrloops.ll (original)
+++ llvm/trunk/test/CodeGen/PowerPC/ctrloops.ll Fri Jun  8 10:38:25 2012
@@ -1,6 +1,6 @@
 target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32:64"
 target triple = "powerpc64-unknown-freebsd10.0"
-; RUN: llc < %s -march=ppc64 | FileCheck %s
+; RUN: llc -enable-ppc-ctrloops -enable-ppc-ctrloop-analysis < %s -march=ppc64 | FileCheck %s
 
 @a = common global i32 0, align 4
 





More information about the llvm-commits mailing list