diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2014-06-27 18:25:23 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2014-06-27 18:25:23 +0000 |
commit | dd6470a9dd13645b30a1321bc2cb407a9abff549 (patch) | |
tree | a7a7574eaf1fca984da1cc712e6e8f8a639d9aad /llvm/lib | |
parent | 3f69076278421d731a80804a743f89c72384b379 (diff) | |
download | bcm5719-llvm-dd6470a9dd13645b30a1321bc2cb407a9abff549.tar.gz bcm5719-llvm-dd6470a9dd13645b30a1321bc2cb407a9abff549.zip |
[x86] Fix a miscompile in the new shuffle lowering uncovered by
a bootstrap.
I managed to mis-remember how PACKUS worked on x86, and was using undef
for the high bytes instead of zero. The fix is fairly obvious.
llvm-svn: 211922
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index c50f44daaee..fa80717f994 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -7712,19 +7712,19 @@ static SDValue lowerV16I8VectorShuffle(SDValue Op, SDValue V1, SDValue V2, return DAG.getNode(X86ISD::UNPCKL, DL, MVT::v16i8, Evens, Odds); } - - SDValue LoV1 = DAG.getNode(ISD::BITCAST, DL, MVT::v8i16, - DAG.getNode(X86ISD::UNPCKL, DL, MVT::v16i8, V1, - DAG.getUNDEF(MVT::v8i16))); - SDValue HiV1 = DAG.getNode(ISD::BITCAST, DL, MVT::v8i16, - DAG.getNode(X86ISD::UNPCKH, DL, MVT::v16i8, V1, - DAG.getUNDEF(MVT::v8i16))); - SDValue LoV2 = DAG.getNode(ISD::BITCAST, DL, MVT::v8i16, - DAG.getNode(X86ISD::UNPCKL, DL, MVT::v16i8, V2, - DAG.getUNDEF(MVT::v8i16))); - SDValue HiV2 = DAG.getNode(ISD::BITCAST, DL, MVT::v8i16, - DAG.getNode(X86ISD::UNPCKH, DL, MVT::v16i8, V2, - DAG.getUNDEF(MVT::v8i16))); + SDValue Zero = getZeroVector(MVT::v8i16, Subtarget, DAG, DL); + SDValue LoV1 = + DAG.getNode(ISD::BITCAST, DL, MVT::v8i16, + DAG.getNode(X86ISD::UNPCKL, DL, MVT::v16i8, V1, Zero)); + SDValue HiV1 = + DAG.getNode(ISD::BITCAST, DL, MVT::v8i16, + DAG.getNode(X86ISD::UNPCKH, DL, MVT::v16i8, V1, Zero)); + SDValue LoV2 = + DAG.getNode(ISD::BITCAST, DL, MVT::v8i16, + DAG.getNode(X86ISD::UNPCKL, DL, MVT::v16i8, V2, Zero)); + SDValue HiV2 = + DAG.getNode(ISD::BITCAST, DL, MVT::v8i16, + DAG.getNode(X86ISD::UNPCKH, DL, MVT::v16i8, V2, Zero)); int V1LoBlendMask[8] = {-1, -1, -1, -1, -1, -1, -1, -1}; int V1HiBlendMask[8] = {-1, -1, -1, -1, -1, -1, -1, -1}; |