aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-03-24 14:37:01 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2017-03-24 14:37:01 +0100
commit56010684160c394a1824909e2ac450a6da41db40 (patch)
tree4f150d6022b345e7d0b758e9b6825c37e49d8a22 /gcc
parentf0d7b52d4f84999ebef4888bced90a737fba7dfe (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/loop-doloop.c11
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr80112.c21
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:;
+ }
+}