diff options
| author | Craig Topper <craig.topper@intel.com> | 2017-09-27 06:04:55 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@intel.com> | 2017-09-27 06:04:55 +0000 |
| commit | 177a3923ce5a44531c861b1dd3b1ab23edd3c473 (patch) | |
| tree | a56ad2dca7fe003f1b6869ec787d271e8f3c989b /llvm/lib/Target | |
| parent | 97f34e887fe295834754f9b0a29e3b28b67c8da9 (diff) | |
| download | bcm5719-llvm-177a3923ce5a44531c861b1dd3b1ab23edd3c473.tar.gz bcm5719-llvm-177a3923ce5a44531c861b1dd3b1ab23edd3c473.zip | |
[X86] Use extract128BitVector in LowerMULH so we can extract from constant build vectors.
llvm-svn: 314274
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 23c0ce32432..5c9534c6fd2 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -21634,14 +21634,15 @@ static SDValue LowerMULH(SDValue Op, const X86Subtarget &Subtarget, // AVX2 implementations - extend xmm subvectors to ymm. if (Subtarget.hasInt256()) { + unsigned NumElems = VT.getVectorNumElements(); SDValue Lo = DAG.getIntPtrConstant(0, dl); - SDValue Hi = DAG.getIntPtrConstant(VT.getVectorNumElements() / 2, dl); + SDValue Hi = DAG.getIntPtrConstant(NumElems / 2, dl); if (VT == MVT::v32i8) { - SDValue ALo = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, MVT::v16i8, A, Lo); - SDValue BLo = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, MVT::v16i8, B, Lo); - SDValue AHi = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, MVT::v16i8, A, Hi); - SDValue BHi = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, MVT::v16i8, B, Hi); + SDValue ALo = extract128BitVector(A, 0, DAG, dl); + SDValue BLo = extract128BitVector(B, 0, DAG, dl); + SDValue AHi = extract128BitVector(A, NumElems / 2, DAG, dl); + SDValue BHi = extract128BitVector(B, NumElems / 2, DAG, dl); ALo = DAG.getNode(ExSSE41, dl, MVT::v16i16, ALo); BLo = DAG.getNode(ExSSE41, dl, MVT::v16i16, BLo); AHi = DAG.getNode(ExSSE41, dl, MVT::v16i16, AHi); |

