diff mbox

[4.8] Backported fix for PR tree-optimization/58539

Message ID 20131009092954.GM30970@tucnak.zalov.cz
State New
Headers show

Commit Message

Jakub Jelinek Oct. 9, 2013, 9:29 a.m. UTC
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  <jakub@redhat.com>

	Backport from mainline
	2013-09-26  Richard Biener  <rguenther@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.


	Jakub
diff mbox

Patch

--- 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);
+}