summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
diff options
context:
space:
mode:
authorNemanja Ivanovic <nemanja.i.ibm@gmail.com>2017-12-13 14:47:35 +0000
committerNemanja Ivanovic <nemanja.i.ibm@gmail.com>2017-12-13 14:47:35 +0000
commit6f590bf8bb3328f33dde73f50f1e408a13cf53a9 (patch)
tree4e766be0d1a1a054476f355bc7fbf629a1bb557d /llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
parent88e6f83f9eedf16ff0bff40f3714a1d64f2367c4 (diff)
downloadbcm5719-llvm-6f590bf8bb3328f33dde73f50f1e408a13cf53a9.tar.gz
bcm5719-llvm-6f590bf8bb3328f33dde73f50f1e408a13cf53a9.zip
[PowerPC] MachineSSA pass to reduce the number of CR-logical operations
The initial implementation of an MI SSA pass to reduce cr-logical operations. Currently, the only operations handled by the pass are binary operations where both CR-inputs come from the same block and the single use is a conditional branch (also in the same block). Committing this off by default to allow for a period of field testing. Will enable it by default in a follow-up patch soon. Differential Revision: https://reviews.llvm.org/D30431 llvm-svn: 320584
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCTargetMachine.cpp')
-rw-r--r--llvm/lib/Target/PowerPC/PPCTargetMachine.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
index 2babc8f6453..c934668a80c 100644
--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
@@ -88,6 +88,10 @@ EnableMachineCombinerPass("ppc-machine-combiner",
cl::desc("Enable the machine combiner pass"),
cl::init(true), cl::Hidden);
+static cl::opt<bool>
+ ReduceCRLogical("ppc-reduce-cr-logicals",
+ cl::desc("Expand eligible cr-logical binary ops to branches"),
+ cl::init(false), cl::Hidden);
extern "C" void LLVMInitializePowerPCTarget() {
// Register the targets
RegisterTargetMachine<PPCTargetMachine> A(getThePPC32Target());
@@ -392,6 +396,9 @@ void PPCPassConfig::addMachineSSAOptimization() {
if (TM->getTargetTriple().getArch() == Triple::ppc64le &&
!DisableVSXSwapRemoval)
addPass(createPPCVSXSwapRemovalPass());
+ // Reduce the number of cr-logical ops.
+ if (ReduceCRLogical && getOptLevel() != CodeGenOpt::None)
+ addPass(createPPCReduceCRLogicalsPass());
// Target-specific peephole cleanups performed after instruction
// selection.
if (!DisableMIPeephole) {
OpenPOWER on IntegriCloud