Changes in directory llvm/lib/Transforms/Scalar:
InstructionCombining.cpp updated: 1.433 -> 1.434 --- Log message: If any of the sign extended bits are demanded, the input sign bit is demanded for a sign extension. This fixes InstCombine/2006-02-13-DemandedMiscompile.ll and Ptrdist/bc. --- Diffs of the changes: (+9 -3) InstructionCombining.cpp | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.433 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.434 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.433 Mon Feb 13 00:09:08 2006 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Mon Feb 13 16:41:07 2006 @@ -889,15 +889,21 @@ KnownZero |= NewBits; } else { // Sign extension. - if (SimplifyDemandedBits(I->getOperand(0), - DemandedMask & SrcTy->getIntegralTypeMask(), + uint64_t InSignBit = 1ULL << (SrcTy->getPrimitiveSizeInBits()-1); + int64_t InputDemandedBits = DemandedMask & SrcTy->getIntegralTypeMask(); + + // If any of the sign extended bits are demanded, we know that the sign + // bit is demanded. + if (NewBits & DemandedMask) + InputDemandedBits |= InSignBit; + + if (SimplifyDemandedBits(I->getOperand(0), InputDemandedBits, KnownZero, KnownOne, Depth+1)) return true; assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); // If the sign bit of the input is known set or clear, then we know the // top bits of the result. - uint64_t InSignBit = 1ULL << (SrcTy->getPrimitiveSizeInBits()-1); // If the input sign bit is known zero, or if the NewBits are not demanded // convert this into a zero extension. _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits