From: Chris Lattner Date: Wed, 28 Jun 2006 17:34:50 +0000 (+0000) Subject: Fix Transforms/InstCombine/2006-06-28-infloop.ll X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=d2280183961dd120288e8a0ee319d46e0cf81e97;p=oota-llvm.git Fix Transforms/InstCombine/2006-06-28-infloop.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28961 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 63cd256dc57..797b2b8db2e 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -4934,6 +4934,12 @@ static bool CanEvaluateInDifferentType(Value *V, const Type *Ty, // If this is a cast from the destination type, we can trivially eliminate // it, and this will remove a cast overall. if (I->getOperand(0)->getType() == Ty) { + // If the first operand is itself a cast, and is eliminable, do not count + // this as an eliminable cast. We would prefer to eliminate those two + // casts first. + if (CastInst *OpCast = dyn_cast(I->getOperand(0))) + return true; + ++NumCastsRemoved; return true; }