]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/gcc-tumbl.git/commitdiff
Backport from mainline
authorabel <abel@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 Apr 2013 08:17:06 +0000 (08:17 +0000)
committerabel <abel@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 Apr 2013 08:17:06 +0000 (08:17 +0000)
        2013-02-27  Andrey Belevantsev  <abel@ispras.ru>

        PR middle-end/45472

        * sel-sched-ir.c (merge_expr): Also change vinsn of merged expr
        when the may_trap_p bit of the exprs being merged differs.
        Reorder tests for speculativeness in the logical and operator.

        Backport from mainline
         2013-03-05  Jakub Jelinek  <jakub@redhat.com>

        PR middle-end/56461
        * sel-sched-ir.c (free_sched_pools): Release
        succs_info_pool.stack[succs_info_pool.max_top] vectors too
        if succs_info_pool.max_top isn't -1.

        Backport from mainline
        2013-02-27  Andrey Belevantsev  <abel@ispras.ru>

        PR middle-end/45472
        * gcc.dg/pr45472.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@197299 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 33d54ab3ea5492f8de511325f3f7ac0ef4ed762d..c870a060ead8e3d9a1fd49bbf39c68fbbf467096 100644 (file)
@@ -1,3 +1,22 @@
+2013-04-01  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2013-02-27  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR middle-end/45472
+       
+       * sel-sched-ir.c (merge_expr): Also change vinsn of merged expr
+       when the may_trap_p bit of the exprs being merged differs.
+       Reorder tests for speculativeness in the logical and operator.
+
+       Backport from mainline
+        2013-03-05  Jakub Jelinek  <jakub@redhat.com>
+        
+       PR middle-end/56461
+       * sel-sched-ir.c (free_sched_pools): Release
+       succs_info_pool.stack[succs_info_pool.max_top] vectors too
+       if succs_info_pool.max_top isn't -1.
+
 2013-04-01  Andrey Belevantsev  <abel@ispras.ru>
 
        Backport from mainline
index 74089df38d7682823e63c4faa0c916b20f33f7f2..fe667210ec31f8865763fe57fe77ead2922aacb6 100644 (file)
@@ -1862,8 +1862,12 @@ merge_expr (expr_t to, expr_t from, insn_t split_point)
   /* Make sure that speculative pattern is propagated into exprs that
      have non-speculative one.  This will provide us with consistent
      speculative bits and speculative patterns inside expr.  */
-  if (EXPR_SPEC_DONE_DS (to) == 0
-      && EXPR_SPEC_DONE_DS (from) != 0)
+  if ((EXPR_SPEC_DONE_DS (from) != 0
+       && EXPR_SPEC_DONE_DS (to) == 0)
+      /* Do likewise for volatile insns, so that we always retain
+        the may_trap_p bit on the resulting expression.  */
+      || (VINSN_MAY_TRAP_P (EXPR_VINSN (from))
+         && !VINSN_MAY_TRAP_P (EXPR_VINSN (to))))
     change_vinsn_in_expr (to, EXPR_VINSN (from));
 
   merge_expr_data (to, from, split_point);
@@ -5019,7 +5023,7 @@ free_sched_pools (void)
 
   free_alloc_pool (sched_lists_pool);
   gcc_assert (succs_info_pool.top == -1);
-  for (i = 0; i < succs_info_pool.max_top; i++)
+  for (i = 0; i <= succs_info_pool.max_top; i++)
     {
       VEC_free (rtx, heap, succs_info_pool.stack[i].succs_ok);
       VEC_free (rtx, heap, succs_info_pool.stack[i].succs_other);
index 099241559a5db4da38af92ee48adfcd6fd4e57f1..d608dd7fcd43f945d2ffc2e0f2d3cb47150bd583 100644 (file)
@@ -1,3 +1,11 @@
+2013-04-01  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2013-02-27  Andrey Belevantsev  <abel@ispras.ru>
+       
+       PR middle-end/45472
+       * gcc.dg/pr45472.c: New test.
+
 2013-03-26  Richard Biener  <rguenther@suse.de>
 
        Backport from mainline
diff --git a/gcc/testsuite/gcc.dg/pr45472.c b/gcc/testsuite/gcc.dg/pr45472.c
new file mode 100644 (file)
index 0000000..d6cb6bc
--- /dev/null
@@ -0,0 +1,63 @@
+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
+/* { dg-options "-O -fschedule-insns2 -fselective-scheduling2" } */
+
+struct S
+{
+  volatile long vl;
+  int i;
+};
+struct S s1, s2;
+
+void
+foo (int j, int c)
+{
+  int i;
+  for (i = 0; i <= j; i++)
+    {
+      if (c)
+       s2.vl += s1.vl;
+      s1 = s2;
+    }
+}
+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
+/* { dg-options "-O -fschedule-insns2 -fselective-scheduling2" } */
+
+struct S
+{
+  volatile long vl;
+  int i;
+};
+struct S s1, s2;
+
+void
+foo (int j, int c)
+{
+  int i;
+  for (i = 0; i <= j; i++)
+    {
+      if (c)
+       s2.vl += s1.vl;
+      s1 = s2;
+    }
+}
+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
+/* { dg-options "-O -fschedule-insns2 -fselective-scheduling2" } */
+
+struct S
+{
+  volatile long vl;
+  int i;
+};
+struct S s1, s2;
+
+void
+foo (int j, int c)
+{
+  int i;
+  for (i = 0; i <= j; i++)
+    {
+      if (c)
+       s2.vl += s1.vl;
+      s1 = s2;
+    }
+}