diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2017-12-16 22:57:17 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2017-12-16 22:57:17 +0000 |
| commit | f3b6da00f587026ef7ca098329b63ec17f155c0d (patch) | |
| tree | 02655c8c8dc7e6bc607383acf5df0c6a03872748 /llvm/lib | |
| parent | 68d7f9da76e39819a377ab405b5e5cf2b5298466 (diff) | |
| download | bcm5719-llvm-f3b6da00f587026ef7ca098329b63ec17f155c0d.tar.gz bcm5719-llvm-f3b6da00f587026ef7ca098329b63ec17f155c0d.zip | |
[X86][AVX] Fix failed broadcast fold
Strip excess BITCASTs from EXTRACT_SUBVECTOR input
llvm-svn: 320930
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 3cd1704c9c6..01636128df0 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -10483,9 +10483,13 @@ static SDValue lowerVectorShuffleAsBroadcast(const SDLoc &DL, MVT VT, // We only support broadcasting from 128-bit vectors to minimize the // number of patterns we need to deal with in isel. So extract down to - // 128-bits. - if (SrcVT.getSizeInBits() > 128) - V = extract128BitVector(V, 0, DAG, DL); + // 128-bits, removing as many bitcasts as possible. + if (SrcVT.getSizeInBits() > 128) { + MVT ExtVT = MVT::getVectorVT(SrcVT.getScalarType(), + 128 / SrcVT.getScalarSizeInBits()); + V = extract128BitVector(peekThroughBitcasts(V), 0, DAG, DL); + V = DAG.getBitcast(ExtVT, V); + } return DAG.getBitcast(VT, DAG.getNode(Opcode, DL, BroadcastVT, V)); } |

