diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-03-24 14:37:01 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-03-24 14:37:01 +0100 |
commit | 56010684160c394a1824909e2ac450a6da41db40 (patch) | |
tree | 4f150d6022b345e7d0b758e9b6825c37e49d8a22 /gcc | |
parent | f0d7b52d4f84999ebef4888bced90a737fba7dfe (diff) | |
download | gcc-56010684160c394a1824909e2ac450a6da41db40.zip gcc-56010684160c394a1824909e2ac450a6da41db40.tar.gz gcc-56010684160c394a1824909e2ac450a6da41db40.tar.bz2 |
re PR rtl-optimization/80112 (ICE in doloop_condition_get at loop-doloop.c:158)
PR rtl-optimization/80112
* loop-doloop.c (doloop_condition_get): Don't check condition
if cmp isn't SET with IF_THEN_ELSE src.
* gcc.dg/pr80112.c: New test.
From-SVN: r246441
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/loop-doloop.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr80112.c | 21 |
4 files changed, 39 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8d4adfb..12525c6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-03-24 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/80112 + * loop-doloop.c (doloop_condition_get): Don't check condition + if cmp isn't SET with IF_THEN_ELSE src. + 2017-03-24 Bill Schmidt <wschmidt@linux.vnet.ibm.com> PR tree-optimization/80158 diff --git a/gcc/loop-doloop.c b/gcc/loop-doloop.c index 3b9a9603..3483000 100644 --- a/gcc/loop-doloop.c +++ b/gcc/loop-doloop.c @@ -153,10 +153,13 @@ doloop_condition_get (rtx_insn *doloop_pat) } else inc = PATTERN (prev_insn); - /* We expect the condition to be of the form (reg != 0) */ - cond = XEXP (SET_SRC (cmp), 0); - if (GET_CODE (cond) != NE || XEXP (cond, 1) != const0_rtx) - return 0; + if (GET_CODE (cmp) == SET && GET_CODE (SET_SRC (cmp)) == IF_THEN_ELSE) + { + /* We expect the condition to be of the form (reg != 0) */ + cond = XEXP (SET_SRC (cmp), 0); + if (GET_CODE (cond) != NE || XEXP (cond, 1) != const0_rtx) + return 0; + } } else { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5ab5619..a53ffef 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-03-24 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/80112 + * gcc.dg/pr80112.c: New test. + 2017-03-24 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> * c-c++-common/Wimplicit-fallthrough-7.c: Adjust dg-warning diff --git a/gcc/testsuite/gcc.dg/pr80112.c b/gcc/testsuite/gcc.dg/pr80112.c new file mode 100644 index 0000000..7c78aae --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr80112.c @@ -0,0 +1,21 @@ +/* PR rtl-optimization/80112 */ +/* { dg-do compile } */ +/* { dg-options "-Os -fmodulo-sched" } */ + +void **a; + +void +foo (int c) +{ + void *d[] = {&&e, &&f}; + a = d; + switch (c) + { + f: + c = 9; + /* FALLTHRU */ + case 9: + goto *a++; + e:; + } +} |