Move DisableGVNLoadPRE from populateLTOPassManager to PassManagerBuilder.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 21 Aug 2014 13:13:17 +0000 (13:13 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 21 Aug 2014 13:13:17 +0000 (13:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216174 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Transforms/IPO/PassManagerBuilder.h
lib/LTO/LTOCodeGenerator.cpp
lib/Transforms/IPO/PassManagerBuilder.cpp
tools/bugpoint/bugpoint.cpp
tools/opt/opt.cpp

index 15ad26b1976a6971697ce9a01bfcd3fd0a936bef..7c54ad6f64aa7cdc50cb2597fc9be1a43110cdc1 100644 (file)
@@ -118,6 +118,7 @@ public:
   bool LoopVectorize;
   bool RerollLoops;
   bool LoadCombine;
+  bool DisableGVNLoadPRE;
 
 private:
   /// ExtensionList - This is list of all of the extensions that are registered.
@@ -144,8 +145,7 @@ public:
 
   /// populateModulePassManager - This sets up the primary pass manager.
   void populateModulePassManager(PassManagerBase &MPM);
-  void populateLTOPassManager(PassManagerBase &PM, bool RunInliner,
-                              bool DisableGVNLoadPRE);
+  void populateLTOPassManager(PassManagerBase &PM, bool RunInliner);
 };
 
 /// Registers a function for adding a standard set of passes.  This should be
index 231e4838470afeb282e9527002f7e8db2886c01f..2a195400e3be0439777b506c9a2417abcb4613ad 100644 (file)
@@ -474,9 +474,11 @@ bool LTOCodeGenerator::generateObjectFile(raw_ostream &out,
   // Enabling internalize here would use its AllButMain variant. It
   // keeps only main if it exists and does nothing for libraries. Instead
   // we create the pass ourselves with the symbol list provided by the linker.
-  if (!DisableOpt)
-    PassManagerBuilder().populateLTOPassManager(passes, !DisableInline,
-                                                DisableGVNLoadPRE);
+  if (!DisableOpt) {
+    PassManagerBuilder PMB;
+    PMB.DisableGVNLoadPRE = DisableGVNLoadPRE;
+    PMB.populateLTOPassManager(passes, !DisableInline);
+  }
 
   // Make sure everything is still good.
   passes.add(createVerifierPass());
index e7655774c92c233f304bfbd78e5f4e14a271d455..301279fdc8fc124de2777bbf820437a6bd240fd8 100644 (file)
@@ -77,6 +77,7 @@ PassManagerBuilder::PassManagerBuilder() {
     LoopVectorize = RunLoopVectorization;
     RerollLoops = RunLoopRerolling;
     LoadCombine = RunLoadCombine;
+    DisableGVNLoadPRE = false;
 }
 
 PassManagerBuilder::~PassManagerBuilder() {
@@ -217,7 +218,7 @@ void PassManagerBuilder::populateModulePassManager(PassManagerBase &MPM) {
 
   if (OptLevel > 1) {
     MPM.add(createMergedLoadStoreMotionPass()); // Merge load/stores in diamond
-    MPM.add(createGVNPass());                 // Remove redundancies
+    MPM.add(createGVNPass(DisableGVNLoadPRE));  // Remove redundancies
   }
   MPM.add(createMemCpyOptPass());             // Remove memcpy / form memset
   MPM.add(createSCCPPass());                  // Constant prop with SCCP
@@ -243,7 +244,7 @@ void PassManagerBuilder::populateModulePassManager(PassManagerBase &MPM) {
       MPM.add(createInstructionCombiningPass());
       addExtensionsToPM(EP_Peephole, MPM);
       if (OptLevel > 1 && UseGVNAfterVectorization)
-        MPM.add(createGVNPass());           // Remove redundancies
+        MPM.add(createGVNPass(DisableGVNLoadPRE)); // Remove redundancies
       else
         MPM.add(createEarlyCSEPass());      // Catch trivial redundancies
 
@@ -282,7 +283,7 @@ void PassManagerBuilder::populateModulePassManager(PassManagerBase &MPM) {
       MPM.add(createInstructionCombiningPass());
       addExtensionsToPM(EP_Peephole, MPM);
       if (OptLevel > 1 && UseGVNAfterVectorization)
-        MPM.add(createGVNPass());           // Remove redundancies
+        MPM.add(createGVNPass(DisableGVNLoadPRE)); // Remove redundancies
       else
         MPM.add(createEarlyCSEPass());      // Catch trivial redundancies
 
@@ -313,8 +314,7 @@ void PassManagerBuilder::populateModulePassManager(PassManagerBase &MPM) {
 }
 
 void PassManagerBuilder::populateLTOPassManager(PassManagerBase &PM,
-                                                bool RunInliner,
-                                                bool DisableGVNLoadPRE) {
+                                                bool RunInliner) {
   // Provide AliasAnalysis services for optimizations.
   addInitialAliasAnalysisPasses(PM);
 
@@ -483,5 +483,5 @@ void LLVMPassManagerBuilderPopulateLTOPassManager(LLVMPassManagerBuilderRef PMB,
                                                   LLVMBool RunInliner) {
   PassManagerBuilder *Builder = unwrap(PMB);
   PassManagerBase *LPM = unwrap(PM);
-  Builder->populateLTOPassManager(*LPM, RunInliner != 0, false);
+  Builder->populateLTOPassManager(*LPM, RunInliner != 0);
 }
index cbecc3599700caea085600f7c92b988664c526bd..8a0d7aa4afbc61c99444bf39dc26b0e9e6e8db9d 100644 (file)
@@ -179,7 +179,7 @@ int main(int argc, char **argv) {
 
   if (StandardLinkOpts) {
     PassManagerBuilder Builder;
-    Builder.populateLTOPassManager(PM, /*RunInliner=*/true, false);
+    Builder.populateLTOPassManager(PM, /*RunInliner=*/true);
   }
 
   if (OptLevelO1 || OptLevelO2 || OptLevelO3) {
index 1ff795d67d22c2417796534ac3d02d323e8a3ecb..538c18cc488fa16e85188c2cfd2a62d9e11e01ca 100644 (file)
@@ -267,7 +267,7 @@ static void AddStandardLinkPasses(PassManagerBase &PM) {
   if (DisableOptimizations) return;
 
   PassManagerBuilder Builder;
-  Builder.populateLTOPassManager(PM, /*RunInliner=*/!DisableInline, false);
+  Builder.populateLTOPassManager(PM, /*RunInliner=*/!DisableInline);
 }
 
 //===----------------------------------------------------------------------===//