Enable partial libcall inlining for all targets by default.
authorJames Molloy <james.molloy@arm.com>
Wed, 23 Jul 2014 13:33:00 +0000 (13:33 +0000)
committerJames Molloy <james.molloy@arm.com>
Wed, 23 Jul 2014 13:33:00 +0000 (13:33 +0000)
This pass attempts to speculatively use a sqrt instruction if one exists on the target, falling back to a libcall if the target instruction returned NaN.

This was enabled for MIPS and System-Z, but is well guarded and is good for most targets - GCC does this for (that I've checked) X86, ARM and AArch64.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213752 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/Passes.cpp
lib/Target/Mips/MipsTargetMachine.cpp
lib/Target/SystemZ/SystemZTargetMachine.cpp

index 249b2d0f6bb95300909d7a0f450d8617fdb4445a..6e86c8f21099f7b748aa3b612fcc0ab22dc89d0c 100644 (file)
@@ -71,6 +71,8 @@ static cl::opt<bool> DisableCGP("disable-cgp", cl::Hidden,
     cl::desc("Disable Codegen Prepare"));
 static cl::opt<bool> DisableCopyProp("disable-copyprop", cl::Hidden,
     cl::desc("Disable Copy Propagation pass"));
+static cl::opt<bool> DisablePartialLibcallInlining("disable-partial-libcall-inlining",
+    cl::Hidden, cl::desc("Disable Partial Libcall Inlining"));
 static cl::opt<bool> PrintLSR("print-lsr-output", cl::Hidden,
     cl::desc("Print LLVM IR produced by the loop-reduce pass"));
 static cl::opt<bool> PrintISelInput("print-isel-input", cl::Hidden,
@@ -399,6 +401,9 @@ void TargetPassConfig::addIRPasses() {
   // Prepare expensive constants for SelectionDAG.
   if (getOptLevel() != CodeGenOpt::None && !DisableConstantHoisting)
     addPass(createConstantHoistingPass());
+
+  if (getOptLevel() != CodeGenOpt::None && !DisablePartialLibcallInlining)
+    addPass(createPartiallyInlineLibCallsPass());
 }
 
 /// Turn exception handling constructs into something the code generators can
index bb1870ebe6059567c93d188733a946b8d5d419d6..d9856dc15e13cfdfcb274a974c60cd9771fa2804 100644 (file)
@@ -141,7 +141,6 @@ void MipsPassConfig::addIRPasses() {
     addPass(createMipsOs16(getMipsTargetMachine()));
   if (getMipsSubtarget().inMips16HardFloat())
     addPass(createMips16HardFloat(getMipsTargetMachine()));
-  addPass(createPartiallyInlineLibCallsPass());
 }
 // Install an instruction selector pass using
 // the ISelDag to gen Mips code.
index 0122e99f8a776140affa791a3ae15e52e817bcb0..a30b225e502f6087058bcd5655acf28c7aa79e80 100644 (file)
@@ -49,7 +49,6 @@ public:
 
 void SystemZPassConfig::addIRPasses() {
   TargetPassConfig::addIRPasses();
-  addPass(createPartiallyInlineLibCallsPass());
 }
 
 bool SystemZPassConfig::addInstSelector() {