Use a depth-first iteratation in CorrelatedValuePropagation to avoid wasting time...
authorOwen Anderson <resistor@mac.com>
Thu, 16 Sep 2010 18:35:07 +0000 (18:35 +0000)
committerOwen Anderson <resistor@mac.com>
Thu, 16 Sep 2010 18:35:07 +0000 (18:35 +0000)
to optimize unreachable blocks.

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

lib/Transforms/Scalar/CorrelatedValuePropagation.cpp

index 0d4e45de3466461932fc127d62a8b0429e5ea044..e8b8e946170b0f59e356669271cc5d337a06bb6e 100644 (file)
@@ -19,6 +19,7 @@
 #include "llvm/Analysis/LazyValueInfo.h"
 #include "llvm/Support/CFG.h"
 #include "llvm/Transforms/Utils/Local.h"
+#include "llvm/ADT/DepthFirstIterator.h"
 #include "llvm/ADT/Statistic.h"
 using namespace llvm;
 
@@ -166,7 +167,10 @@ bool CorrelatedValuePropagation::runOnFunction(Function &F) {
   
   bool FnChanged = false;
   
-  for (Function::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI) {
+  // Perform a depth-first walk of the CFG so that we don't waste time
+  // optimizing unreachable blocks.
+  for (df_iterator<BasicBlock*> FI = df_begin(&F.getEntryBlock()),
+       FE = df_end(&F.getEntryBlock()); FI != FE; ++FI) {
     bool BBChanged = false;
     for (BasicBlock::iterator BI = FI->begin(), BE = FI->end(); BI != BE; ) {
       Instruction *II = BI++;
@@ -191,7 +195,7 @@ bool CorrelatedValuePropagation::runOnFunction(Function &F) {
     // Propagating correlated values might leave cruft around.
     // Try to clean it up before we continue.
     if (BBChanged)
-      SimplifyInstructionsInBlock(FI);
+      SimplifyInstructionsInBlock(*FI);
     
     FnChanged |= BBChanged;
   }