diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2019-03-20 11:41:52 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2019-03-20 11:41:52 +0000 |
| commit | 2acca37a2dccea9e84a116c610e8f67f9abbd0a4 (patch) | |
| tree | 67ef838e636d3ebbcb743c79b8a2bf8148f0a5cf /llvm/lib | |
| parent | 4bfe83679d6f1492ca2be673e5529b377e20a9c3 (diff) | |
| download | bcm5719-llvm-2acca37a2dccea9e84a116c610e8f67f9abbd0a4.tar.gz bcm5719-llvm-2acca37a2dccea9e84a116c610e8f67f9abbd0a4.zip | |
[X86] Use getConstantOperandAPInt to detect out-of-range shifts.
llvm-svn: 356549
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index d8fe437f3d0..1185b8bdb7e 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -41161,11 +41161,12 @@ static SDValue combineCMP(SDNode *N, SelectionDAG &DAG) { 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, SelectionDAG &DAG) { } } - // Look for a truncate with a single use. if (Op.getOpcode() != ISD::TRUNCATE || !Op.hasOneUse()) return SDValue(); |

