[llvm-commits] [llvm] r112625 - /llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp

Owen Anderson resistor at mac.com
Tue Aug 31 11:55:52 PDT 2010


Author: resistor
Date: Tue Aug 31 13:55:52 2010
New Revision: 112625

URL: http://llvm.org/viewvc/llvm-project?rev=112625&view=rev
Log:
Only try to clean up the current block if we changed that block already.

Modified:
    llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp?rev=112625&r1=112624&r2=112625&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp Tue Aug 31 13:55:52 2010
@@ -100,19 +100,25 @@
 bool CorrelatedValuePropagation::runOnFunction(Function &F) {
   LVI = &getAnalysis<LazyValueInfo>();
   
-  bool Changed = false;
+  bool FnChanged = false;
   
   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++;
       if (SelectInst *SI = dyn_cast<SelectInst>(II))
-        Changed |= processSelect(SI);
+        BBChanged |= processSelect(SI);
       else if (PHINode *P = dyn_cast<PHINode>(II))
-        Changed |= processPHI(P);
+        BBChanged |= processPHI(P);
     }
     
-    SimplifyInstructionsInBlock(FI);
+    // Propagating correlated values might leave cruft around.
+    // Try to clean it up before we continue.
+    if (BBChanged)
+      SimplifyInstructionsInBlock(FI);
+    
+    FnChanged |= BBChanged;
   }
   
-  return Changed;
+  return FnChanged;
 }





More information about the llvm-commits mailing list