Hi!

I've backported the following patch to 4.8 branch,
bootstrapped/regtested on x86_64-linux and i686-linux,
committed.

2013-10-09  Jakub Jelinek  <ja...@redhat.com>

        Backport from mainline
        2013-09-26  Richard Biener  <rguent...@suse.de>

        PR tree-optimization/58539
        * tree-vect-loop.c (vect_create_epilog_for_reduction): Honor
        the fact that debug statements are not taking part in loop-closed
        SSA construction.

        * gcc.dg/torture/pr58539.c: New testcase.

--- gcc/tree-vect-loop.c        (revision 202941)
+++ gcc/tree-vect-loop.c        (revision 202942)
@@ -4411,7 +4411,8 @@ vect_finalize_reduction:
          result.  (The reduction result is expected to have two immediate uses 
-
          one at the latch block, and one at the loop exit).  */
       FOR_EACH_IMM_USE_FAST (use_p, imm_iter, scalar_dest)
-        if (!flow_bb_inside_loop_p (loop, gimple_bb (USE_STMT (use_p))))
+        if (!flow_bb_inside_loop_p (loop, gimple_bb (USE_STMT (use_p)))
+           && !is_gimple_debug (USE_STMT (use_p)))
           phis.safe_push (USE_STMT (use_p));
 
       /* While we expect to have found an exit_phi because of loop-closed-ssa
@@ -4541,7 +4542,10 @@ vect_finalize_reduction:
       FOR_EACH_IMM_USE_FAST (use_p, imm_iter, scalar_dest)
         {
           if (!flow_bb_inside_loop_p (loop, gimple_bb (USE_STMT (use_p))))
-            phis.safe_push (USE_STMT (use_p));
+           {
+             if (!is_gimple_debug (USE_STMT (use_p)))
+               phis.safe_push (USE_STMT (use_p));
+           }
           else
             {
               if (double_reduc && gimple_code (USE_STMT (use_p)) == GIMPLE_PHI)
@@ -4551,7 +4555,8 @@ vect_finalize_reduction:
                   FOR_EACH_IMM_USE_FAST (phi_use_p, phi_imm_iter, phi_res)
                     {
                       if (!flow_bb_inside_loop_p (loop,
-                                             gimple_bb (USE_STMT (phi_use_p))))
+                                             gimple_bb (USE_STMT (phi_use_p)))
+                         && !is_gimple_debug (USE_STMT (phi_use_p)))
                         phis.safe_push (USE_STMT (phi_use_p));
                     }
                 }
--- gcc/testsuite/gcc.dg/torture/pr58539.c      (revision 0)
+++ gcc/testsuite/gcc.dg/torture/pr58539.c      (revision 202942)
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-g" } */
+
+int a, b;
+
+extern void baz (int);
+
+int foo (int p)
+{
+  return p ? p : 1;
+}
+
+void bar ()
+{
+  int *c = &a, *d = &a;
+  for (b = 0; b < 12; b++)
+    *d |= 1;
+  foo (*c);
+  baz (*c && 1);
+}

        Jakub

Reply via email to