fix two strange things in the default passmgr:
authorChris Lattner <sabre@nondot.org>
Sun, 1 Nov 2009 20:41:59 +0000 (20:41 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 1 Nov 2009 20:41:59 +0000 (20:41 +0000)
1. we'd run simplifycfg at the very start, even though
the per function passes have already cleaned this up.

2. In the main per-function pipeline that is interlaced with inlining
   etc, we would do instcombine, jump threading, simplifycfg *before*
   doing SROA.  SROA is much more likely to expose opportunities for
   these passes than they are for SROA, so move SRoA up earlier.

also add some comments.

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

include/llvm/Support/StandardPasses.h

index ffa93149af8ed40ce068bf5befda968a1d82815b..86065a073593dead52f20c2854b0927e201d6821 100644 (file)
@@ -96,7 +96,6 @@ namespace llvm {
       return;
     }
     
-    PM->add(createCFGSimplificationPass());     // Clean up disgusting code
     if (UnitAtATime) {
       PM->add(createGlobalOptimizerPass());     // Optimize out global vars
       
@@ -106,6 +105,8 @@ namespace llvm {
     }
     PM->add(createInstructionCombiningPass());  // Clean up after IPCP & DAE
     PM->add(createCFGSimplificationPass());     // Clean up after IPCP & DAE
+    
+    // Start of CallGraph SCC passes.
     if (UnitAtATime) {
       if (HaveExceptions)
         PM->add(createPruneEHPass());           // Remove dead EH info
@@ -115,13 +116,18 @@ namespace llvm {
       PM->add(InliningPass);
     if (OptimizationLevel > 2)
       PM->add(createArgumentPromotionPass());   // Scalarize uninlined fn args
+    
+    // Start of function pass.
+    
+    PM->add(createScalarReplAggregatesPass());  // Break up aggregate allocas
     if (SimplifyLibCalls)
       PM->add(createSimplifyLibCallsPass());    // Library Call Optimizations
     PM->add(createInstructionCombiningPass());  // Cleanup for scalarrepl.
     PM->add(createJumpThreadingPass());         // Thread jumps.
     PM->add(createCFGSimplificationPass());     // Merge & remove BBs
-    PM->add(createScalarReplAggregatesPass());  // Break up aggregate allocas
     PM->add(createInstructionCombiningPass());  // Combine silly seq's
+    
+    // FIXME: CondProp breaks critical edges, which is slow.
     PM->add(createCondPropagationPass());       // Propagate conditionals
     PM->add(createTailCallEliminationPass());   // Eliminate tail calls
     PM->add(createCFGSimplificationPass());     // Merge & remove BBs