diff options
author | Devang Patel <dpatel@apple.com> | 2007-09-11 00:12:56 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2007-09-11 00:12:56 +0000 |
commit | a28a7f1b2dc09a5b7917454de11db19f2e84fbdd (patch) | |
tree | bd270cef26d777d9a67d3206e3b40e22c8b39543 | |
parent | f4202e91f80f4fe60eaa2e7656c4f93887de2014 (diff) | |
download | bcm5719-llvm-a28a7f1b2dc09a5b7917454de11db19f2e84fbdd.tar.gz bcm5719-llvm-a28a7f1b2dc09a5b7917454de11db19f2e84fbdd.zip |
Split condition does not have to be ICmpInst in all cases.
llvm-svn: 41822
-rw-r--r-- | llvm/lib/Transforms/Scalar/LoopIndexSplit.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopIndexSplit.cpp b/llvm/lib/Transforms/Scalar/LoopIndexSplit.cpp index 03f1553e907..f4be5ddef9c 100644 --- a/llvm/lib/Transforms/Scalar/LoopIndexSplit.cpp +++ b/llvm/lib/Transforms/Scalar/LoopIndexSplit.cpp @@ -64,8 +64,8 @@ namespace { // Induction variable's range is split at this value. Value *SplitValue; - // This compare instruction compares IndVar against SplitValue. - ICmpInst *SplitCondition; + // This instruction compares IndVar against SplitValue. + Instruction *SplitCondition; // True if after loop index split, first loop will execute split condition's // true branch. @@ -221,7 +221,8 @@ bool LoopIndexSplit::runOnLoop(Loop *IncomingLoop, LPPassManager &LPM_Ref) { for (SmallVector<SplitInfo, 4>::iterator SI = SplitData.begin(), E = SplitData.end(); SI != E;) { SplitInfo &SD = *SI; - if (SD.SplitCondition->getPredicate() == ICmpInst::ICMP_EQ) { + ICmpInst *CI = dyn_cast<ICmpInst>(SD.SplitCondition); + if (CI && CI->getPredicate() == ICmpInst::ICMP_EQ) { Changed = processOneIterationLoop(SD); if (Changed) { ++NumIndexSplit; @@ -790,7 +791,8 @@ bool LoopIndexSplit::safeSplitCondition(SplitInfo &SD) { /// based on split value. void LoopIndexSplit::calculateLoopBounds(SplitInfo &SD) { - ICmpInst::Predicate SP = SD.SplitCondition->getPredicate(); + ICmpInst *SC = cast<ICmpInst>(SD.SplitCondition); + ICmpInst::Predicate SP = SC->getPredicate(); const Type *Ty = SD.SplitValue->getType(); bool Sign = ExitCondition->isSignedPredicate(); BasicBlock *Preheader = L->getLoopPreheader(); @@ -1140,7 +1142,8 @@ bool LoopIndexSplit::splitLoop(SplitInfo &SD) { ICmpInst *B_SplitCondition = cast<ICmpInst>(ValueMap[SD.SplitCondition]); moveExitCondition(A_SplitCondBlock, A_ActiveBranch, A_ExitBlock, ExitCondition, - SD.SplitCondition, IndVar, IndVarIncrement, ALoop); + cast<ICmpInst>(SD.SplitCondition), IndVar, IndVarIncrement, + ALoop); moveExitCondition(B_SplitCondBlock, B_ActiveBranch, B_ExitBlock, B_ExitCondition, B_SplitCondition, B_IndVar, B_IndVarIncrement, BLoop); |