Add control of function merging to the PMBuilder.
authorNick Lewycky <nicholas@mxc.ca>
Sat, 13 Sep 2014 21:46:00 +0000 (21:46 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Sat, 13 Sep 2014 21:46:00 +0000 (21:46 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217731 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Transforms/IPO/PassManagerBuilder.h
lib/Transforms/IPO/PassManagerBuilder.cpp

index 0cf346acebb814c99e0f8a42562935c7e1607107..b1426b4f45ca136ceff56672243975338fadb3f7 100644 (file)
@@ -123,6 +123,7 @@ public:
   bool VerifyInput;
   bool VerifyOutput;
   bool StripDebug;
+  bool MergeFunctions;
 
 private:
   /// ExtensionList - This is list of all of the extensions that are registered.
index 1b9d8c16060a542fcc1de292d2e942973981dd35..d02e6975a19f6991feb7c7af3953110f4b72c935 100644 (file)
@@ -91,6 +91,7 @@ PassManagerBuilder::PassManagerBuilder() {
     VerifyInput = false;
     VerifyOutput = false;
     StripDebug = false;
+    MergeFunctions = false;
 }
 
 PassManagerBuilder::~PassManagerBuilder() {
@@ -330,6 +331,10 @@ void PassManagerBuilder::populateModulePassManager(PassManagerBase &MPM) {
       MPM.add(createConstantMergePass());     // Merge dup global constants
     }
   }
+
+  if (MergeFunctions)
+    MPM.add(createMergeFunctionsPass());
+
   addExtensionsToPM(EP_OptimizerLast, MPM);
 }
 
@@ -427,6 +432,11 @@ void PassManagerBuilder::addLTOOptimizationPasses(PassManagerBase &PM) {
 
   // Now that we have optimized the program, discard unreachable functions.
   PM.add(createGlobalDCEPass());
+
+  // FIXME: this is profitable (for compiler time) to do at -O0 too, but
+  // currently it damages debug info.
+  if (MergeFunctions)
+    PM.add(createMergeFunctionsPass());
 }
 
 void PassManagerBuilder::populateLTOPassManager(PassManagerBase &PM,