[llvm] r356549 - [X86] Use getConstantOperandAPInt to detect out-of-range shifts.
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 20 04:41:53 PDT 2019
Author: rksimon
Date: Wed Mar 20 04:41:52 2019
New Revision: 356549
URL: http://llvm.org/viewvc/llvm-project?rev=356549&view=rev
Log:
[X86] Use getConstantOperandAPInt to detect out-of-range shifts.
Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=356549&r1=356548&r2=356549&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Mar 20 04:41:52 2019
@@ -41161,11 +41161,12 @@ static SDValue combineCMP(SDNode *N, Sel
onlyZeroFlagUsed(SDValue(N, 0))) {
EVT VT = Op.getValueType();
unsigned BitWidth = VT.getSizeInBits();
- unsigned ShAmt = Op.getConstantOperandVal(1);
- if (ShAmt < BitWidth) { // Avoid undefined shifts.
+ const APInt &ShAmt = Op.getConstantOperandAPInt(1);
+ if (ShAmt.ult(BitWidth)) { // Avoid undefined shifts.
+ unsigned MaskBits = BitWidth - ShAmt.getZExtValue();
APInt Mask = Op.getOpcode() == ISD::SRL
- ? APInt::getHighBitsSet(BitWidth, BitWidth - ShAmt)
- : APInt::getLowBitsSet(BitWidth, BitWidth - ShAmt);
+ ? APInt::getHighBitsSet(BitWidth, MaskBits)
+ : APInt::getLowBitsSet(BitWidth, MaskBits);
if (Mask.isSignedIntN(32)) {
Op = DAG.getNode(ISD::AND, dl, VT, Op.getOperand(0),
DAG.getConstant(Mask, dl, VT));
@@ -41175,7 +41176,6 @@ static SDValue combineCMP(SDNode *N, Sel
}
}
-
// Look for a truncate with a single use.
if (Op.getOpcode() != ISD::TRUNCATE || !Op.hasOneUse())
return SDValue();
More information about the llvm-commits
mailing list