re PR target/61360 (ICE: in lra_update_insn_recog_data, at lra.c:1363 with -mtune...
authorVladimir Makarov <vmakarov@redhat.com>
Thu, 18 Sep 2014 15:57:06 +0000 (15:57 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Thu, 18 Sep 2014 15:57:06 +0000 (15:57 +0000)
2014-09-18  Vladimir Makarov  <vmakarov@redhat.com>

PR target/61360
* lra.c (lra): Call recog_init.

2014-09-18  Vladimir Makarov  <vmakarov@redhat.com>

PR target/61360
* gcc.target/i386/pr61360.c: New.

From-SVN: r215358

gcc/ChangeLog
gcc/lra.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr61360.c [new file with mode: 0644]

index a8dc34e04b77ed0f119cb16f580121f80b85d8b5..3c55ce466932a112fa77188e9b261aebee199b52 100644 (file)
@@ -1,3 +1,8 @@
+2014-09-18  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR target/61360
+       * lra.c (lra): Call recog_init.
+
 2014-09-18  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/62017
index be8b489fbe773fb19af45613d9623f878e99275d..acec8af93683dff57f00bc051e28ea2ea400e09e 100644 (file)
--- a/gcc/lra.c
+++ b/gcc/lra.c
@@ -2135,6 +2135,11 @@ lra (FILE *f)
 
   lra_in_progress = 1;
 
+  /* The enable attributes can change their values as LRA starts
+     although it is a bad practice.  To prevent reuse of the outdated
+     values, clear them.  */
+  recog_init ();
+
   lra_live_range_iter = lra_coalesce_iter = 0;
   lra_constraint_iter = lra_constraint_iter_after_spill = 0;
   lra_inheritance_iter = lra_undo_inheritance_iter = 0;
index 9d42700761ca9ece3ffba5cec05ceb61aef50fe4..de00b32c291bcecf67fd86a7fb9da1f81d483bcc 100644 (file)
@@ -1,3 +1,8 @@
+2014-09-18  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR target/61360
+       * gcc.target/i386/pr61360.c: New.
+
 2014-09-18  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/62017
diff --git a/gcc/testsuite/gcc.target/i386/pr61360.c b/gcc/testsuite/gcc.target/i386/pr61360.c
new file mode 100644 (file)
index 0000000..cbd3a6f
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-march=amdfam10 -O2" } */
+int a, b, c, e, f, g, h;
+long *d;
+__attribute__((cold)) void fn1() {
+  int i = g | 1;
+  for (; g; h++) {
+    for (; a; e++) d[0] = c;
+    if (0.002 * i) break;
+    for (; b; f++) d[h] = 0;
+  }
+}