mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-15 14:28:25 +00:00
avoid constructing out of range shift amounts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22230 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
41aaf7016e
commit
d7e31cfaae
@ -2511,8 +2511,10 @@ Instruction *InstCombiner::visitSetCondInst(SetCondInst &I) {
|
||||
if (!CanFold) {
|
||||
// To test for the bad case of the signed shr, see if any
|
||||
// of the bits shifted in could be tested after the mask.
|
||||
Constant *OShAmt = ConstantUInt::get(Type::UByteTy,
|
||||
Ty->getPrimitiveSizeInBits()-ShAmt->getValue());
|
||||
int ShAmtVal = Ty->getPrimitiveSizeInBits()-ShAmt->getValue();
|
||||
if (ShAmtVal < 0) ShAmtVal = 0; // Out of range shift.
|
||||
|
||||
Constant *OShAmt = ConstantUInt::get(Type::UByteTy, ShAmtVal);
|
||||
Constant *ShVal =
|
||||
ConstantExpr::getShl(ConstantInt::getAllOnesValue(Ty), OShAmt);
|
||||
if (ConstantExpr::getAnd(ShVal, AndCST)->isNullValue())
|
||||
|
Loading…
x
Reference in New Issue
Block a user