re PR target/63594 (ICE: in ix86_vector_duplicate_value, at config/i386/i386.c:39831...
authorJakub Jelinek <jakub@redhat.com>
Wed, 22 Oct 2014 06:58:57 +0000 (08:58 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 22 Oct 2014 06:58:57 +0000 (08:58 +0200)
commit7d9f1cd276094689daa6451b7e24fe7bd683395f
tree1493e35cc3b270e4b934b928b0311cda8b335208
parent793dbadc8d9a2d95debc7fb49d544c177a316aa5
re PR target/63594 (ICE: in ix86_vector_duplicate_value, at config/i386/i386.c:39831 with -mavx512f)

PR target/63594
* config/i386/i386.c (ix86_expand_vector_init_duplicate): For
V{8HI,16QI,16HI,32QI}mode call ix86_vector_duplicate_value
even for just TARGET_AVX2, not only for
TARGET_AVX512VL && TARGET_AVX512BW.  For V{32HI,64QI}mode,
call ix86_vector_duplicate_value only if TARGET_AVX512BW,
otherwise build it using concatenation of 256-bit
broadcast.
* config/i386/sse.md (AVX_VEC_DUP_MODE): Moved after
avx512 broadcast patterns.
(vec_dup<mode>): Likewise.  For avx2 use
v<sseintprefix>broadcast<bcstscalarsuff> instead of
vbroadcast<ssescalarmodesuffix>.
(AVX2_VEC_DUP_MODE): New mode iterator.
(*vec_dup<mode>): New TARGET_AVX2 define_insn with
AVX2_VEC_DUP_MODE iterator, add a splitter for that.

* gcc.dg/pr63594-1.c: New test.
* gcc.dg/pr63594-2.c: New test.
* gcc.target/i386/sse2-pr63594-1.c: New test.
* gcc.target/i386/sse2-pr63594-2.c: New test.
* gcc.target/i386/avx-pr63594-1.c: New test.
* gcc.target/i386/avx-pr63594-2.c: New test.
* gcc.target/i386/avx2-pr63594-1.c: New test.
* gcc.target/i386/avx2-pr63594-2.c: New test.
* gcc.target/i386/avx512f-pr63594-1.c: New test.
* gcc.target/i386/avx512f-pr63594-2.c: New test.
* gcc.target/i386/avx512f-vec-init.c: Adjust expected
insn counts.

From-SVN: r216541
15 files changed:
gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/sse.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr63594-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr63594-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx-pr63594-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx-pr63594-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx2-pr63594-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx2-pr63594-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx512f-pr63594-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx512f-pr63594-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/avx512f-vec-init.c
gcc/testsuite/gcc.target/i386/sse2-pr63594-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/sse2-pr63594-2.c [new file with mode: 0644]