[llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
Chris Lattner
clattner at apple.com
Sat Mar 24 15:49:22 PDT 2007
On Mar 22, 2007, at 1:57 PM, Reid Spencer wrote:
> @@ -7008,10 +7008,8 @@
> case Instruction::ZExt: {
> // We need to emit an AND to clear the high bits.
> assert(SrcBitSize < DestBitSize && "Not a zext?");
> - Constant *C =
> - ConstantInt::get(Type::Int64Ty, (1ULL << SrcBitSize)-1);
> - if (DestBitSize < 64)
> - C = ConstantExpr::getTrunc(C, DestTy);
> + Constant *C = ConstantInt::get(APInt::getAllOnesValue
> (SrcBitSize));
> + C = ConstantExpr::getZExt(C, DestTy);
This should be done with APInt's, not with ConstantExpr.
> return BinaryOperator::createAnd(Res, C);
> }
> case Instruction::SExt:
> @@ -7190,7 +7190,8 @@
> unsigned ShAmt = ShAmtV->getZExtValue();
>
> // Get a mask for the bits shifting in.
> - uint64_t Mask = (~0ULL >> (64-ShAmt)) << DestBitWidth;
> + APInt Mask(APInt::getAllOnesValue(SrcBitWidth).lshr(
> + SrcBitWidth-ShAmt).shl(DestBitWidth));
Please use the new methods.
> Value* SrcIOp0 = SrcI->getOperand(0);
> if (SrcI->hasOneUse() && MaskedValueIsZero(SrcIOp0, Mask)) {
> if (ShAmt >= DestBitWidth) // All zeros.
> @@ -7249,8 +7250,8 @@
> // If we're actually extending zero bits and the trunc is a
> no-op
> if (MidSize < DstSize && SrcSize == DstSize) {
> // Replace both of the casts with an And of the type mask.
> - uint64_t AndValue = cast<IntegerType>(CSrc->getType())-
> >getBitMask();
> - Constant *AndConst = ConstantInt::get(A->getType(),
> AndValue);
> + APInt AndValue(APInt::getAllOnesValue(MidSize).zext
> (SrcSize));
> + Constant *AndConst = ConstantInt::get(AndValue);
Likewise
-Chris
More information about the llvm-commits
mailing list