Use a SCEV expression cast instead of immediately inserting a
authorDan Gohman <gohman@apple.com>
Thu, 16 Apr 2009 15:47:35 +0000 (15:47 +0000)
committerDan Gohman <gohman@apple.com>
Thu, 16 Apr 2009 15:47:35 +0000 (15:47 +0000)
new instruction with SCEVExpander::InsertCastOfTo.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69290 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/LoopStrengthReduce.cpp

index a542ca02a2187cb2fea496987c160d0a7b25f2e4..74b0d5a606c7b077e8aff6e6ada32673d30d69b1 100644 (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