parent
4e76c3a482
commit
0a28e90f2c
|
|
@ -5647,12 +5647,12 @@ Instruction *InstCombiner::FoldShiftByConstant(Value *Op0, ConstantInt *Op1,
|
||||||
if (ShiftAmt1 == ShiftAmt2) {
|
if (ShiftAmt1 == ShiftAmt2) {
|
||||||
// If we have ((X >>? C) << C), turn this into X & (-1 << C).
|
// If we have ((X >>? C) << C), turn this into X & (-1 << C).
|
||||||
if (I.getOpcode() == Instruction::Shl) {
|
if (I.getOpcode() == Instruction::Shl) {
|
||||||
uint64_t Mask = -1ULL << ShiftAmt1;
|
uint64_t Mask = Ty->getBitMask() << ShiftAmt1;
|
||||||
return BinaryOperator::createAnd(X, ConstantInt::get(Ty, Mask));
|
return BinaryOperator::createAnd(X, ConstantInt::get(Ty, Mask));
|
||||||
}
|
}
|
||||||
// If we have ((X << C) >>u C), turn this into X & (-1 >>u C).
|
// If we have ((X << C) >>u C), turn this into X & (-1 >>u C).
|
||||||
if (I.getOpcode() == Instruction::LShr) {
|
if (I.getOpcode() == Instruction::LShr) {
|
||||||
uint64_t Mask = -1ULL >> ShiftAmt1;
|
uint64_t Mask = Ty->getBitMask() >> ShiftAmt1;
|
||||||
return BinaryOperator::createAnd(X, ConstantInt::get(Ty, Mask));
|
return BinaryOperator::createAnd(X, ConstantInt::get(Ty, Mask));
|
||||||
}
|
}
|
||||||
// We can simplify ((X << C) >>s C) into a trunc + sext.
|
// We can simplify ((X << C) >>s C) into a trunc + sext.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue