diff options
author | Hal Finkel <hfinkel@anl.gov> | 2012-06-08 15:38:25 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2012-06-08 15:38:25 +0000 |
commit | 09fdc7baae1b6905fe18df48e2278e74d4e39ccd (patch) | |
tree | b1a2aadea993ad0d4664fd42e934a9cf05e7238b /lib | |
parent | daa03ec60475a641bcc66799764977f79997ca45 (diff) | |
download | llvm-09fdc7baae1b6905fe18df48e2278e74d4e39ccd.tar.gz llvm-09fdc7baae1b6905fe18df48e2278e74d4e39ccd.tar.bz2 llvm-09fdc7baae1b6905fe18df48e2278e74d4e39ccd.tar.xz |
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158206 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/PowerPC/PPCInstrInfo.cpp | 12 | ||||
-rw-r--r-- | lib/Target/PowerPC/PPCTargetMachine.cpp | 9 |
2 files changed, 17 insertions, 4 deletions
diff --git a/lib/Target/PowerPC/PPCInstrInfo.cpp b/lib/Target/PowerPC/PPCInstrInfo.cpp index d652282243..8b868e69ec 100644 --- a/lib/Target/PowerPC/PPCInstrInfo.cpp +++ b/lib/Target/PowerPC/PPCInstrInfo.cpp @@ -40,6 +40,10 @@ extern cl::opt<bool> DisablePPC64RS; 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 @@ bool PPCInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,MachineBasicBlock *&TBB, 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 @@ bool PPCInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,MachineBasicBlock *&TBB, 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 @@ bool PPCInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,MachineBasicBlock *&TBB, 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 @@ bool PPCInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB,MachineBasicBlock *&TBB, 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, diff --git a/lib/Target/PowerPC/PPCTargetMachine.cpp b/lib/Target/PowerPC/PPCTargetMachine.cpp index 6f7fc4bb39..bcab83c5cf 100644 --- a/lib/Target/PowerPC/PPCTargetMachine.cpp +++ b/lib/Target/PowerPC/PPCTargetMachine.cpp @@ -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 @@ TargetPassConfig *PPCTargetMachine::createPassConfig(PassManagerBase &PM) { } 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; } |