From: Chris Lattner Date: Sun, 8 Aug 2004 01:30:07 +0000 (+0000) Subject: Two fixes: X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=68392422e6f2176b5dc686332a6dd4a69b87f83b;p=oota-llvm.git Two fixes: 1. Fix a REALLY nasty cyclic replacement issue that Anshu discovered, causing nondeterminstic crashes and memory corruption. 2. For performance, don't go inserting constantexpr casts of GV pointers. This should definitely go into 1.3 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15568 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/ExprTypeConvert.cpp b/lib/Transforms/ExprTypeConvert.cpp index 0f80c2f8bb2..a657f023df4 100644 --- a/lib/Transforms/ExprTypeConvert.cpp +++ b/lib/Transforms/ExprTypeConvert.cpp @@ -151,7 +151,7 @@ bool llvm::ExpressionConvertibleToType(Value *V, const Type *Ty, // If it's a constant... all constants can be converted to a different // type. // - if (Constant *CPV = dyn_cast(V)) + if (isa(V) && !isa(V)) return true; CTMap[V] = Ty; @@ -984,10 +984,9 @@ static void ConvertOperandToType(User *U, Value *OldVal, Value *NewVal, unsigned OtherIdx = (OldVal == I->getOperand(0)) ? 1 : 0; Value *OtherOp = I->getOperand(OtherIdx); + Res->setOperand(!OtherIdx, NewVal); Value *NewOther = ConvertExpressionToType(OtherOp, NewTy, VMC, TD); - Res->setOperand(OtherIdx, NewOther); - Res->setOperand(!OtherIdx, NewVal); break; } case Instruction::Shl: