diff options
| author | Owen Anderson <resistor@mac.com> | 2010-09-16 18:35:07 +0000 |
|---|---|---|
| committer | Owen Anderson <resistor@mac.com> | 2010-09-16 18:35:07 +0000 |
| commit | 3487ae6650ae0800965ae1dbfed696f0412208f2 (patch) | |
| tree | f94e0317e11388bf7bbc7529f402cf378f989da2 /lib/Transforms | |
| parent | e1956e67526da1b81c6f454137fa5cc2ff1a3956 (diff) | |
| download | external_llvm-3487ae6650ae0800965ae1dbfed696f0412208f2.zip external_llvm-3487ae6650ae0800965ae1dbfed696f0412208f2.tar.gz external_llvm-3487ae6650ae0800965ae1dbfed696f0412208f2.tar.bz2 | |
Use a depth-first iteratation in CorrelatedValuePropagation to avoid wasting time trying
to optimize unreachable blocks.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114105 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
| -rw-r--r-- | lib/Transforms/Scalar/CorrelatedValuePropagation.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp b/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp index 0d4e45d..e8b8e94 100644 --- a/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp +++ b/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp @@ -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; } |
