diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 3dca306a7642c..ea876307f2aef 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -29374,10 +29374,8 @@ static SDValue LowerShift(SDValue Op, const X86Subtarget &Subtarget, // +ve/-ve Amt = shift left/right. if (Subtarget.hasXOP() && (VT == MVT::v2i64 || VT == MVT::v4i32 || VT == MVT::v8i16 || VT == MVT::v16i8)) { - if (Opc == ISD::SRL || Opc == ISD::SRA) { - SDValue Zero = DAG.getConstant(0, dl, VT); - Amt = DAG.getNode(ISD::SUB, dl, VT, Zero, Amt); - } + if (Opc == ISD::SRL || Opc == ISD::SRA) + Amt = DAG.getNegative(Amt, dl, VT); if (Opc == ISD::SHL || Opc == ISD::SRL) return DAG.getNode(X86ISD::VPSHL, dl, VT, R, Amt); if (Opc == ISD::SRA)