mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-15 23:31:37 +00:00
Remove dead code in instcombine.
Don't replace shifts greater than the type with the maximum shift. This isn't hit anywhere in the tests, and somewhere else is replacing these with undef. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207000 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d5a7c3f2ec
commit
e0f15f8b7a
@ -337,21 +337,12 @@ Instruction *InstCombiner::FoldShiftByConstant(Value *Op0, Constant *Op1,
|
||||
GetShiftedValue(Op0, COp1->getZExtValue(), isLeftShift, *this));
|
||||
}
|
||||
|
||||
|
||||
// See if we can simplify any instructions used by the instruction whose sole
|
||||
// purpose is to compute bits we don't care about.
|
||||
uint32_t TypeBits = Op0->getType()->getScalarSizeInBits();
|
||||
|
||||
// shl i32 X, 32 = 0 and srl i8 Y, 9 = 0, ... just don't eliminate
|
||||
// a signed shift.
|
||||
//
|
||||
if (COp1->uge(TypeBits)) {
|
||||
if (I.getOpcode() != Instruction::AShr)
|
||||
return ReplaceInstUsesWith(I, Constant::getNullValue(Op0->getType()));
|
||||
// ashr i32 X, 32 --> ashr i32 X, 31
|
||||
I.setOperand(1, ConstantInt::get(I.getType(), TypeBits-1));
|
||||
return &I;
|
||||
}
|
||||
assert(!COp1->uge(TypeBits) &&
|
||||
"Shift over the type width should have been removed already");
|
||||
|
||||
// ((X*C1) << C2) == (X * (C1 << C2))
|
||||
if (BinaryOperator *BO = dyn_cast<BinaryOperator>(Op0))
|
||||
|
Loading…
x
Reference in New Issue
Block a user