diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2011-08-27 09:46:35 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2011-08-27 09:46:35 +0200 |
commit | b807694e275968b94ea4363e032c057ada5a5da9 (patch) | |
tree | f6656367ee1855e60e7a17ba09508d0b83f7f538 | |
parent | 851018fb85a10f07e303c58c0e858f507e0de3e0 (diff) | |
download | gcc-b807694e275968b94ea4363e032c057ada5a5da9.zip gcc-b807694e275968b94ea4363e032c057ada5a5da9.tar.gz gcc-b807694e275968b94ea4363e032c057ada5a5da9.tar.bz2 |
re PR target/50202 (ICE: in final_scan_insn, at final.c:2709 (could not split insn) with __builtin_ia32_pcmpistri128)
PR target/50202
* config/i386/sse.md (sse4_2_pcmpestr): Emit NOTE_INSN_DELETED note
when all outputs are unused.
(sse4_2_pcmpestr): Ditto.
testsuite/ChangeLog:
PR target/50202
* gcc.target/i386/pr50202.c: New test.
From-SVN: r178130
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/sse.md | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr50202.c | 15 |
4 files changed, 33 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 14aaee7..659bb0e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2011-08-27 Uros Bizjak <ubizjak@gmail.com> + + PR target/50202 + * config/i386/sse.md (sse4_2_pcmpestr): Emit NOTE_INSN_DELETED note + when all outputs are unused. + (sse4_2_pcmpestr): Ditto. + 2011-08-26 Uros Bizjak <ubizjak@gmail.com> * config/i386/i386.md (round<mode>2): New expander. diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index e1c70eb..0c7daf2 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -9734,6 +9734,9 @@ operands[2], operands[3], operands[4], operands[5], operands[6])); + if (!(flags || ecx || xmm0)) + emit_note (NOTE_INSN_DELETED); + DONE; } [(set_attr "type" "sselog") @@ -9861,6 +9864,9 @@ emit_insn (gen_sse4_2_pcmpistr_cconly (NULL, NULL, operands[2], operands[3], operands[4])); + if (!(flags || ecx || xmm0)) + emit_note (NOTE_INSN_DELETED); + DONE; } [(set_attr "type" "sselog") diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8974d2e..3481657 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-08-27 Uros Bizjak <ubizjak@gmail.com> + + PR target/50202 + * gcc.target/i386/pr50202.c: New test. + 2011-08-26 Uros Bizjak <ubizjak@gmail.com> * gcc.target/i386/sse_4_1-round-vec.c: New test. diff --git a/gcc/testsuite/gcc.target/i386/pr50202.c b/gcc/testsuite/gcc.target/i386/pr50202.c new file mode 100644 index 0000000..2023ec8 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr50202.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fno-tree-dse -fno-dce -msse4" } */ +/* { dg-require-effective-target sse4 } */ + +typedef char __v16qi __attribute__ ((__vector_size__ (16))); + +__v16qi v; +int i; + +void +foo (void) +{ + i = __builtin_ia32_pcmpistri128 (v, v, 255); + i = 255; +} |