]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR rtl-optimization/54472 (ICE (spill_failure): unable to find a registe...
authorAndrey Belevantsev <abel@ispras.ru>
Thu, 4 Apr 2013 14:04:21 +0000 (18:04 +0400)
committerAndrey Belevantsev <abel@gcc.gnu.org>
Thu, 4 Apr 2013 14:04:21 +0000 (18:04 +0400)
2013-04-04  Andrey Belevantsev  <abel@ispras.ru>

        Backport from mainline
        2012-11-09  Andrey Belevantsev  <abel@ispras.ru>

        PR rtl-optimization/54472
        * sel-sched-ir.c (has_dependence_note_reg_set): Handle implicit sets.
        (has_dependence_note_reg_clobber,
        as_dependence_note_reg_use): Likewise.

        2012-11-09  Andrey Belevantsev  <abel@ispras.ru>

        PR rtl-optimization/54472
        * gcc.dg/pr54472.c: New test.

From-SVN: r197483

gcc/ChangeLog
gcc/sel-sched-ir.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr54472.c [new file with mode: 0644]

index f9b7ec9c8b583b591c6164da3e23977d539aadb3..57e0196e97f94d94000fdcfd5ba5a9a3650ee2f7 100644 (file)
@@ -1,3 +1,13 @@
+2013-04-04  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2012-11-09  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR rtl-optimization/54472
+       * sel-sched-ir.c (has_dependence_note_reg_set): Handle implicit sets.
+       (has_dependence_note_reg_clobber,
+       as_dependence_note_reg_use): Likewise.
+
 2013-04-04  Marek Polacek  <polacek@redhat.com>
 
        Backported from mainline
index 38c817eca370684a170b523bb282583a8e233ebc..38aaff67bd60813b50810c6b313c96ba4d39db38 100644 (file)
@@ -3110,7 +3110,7 @@ has_dependence_note_reg_set (int regno)
          || reg_last->clobbers != NULL)
        *dsp = (*dsp & ~SPECULATIVE) | DEP_OUTPUT;
 
-      if (reg_last->uses)
+      if (reg_last->uses || reg_last->implicit_sets)
        *dsp = (*dsp & ~SPECULATIVE) | DEP_ANTI;
     }
 }
@@ -3130,7 +3130,7 @@ has_dependence_note_reg_clobber (int regno)
       if (reg_last->sets)
        *dsp = (*dsp & ~SPECULATIVE) | DEP_OUTPUT;
 
-      if (reg_last->uses)
+      if (reg_last->uses || reg_last->implicit_sets)
        *dsp = (*dsp & ~SPECULATIVE) | DEP_ANTI;
     }
 }
@@ -3150,7 +3150,7 @@ has_dependence_note_reg_use (int regno)
       if (reg_last->sets)
        *dsp = (*dsp & ~SPECULATIVE) | DEP_TRUE;
 
-      if (reg_last->clobbers)
+      if (reg_last->clobbers || reg_last->implicit_sets)
        *dsp = (*dsp & ~SPECULATIVE) | DEP_ANTI;
 
       /* Handle BE_IN_SPEC.  */
index 80016c5622ff999bdca9378f36b9cb40cb314d3a..bc83fcf4e98c6075425d0efae976116cac347df2 100644 (file)
@@ -1,3 +1,11 @@
+2013-04-04  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2012-11-09  Andrey Belevantsev  <abel@ispras.ru>
+       
+       PR rtl-optimization/54472
+       * gcc.dg/pr54472.c: New test.
+
 2013-04-04  Marek Polacek  <polacek@redhat.com>
 
        Backported from mainline
diff --git a/gcc/testsuite/gcc.dg/pr54472.c b/gcc/testsuite/gcc.dg/pr54472.c
new file mode 100644 (file)
index 0000000..9395203
--- /dev/null
@@ -0,0 +1,9 @@
+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
+/* { dg-options "-O -fschedule-insns -fselective-scheduling" } */
+
+int main ()
+{
+  int a[3][3][3];
+  __builtin_memset (a, 0, sizeof a);
+  return 0;
+}