Minor optimization efficiency improvement:
authorChris Lattner <sabre@nondot.org>
Fri, 12 Sep 2003 15:36:03 +0000 (15:36 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 12 Sep 2003 15:36:03 +0000 (15:36 +0000)
  - Run mem2reg promotion first
  - Only rerun passes if the previous thing changed something

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

lib/Transforms/Scalar/ScalarReplAggregates.cpp

index 8351674d397ed0a34e1f34be0fb627eb3c4e7de5..9f2e20f1f6f953934975a4bc4883dbd9dd2f8d89 100644 (file)
@@ -58,12 +58,14 @@ Pass *createScalarReplAggregatesPass() { return new SROA(); }
 
 
 bool SROA::runOnFunction(Function &F) {
-  bool Changed = false, LocalChange;
-  do {
-    LocalChange = performScalarRepl(F);
-    LocalChange |= performPromotion(F);
-    Changed |= LocalChange;
-  } while (LocalChange);
+  bool Changed = performPromotion(F);
+  while (1) {
+    bool LocalChange = performScalarRepl(F);
+    if (!LocalChange) break;   // No need to repromote if no scalarrepl
+    Changed = true;
+    LocalChange = performPromotion(F);
+    if (!LocalChange) break;   // No need to re-scalarrepl if no promotion
+  }
 
   return Changed;
 }
@@ -75,7 +77,7 @@ bool SROA::performPromotion(Function &F) {
 
   BasicBlock &BB = F.getEntryNode();  // Get the entry node for the function
 
-  bool Changed  = false;
+  bool Changed = false;
   
   while (1) {
     Allocas.clear();