diff options
| author | Chris Lattner <sabre@nondot.org> | 2010-12-27 18:39:08 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2010-12-27 18:39:08 +0000 |
| commit | cb18bfa3d2fbfab3e880ce639db4247db8c07552 (patch) | |
| tree | b372ce69fa6d1e28c345d209542fdc0a161bf3ae /llvm/lib/Transforms | |
| parent | 1de2dd0e5edd2bc2c82d047cc0f3770488f09a11 (diff) | |
| download | bcm5719-llvm-cb18bfa3d2fbfab3e880ce639db4247db8c07552.tar.gz bcm5719-llvm-cb18bfa3d2fbfab3e880ce639db4247db8c07552.zip | |
fix some issues Frits noticed, add AliasAnalysis as a dependency
llvm-svn: 122585
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp b/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp index f8748efecea..476cb284bae 100644 --- a/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp +++ b/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp @@ -15,6 +15,7 @@ #define DEBUG_TYPE "loop-idiom" #include "llvm/Transforms/Scalar.h" +#include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Analysis/LoopPass.h" #include "llvm/Analysis/ScalarEvolutionExpressions.h" #include "llvm/Analysis/ScalarEvolutionExpander.h" @@ -59,6 +60,8 @@ namespace { AU.addPreservedID(LoopSimplifyID); AU.addRequiredID(LCSSAID); AU.addPreservedID(LCSSAID); + AU.addRequired<AliasAnalysis>(); + AU.addPreserved<AliasAnalysis>(); AU.addRequired<ScalarEvolution>(); AU.addPreserved<ScalarEvolution>(); AU.addPreserved<DominatorTree>(); @@ -73,6 +76,7 @@ INITIALIZE_PASS_DEPENDENCY(LoopInfo) INITIALIZE_PASS_DEPENDENCY(LoopSimplify) INITIALIZE_PASS_DEPENDENCY(LCSSA) INITIALIZE_PASS_DEPENDENCY(ScalarEvolution) +INITIALIZE_AG_DEPENDENCY(AliasAnalysis) INITIALIZE_PASS_END(LoopIdiomRecognize, "loop-idiom", "Recognize loop idioms", false, false) @@ -141,13 +145,15 @@ bool LoopIdiomRecognize::runOnLoop(Loop *L, LPPassManager &LPM) { StoreInst *SI = dyn_cast<StoreInst>(I++); if (SI == 0 || SI->isVolatile()) continue; - WeakVH InstPtr; - if (processLoopStore(SI, BECount)) { - // If processing the store invalidated our iterator, start over from the - // head of the loop. - if (InstPtr == 0) - I = BB->begin(); - } + WeakVH InstPtr(SI); + if (!processLoopStore(SI, BECount)) continue; + + MadeChange = true; + + // If processing the store invalidated our iterator, start over from the + // head of the loop. + if (InstPtr == 0) + I = BB->begin(); } return MadeChange; @@ -204,6 +210,10 @@ processLoopStoreOfSplatValue(StoreInst *SI, unsigned StoreSize, // would be unsafe to do if there is anything else in the loop that may read // or write to the aliased location. Check for an alias. + // FIXME: Need to get a base pointer that is valid. + // if (LoopCanModRefLocation(SI->getPointerOperand()) + + // FIXME: TODO safety check. // Okay, everything looks good, insert the memset. |

