[llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
Zhou Sheng
zhousheng00 at gmail.com
Sat Mar 24 08:34:54 PDT 2007
Changes in directory llvm/lib/Transforms/Scalar:
InstructionCombining.cpp updated: 1.682 -> 1.683
---
Log message:
Make some codes more efficient.
---
Diffs of the changes: (+17 -15)
InstructionCombining.cpp | 32 +++++++++++++++++---------------
1 files changed, 17 insertions(+), 15 deletions(-)
Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.682 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.683
--- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.682 Fri Mar 23 19:42:08 2007
+++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Sat Mar 24 10:34:37 2007
@@ -3117,7 +3117,9 @@
case Instruction::And:
if (ConstantExpr::getAnd(N, Mask) == Mask) {
// If the AndRHS is a power of two minus one (0+1+), this is simple.
- if ((Mask->getValue() & Mask->getValue()+1) == 0)
+ if ((Mask->getValue().countLeadingZeros() +
+ Mask->getValue().countPopulation()) ==
+ Mask->getValue().getBitWidth())
break;
// Otherwise, if Mask is 0+1+0+, and if B is known to have the low 0+
@@ -3127,7 +3129,7 @@
if (isRunOfOnes(Mask, MB, ME)) { // begin/end bit of run, inclusive
uint32_t BitWidth = cast<IntegerType>(RHS->getType())->getBitWidth();
APInt Mask(APInt::getAllOnesValue(BitWidth));
- Mask = APIntOps::lshr(Mask, BitWidth-MB+1);
+ Mask = Mask.lshr(BitWidth-MB+1);
if (MaskedValueIsZero(RHS, Mask))
break;
}
@@ -3136,8 +3138,9 @@
case Instruction::Or:
case Instruction::Xor:
// If the AndRHS is a power of two minus one (0+1+), and N&Mask == 0
- if ((Mask->getValue() & Mask->getValue()+1) == 0 &&
- ConstantExpr::getAnd(N, Mask)->isNullValue())
+ if ((Mask->getValue().countLeadingZeros() +
+ Mask->getValue().countPopulation()) == Mask->getValue().getBitWidth()
+ && ConstantExpr::getAnd(N, Mask)->isNullValue())
break;
return 0;
}
@@ -5731,8 +5734,8 @@
// operation.
//
if (isValid && !isLeftShift && I.getOpcode() == Instruction::AShr) {
- APInt Val(Op0C->getValue());
- isValid = ((Val & APInt::getSignBit(TypeBits)) != 0) == highBitSet;
+ isValid = ((Op0C->getValue() & APInt::getSignBit(TypeBits)) != 0) ==
+ highBitSet;
}
if (isValid) {
@@ -5757,7 +5760,7 @@
if (ShiftOp && isa<ConstantInt>(ShiftOp->getOperand(1))) {
ConstantInt *ShiftAmt1C = cast<ConstantInt>(ShiftOp->getOperand(1));
- // shift amount always <= 32 bits
+ // These shift amounts are always <= 32 bits.
unsigned ShiftAmt1 = (unsigned)ShiftAmt1C->getZExtValue();
unsigned ShiftAmt2 = (unsigned)Op1->getZExtValue();
assert(ShiftAmt2 != 0 && "Should have been simplified earlier");
@@ -5785,7 +5788,7 @@
BinaryOperator::createAShr(X, ConstantInt::get(Ty, AmtSum));
InsertNewInstBefore(Shift, I);
- APInt Mask(APInt::getAllOnesValue(TypeBits).lshr(ShiftAmt2));
+ APInt Mask(Ty->getMask().lshr(ShiftAmt2));
return BinaryOperator::createAnd(Shift, ConstantInt::get(Mask));
}
@@ -5794,12 +5797,12 @@
if (ShiftAmt1 == ShiftAmt2) {
// If we have ((X >>? C) << C), turn this into X & (-1 << C).
if (I.getOpcode() == Instruction::Shl) {
- APInt Mask(APInt::getAllOnesValue(TypeBits).shl(ShiftAmt1));
+ APInt Mask(Ty->getMask().shl(ShiftAmt1));
return BinaryOperator::createAnd(X, ConstantInt::get(Mask));
}
// If we have ((X << C) >>u C), turn this into X & (-1 >>u C).
if (I.getOpcode() == Instruction::LShr) {
- APInt Mask(APInt::getAllOnesValue(TypeBits).lshr(ShiftAmt1));
+ APInt Mask(Ty->getMask().lshr(ShiftAmt1));
return BinaryOperator::createAnd(X, ConstantInt::get(Mask));
}
// We can simplify ((X << C) >>s C) into a trunc + sext.
@@ -5813,7 +5816,6 @@
case 16 : SExtType = Type::Int16Ty; break;
case 32 : SExtType = Type::Int32Ty; break;
case 64 : SExtType = Type::Int64Ty; break;
- case 128: SExtType = IntegerType::get(128); break;
default: break;
}
if (SExtType) {
@@ -5833,7 +5835,7 @@
BinaryOperator::createShl(X, ConstantInt::get(Ty, ShiftDiff));
InsertNewInstBefore(Shift, I);
- APInt Mask(APInt::getAllOnesValue(TypeBits).shl(ShiftAmt2));
+ APInt Mask(Ty->getMask().shl(ShiftAmt2));
return BinaryOperator::createAnd(Shift, ConstantInt::get(Mask));
}
@@ -5844,7 +5846,7 @@
BinaryOperator::createLShr(X, ConstantInt::get(Ty, ShiftDiff));
InsertNewInstBefore(Shift, I);
- APInt Mask(APInt::getAllOnesValue(TypeBits).lshr(ShiftAmt2));
+ APInt Mask(Ty->getMask().lshr(ShiftAmt2));
return BinaryOperator::createAnd(Shift, ConstantInt::get(Mask));
}
@@ -5862,7 +5864,7 @@
ConstantInt::get(Ty, ShiftDiff));
InsertNewInstBefore(Shift, I);
- APInt Mask(APInt::getAllOnesValue(TypeBits).shl(ShiftAmt2));
+ APInt Mask(Ty->getMask().shl(ShiftAmt2));
return BinaryOperator::createAnd(Shift, ConstantInt::get(Mask));
}
@@ -5873,7 +5875,7 @@
BinaryOperator::createShl(X, ConstantInt::get(Ty, ShiftDiff));
InsertNewInstBefore(Shift, I);
- APInt Mask(APInt::getAllOnesValue(TypeBits).lshr(ShiftAmt2));
+ APInt Mask(Ty->getMask().lshr(ShiftAmt2));
return BinaryOperator::createAnd(Shift, ConstantInt::get(Mask));
}
More information about the llvm-commits
mailing list