Use a SCEV expression cast instead of immediately inserting a

new instruction with SCEVExpander::InsertCastOfTo.

llvm-svn: 69290
This commit is contained in:
Dan Gohman 2009-04-16 15:47:35 +00:00
parent 426b5cf16a
commit 71bccd3e0e
1 changed files with 8 additions and 8 deletions

View File

@ -1836,17 +1836,17 @@ void LoopStrengthReduce::StrengthReduceStridedIVUsers(const SCEVHandle &Stride,
if (L->contains(User.Inst->getParent()))
User.Inst->moveBefore(LatchBlock->getTerminator());
}
if (RewriteOp->getType() != ReplacedTy) {
Instruction::CastOps opcode =
CastInst::getCastOpcode(RewriteOp, false, ReplacedTy, false);
assert(opcode != Instruction::SExt &&
opcode != Instruction::ZExt &&
"Unexpected widening cast!");
RewriteOp = SCEVExpander::InsertCastOfTo(opcode, RewriteOp, ReplacedTy);
}
SCEVHandle RewriteExpr = SE->getUnknown(RewriteOp);
if (TD->getTypeSizeInBits(RewriteOp->getType()) !=
TD->getTypeSizeInBits(ReplacedTy)) {
assert(TD->getTypeSizeInBits(RewriteOp->getType()) >
TD->getTypeSizeInBits(ReplacedTy) &&
"Unexpected widening cast!");
RewriteExpr = SE->getTruncateExpr(RewriteExpr, ReplacedTy);
}
// If we had to insert new instructions for RewriteOp, we have to
// consider that they may not have been able to end up immediately
// next to RewriteOp, because non-PHI instructions may never precede