diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-11-20 12:17:50 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-11-20 12:17:50 +0000 |
| commit | ed7e2fda181d31495c49b6b87ef4e3103f511e41 (patch) | |
| tree | 48179f1260e619e46bc0533f703993fa41495124 /llvm/lib | |
| parent | b356d0463e77cdb48b78d2cd840e80d88649561e (diff) | |
| download | bcm5719-llvm-ed7e2fda181d31495c49b6b87ef4e3103f511e41.tar.gz bcm5719-llvm-ed7e2fda181d31495c49b6b87ef4e3103f511e41.zip | |
[X86][SSE] XFormVExtractWithShuffleIntoLoad - getVectorShuffle won't accept SM_SentinelZero
Noticed while working on improving demanded elts target shuffle shuffle combining
llvm-svn: 347302
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 07db9d7f13f..e72cc5e87be 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -32459,9 +32459,13 @@ static SDValue XFormVExtractWithShuffleIntoLoad(SDNode *N, SelectionDAG &DAG, if (Idx == SM_SentinelUndef) return DAG.getUNDEF(EltVT); + // Bail if any mask element is SM_SentinelZero - getVectorShuffle below + // won't handle it. + if (llvm::any_of(ShuffleMask, [](int M) { return M == SM_SentinelZero; })) + return SDValue(); + assert(0 <= Idx && Idx < (int)(2 * NumElems) && "Shuffle index out of range"); - SDValue LdNode = (Idx < (int)NumElems) ? ShuffleOps[0] - : ShuffleOps[1]; + SDValue LdNode = (Idx < (int)NumElems) ? ShuffleOps[0] : ShuffleOps[1]; // If inputs to shuffle are the same for both ops, then allow 2 uses unsigned AllowedUses = |

