diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2009-02-17 00:13:06 +0000 | 
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2009-02-17 00:13:06 +0000 | 
| commit | 161861deb089479a2bf38989deb9c4225ae61f0d (patch) | |
| tree | f1d96a7d779f445a977228a2a0ccdf903e6dba77 /llvm/lib/Transforms | |
| parent | 2cd8982002c18cf09e0f6bf97ce1c308a9397f03 (diff) | |
| download | bcm5719-llvm-161861deb089479a2bf38989deb9c4225ae61f0d.tar.gz bcm5719-llvm-161861deb089479a2bf38989deb9c4225ae61f0d.zip | |
Strengthen the "non-constant stride must dominate loop preheader" check.
llvm-svn: 64703
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp | 13 | 
1 files changed, 4 insertions, 9 deletions
| diff --git a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp index 055114c215d..0945a5759f8 100644 --- a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -438,16 +438,11 @@ static bool getSCEVStartAndStride(const SCEVHandle &SH, Loop *L,    Start = SE->getAddExpr(Start, AddRec->getOperand(0));    if (!isa<SCEVConstant>(AddRec->getOperand(1))) { -    // If stride is an instruction, make sure it dominates the loop header. +    // If stride is an instruction, make sure it dominates the loop preheader.      // Otherwise we could end up with a use before def situation. -    if (SCEVUnknown *SU = dyn_cast<SCEVUnknown>(AddRec->getOperand(1))) { -      if (Instruction *I = dyn_cast<Instruction>(SU->getValue())) { -        BasicBlock *StrideBB = I->getParent(); -        BasicBlock *Preheader = L->getLoopPreheader(); -        if (!DT->dominates(StrideBB, Preheader)) -          return false; -      } -    } +    BasicBlock *Preheader = L->getLoopPreheader(); +    if (!AddRec->getOperand(1)->dominates(Preheader, DT)) +      return false;      DOUT << "[" << L->getHeader()->getName()           << "] Variable stride: " << *AddRec << "\n"; | 

