[BasicAA] Bail out earlier for invalid shift amount
Currently, we'd produce an incorrect decomposition, because we already recursively called GetLinearExpression(), so the Scale=1, Offset=0 will not necessarily be relative to the shl itself. Now, this doesn't actually matter for functional correctness, because such a shift is poison anyway, so its okay to return an incorrect decomposition. It's still unnecessarily confusing though, and we can easily avoid this by checking the bitwidth earlier.
This commit is contained in:
parent
5a5a8088cc
commit
ad9dad93ff
@ -297,9 +297,6 @@ static bool isObjectSize(const Value *V, uint64_t Size, const DataLayout &DL,
|
||||
Scale *= RHS;
|
||||
break;
|
||||
case Instruction::Shl:
|
||||
V = GetLinearExpression(BOp->getOperand(0), Scale, Offset, ZExtBits,
|
||||
SExtBits, DL, Depth + 1, AC, DT, NSW, NUW);
|
||||
|
||||
// We're trying to linearize an expression of the kind:
|
||||
// shl i8 -128, 36
|
||||
// where the shift count exceeds the bitwidth of the type.
|
||||
@ -312,6 +309,8 @@ static bool isObjectSize(const Value *V, uint64_t Size, const DataLayout &DL,
|
||||
return V;
|
||||
}
|
||||
|
||||
V = GetLinearExpression(BOp->getOperand(0), Scale, Offset, ZExtBits,
|
||||
SExtBits, DL, Depth + 1, AC, DT, NSW, NUW);
|
||||
Offset <<= RHS.getLimitedValue();
|
||||
Scale <<= RHS.getLimitedValue();
|
||||
break;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user