diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2019-04-24 14:05:08 +0000 |
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2019-04-24 14:05:08 +0000 |
| commit | b1b336890761f1129ba91ee6c63f7fd5c42ea0d3 (patch) | |
| tree | 4c41438cb1f2649b4740f3f915b72706443ea998 /llvm/lib | |
| parent | 513d3658e708e38d2d4612fe59c7a3c3f64e8a5d (diff) | |
| download | bcm5719-llvm-b1b336890761f1129ba91ee6c63f7fd5c42ea0d3.tar.gz bcm5719-llvm-b1b336890761f1129ba91ee6c63f7fd5c42ea0d3.zip | |
[x86] make sure horizontal op and broadcast types match to simplify (PR41414)
If the types don't match, we can't just remove the shuffle.
There may be some other opportunity for optimization here,
but this should prevent the crashing seen in:
https://bugs.llvm.org/show_bug.cgi?id=41414
llvm-svn: 359095
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index d1e0f690913..f7c91ba0e65 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -32820,10 +32820,13 @@ static SDValue foldShuffleOfHorizOp(SDNode *N) { // For a broadcast, peek through an extract element of index 0 to find the // horizontal op: broadcast (ext_vec_elt HOp, 0) + EVT VT = N->getValueType(0); if (Opcode == X86ISD::VBROADCAST) { SDValue SrcOp = N->getOperand(0); if (SrcOp.getOpcode() == ISD::EXTRACT_VECTOR_ELT && - SrcOp.getValueType() == MVT::f64 && isNullConstant(SrcOp.getOperand(1))) + SrcOp.getValueType() == MVT::f64 && + SrcOp.getOperand(0).getValueType() == VT && + isNullConstant(SrcOp.getOperand(1))) N = SrcOp.getNode(); } @@ -32847,7 +32850,8 @@ static SDValue foldShuffleOfHorizOp(SDNode *N) { // movddup (hadd X, X) --> hadd X, X // broadcast (extract_vec_elt (hadd X, X), 0) --> hadd X, X assert((HOp.getValueType() == MVT::v2f64 || - HOp.getValueType() == MVT::v4f64) && "Unexpected type for h-op"); + HOp.getValueType() == MVT::v4f64) && HOp.getValueType() == VT && + "Unexpected type for h-op"); return HOp; } |

