[X86] Don't generate vbroadcasti128 for v4i64 splats from memory.
authorAhmed Bougacha <ahmed.bougacha@gmail.com>
Wed, 24 Jun 2015 00:07:16 +0000 (00:07 +0000)
committerAhmed Bougacha <ahmed.bougacha@gmail.com>
Wed, 24 Jun 2015 00:07:16 +0000 (00:07 +0000)
commit0810814bcc9130967db7d7dfe38a1179bf56b5e5
tree6396f04f0f510ab34b9afbc99f213af607d4aec6
parenteab3c6548c6d48d180e3fd470c0b716ecb5ad845
[X86] Don't generate vbroadcasti128 for v4i64 splats from memory.

We used to erroneously match:
    (v4i64 shuffle (v2i64 load), <0,0,0,0>)

Whereas vbroadcasti128 is more like:
    (v4i64 shuffle (v2i64 load), <0,1,0,1>)

This problem doesn't exist for vbroadcastf128, which kept matching
the intrinsic after r231182.  We should perhaps re-introduce the
intrinsic here as well, but that's a separate issue still being
discussed.

While there, add some proper vbroadcastf128 tests.  We don't currently
match those, like for loading vbroadcastsd/ss on AVX (the reg-reg
broadcasts where added in AVX2).

Fixes PR23886.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240488 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86InstrSSE.td
test/CodeGen/X86/vector-shuffle-256-v4.ll