forked from OSchip/llvm-project
[X86] When lowering uniform shifts, use X86ISD::VZEXT instead of using a ZERO_EXTEND_VECTOR_INREG. If we emit the ZERO_EXTEND_VECTOR_INREG too late it doesn't get lowered properly and makes it through to isel and fails.
Fixes PR31593. llvm-svn: 291535
This commit is contained in:
parent
d915d6ba57
commit
2ed461e5c4
|
@ -18418,13 +18418,13 @@ static SDValue getTargetVShiftNode(unsigned Opc, const SDLoc &dl, MVT VT,
|
||||||
ShAmt = DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(ShAmt), MVT::v2i64, ShAmt);
|
ShAmt = DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(ShAmt), MVT::v2i64, ShAmt);
|
||||||
else if (Subtarget.hasSSE41() && ShAmt.getOpcode() == ISD::ZERO_EXTEND &&
|
else if (Subtarget.hasSSE41() && ShAmt.getOpcode() == ISD::ZERO_EXTEND &&
|
||||||
ShAmt.getOperand(0).getSimpleValueType() == MVT::i16) {
|
ShAmt.getOperand(0).getSimpleValueType() == MVT::i16) {
|
||||||
SDValue Op0 = ShAmt.getOperand(0);
|
ShAmt = ShAmt.getOperand(0);
|
||||||
Op0 = DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(Op0), MVT::v8i16, Op0);
|
ShAmt = DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(ShAmt), MVT::v8i16, ShAmt);
|
||||||
ShAmt = DAG.getZeroExtendVectorInReg(Op0, SDLoc(Op0), MVT::v2i64);
|
ShAmt = DAG.getNode(X86ISD::VZEXT, SDLoc(ShAmt), MVT::v2i64, ShAmt);
|
||||||
} else if (Subtarget.hasSSE41() &&
|
} else if (Subtarget.hasSSE41() &&
|
||||||
ShAmt.getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
|
ShAmt.getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
|
||||||
ShAmt = DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(ShAmt), MVT::v4i32, ShAmt);
|
ShAmt = DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(ShAmt), MVT::v4i32, ShAmt);
|
||||||
ShAmt = DAG.getZeroExtendVectorInReg(ShAmt, SDLoc(ShAmt), MVT::v2i64);
|
ShAmt = DAG.getNode(X86ISD::VZEXT, SDLoc(ShAmt), MVT::v2i64, ShAmt);
|
||||||
} else {
|
} else {
|
||||||
SmallVector<SDValue, 4> ShOps = {ShAmt, DAG.getConstant(0, dl, SVT),
|
SmallVector<SDValue, 4> ShOps = {ShAmt, DAG.getConstant(0, dl, SVT),
|
||||||
DAG.getUNDEF(SVT), DAG.getUNDEF(SVT)};
|
DAG.getUNDEF(SVT), DAG.getUNDEF(SVT)};
|
||||||
|
|
Loading…
Reference in New Issue