Give up on doing in-line instruction simplification during correlated value propagati...
authorOwen Anderson <resistor@mac.com>
Fri, 29 Oct 2010 21:05:17 +0000 (21:05 +0000)
committerOwen Anderson <resistor@mac.com>
Fri, 29 Oct 2010 21:05:17 +0000 (21:05 +0000)
needs to be guaranteed never to be run on an unreachable block.  However, earlier block simplifications may have
changed the CFG to make block that were reachable when we began our iteration unreachable by the time we try to
simplify them. (Note that this also means that our depth-first iterators were potentially being invalidated).

This should not have a large impact on code quality, since later runs of instcombine should pick up these simplifications.
Fixes PR8506.

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

lib/Transforms/Scalar/CorrelatedValuePropagation.cpp

index 0f8f6d28e4f7adfebb7f140b82a02cbeb0a2691d..44e72e2232c27fad5c385a5d28b5746dca4c46e6 100644 (file)
@@ -19,7 +19,6 @@
 #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;
 
@@ -172,10 +171,7 @@ bool CorrelatedValuePropagation::runOnFunction(Function &F) {
   
   bool FnChanged = false;
   
-  // 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) {
+  for (Function::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI) {
     bool BBChanged = false;
     for (BasicBlock::iterator BI = FI->begin(), BE = FI->end(); BI != BE; ) {
       Instruction *II = BI++;
@@ -197,11 +193,6 @@ bool CorrelatedValuePropagation::runOnFunction(Function &F) {
       }
     }
     
-    // Propagating correlated values might leave cruft around.
-    // Try to clean it up before we continue.
-    if (BBChanged)
-      SimplifyInstructionsInBlock(*FI);
-    
     FnChanged |= BBChanged;
   }