this logic is broken for trunc to bool, replace the folding logic for trunc

completely, as it is trivial.  We should probably do this for the rest of the
cast operations.  This fixes ConstProp/2006-12-01-TruncBoolBug.ll.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32081 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2006-12-01 19:22:41 +00:00
parent 68329b2187
commit 5be662505e

View File

@ -860,10 +860,10 @@ Constant *llvm::ConstantFoldCastInstruction(unsigned opc, const Constant *V,
// We actually have to do a cast now, but first, we might need to fix up
// the value of the operand.
switch (opc) {
case Instruction::PtrToInt:
case Instruction::FPTrunc:
case Instruction::Trunc:
case Instruction::FPExt:
break; // floating point input & output, no fixup needed
break;
case Instruction::FPToUI: {
ConstRules &Rules = ConstRules::get(V, V);
V = Rules.castToULong(V); // make sure we get an unsigned value first
@ -891,9 +891,12 @@ Constant *llvm::ConstantFoldCastInstruction(unsigned opc, const Constant *V,
V = ConstantInt::get(SrcTy->getSignedVersion(),
cast<ConstantIntegral>(V)->getSExtValue());
break;
case Instruction::PtrToInt:
break;
case Instruction::Trunc:
// We just handle trunc directly here. The code below doesn't work for
// trunc to bool.
if (const ConstantInt *CI = dyn_cast<ConstantInt>(V))
return ConstantIntegral::get(DestTy, CI->getZExtValue());
return 0;
case Instruction::BitCast:
// Check to see if we are casting a pointer to an aggregate to a pointer to
// the first element. If so, return the appropriate GEP instruction.