diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-01-01 00:51:50 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-01-01 00:51:50 +0100 |
commit | f1e0620c75721bdec94af311943025ee8474a57e (patch) | |
tree | fbb674f6e693c4b20bd4f7663502633d94a3c156 /gcc | |
parent | 2f883d1c18b671db5458250ab381ab091579d6d0 (diff) | |
download | gcc-f1e0620c75721bdec94af311943025ee8474a57e.zip gcc-f1e0620c75721bdec94af311943025ee8474a57e.tar.gz gcc-f1e0620c75721bdec94af311943025ee8474a57e.tar.bz2 |
re PR target/69015 (ICE: RTL check: expected code 'code_label', have 'return' in find_cond_trap, at ifcvt.c:3715 with -fno-if-conversion and __builtin_trap())
PR target/69015
* ifcvt.c (find_cond_trap): Give up if returnjump_p (jump).
* gcc.dg/pr69015.c: New test.
From-SVN: r232020
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/ifcvt.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr69015.c | 10 |
4 files changed, 23 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 941f981..32d3ecf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2016-01-01 Jakub Jelinek <jakub@redhat.com> + + PR target/69015 + * ifcvt.c (find_cond_trap): Give up if returnjump_p (jump). Copyright (C) 2016 Free Software Foundation, Inc. diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c index 6164232..1112ad0 100644 --- a/gcc/ifcvt.c +++ b/gcc/ifcvt.c @@ -4526,8 +4526,11 @@ find_cond_trap (basic_block test_bb, edge then_edge, edge else_edge) return FALSE; /* If the conditional jump is more than just a conditional jump, then - we can not do if-conversion on this block. */ - if (! onlyjump_p (jump)) + we can not do if-conversion on this block. Give up for returnjump_p, + changing a conditional return followed by unconditional trap for + conditional trap followed by unconditional return is likely not + beneficial and harder to handle. */ + if (! onlyjump_p (jump) || returnjump_p (jump)) return FALSE; /* We must be comparing objects whose modes imply the size. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 941f981..178c13e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-01-01 Jakub Jelinek <jakub@redhat.com> + + PR target/69015 + * gcc.dg/pr69015.c: New test. Copyright (C) 2016 Free Software Foundation, Inc. diff --git a/gcc/testsuite/gcc.dg/pr69015.c b/gcc/testsuite/gcc.dg/pr69015.c new file mode 100644 index 0000000..9e75db9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr69015.c @@ -0,0 +1,10 @@ +/* PR target/69015 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-if-conversion" } */ + +void +foo (int c) +{ + if (c) + __builtin_trap (); +} |