diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 4e93ca60be4..e15acc7d993 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -38842,13 +38842,10 @@ static SDValue foldVectorXorShiftIntoCmp(SDNode *N, SelectionDAG &DAG, return SDValue(); // The shift should be smearing the sign bit across each vector element. - auto *ShiftBV = dyn_cast<BuildVectorSDNode>(Shift.getOperand(1)); - if (!ShiftBV) - return SDValue(); - - EVT ShiftEltTy = Shift.getValueType().getVectorElementType(); - auto *ShiftAmt = ShiftBV->getConstantSplatNode(); - if (!ShiftAmt || ShiftAmt->getZExtValue() != ShiftEltTy.getSizeInBits() - 1) + auto *ShiftAmt = + isConstOrConstSplat(Shift.getOperand(1), /*AllowUndefs*/ true); + if (!ShiftAmt || + ShiftAmt->getAPIntValue() != (Shift.getScalarValueSizeInBits() - 1)) return SDValue(); // Create a greater-than comparison against -1. We don't use the more obvious |

