diff options
| author | Owen Anderson <resistor@mac.com> | 2010-08-31 18:55:52 +0000 | 
|---|---|---|
| committer | Owen Anderson <resistor@mac.com> | 2010-08-31 18:55:52 +0000 | 
| commit | 048efbe225be6b313e09ba30648e195d53c5ce0c (patch) | |
| tree | dcb25a631388d56abb1f3dd8a3282abf04a0e9a5 /llvm/lib/Transforms | |
| parent | 9ce9210e475903b117b72089565eb38b3dfcc80c (diff) | |
| download | bcm5719-llvm-048efbe225be6b313e09ba30648e195d53c5ce0c.tar.gz bcm5719-llvm-048efbe225be6b313e09ba30648e195d53c5ce0c.zip | |
Only try to clean up the current block if we changed that block already.
llvm-svn: 112625
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp | 16 | 
1 files changed, 11 insertions, 5 deletions
| diff --git a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp index a62eb20a88e..c673b0b3326 100644 --- a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp +++ b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp @@ -100,19 +100,25 @@ bool CorrelatedValuePropagation::processPHI(PHINode *P) {  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;  } | 

