On Fri, 19 Apr 2019, Jeff Law wrote:

> On 4/19/19 3:26 AM, Jakub Jelinek wrote:
> > On Thu, Apr 18, 2019 at 11:20:32AM +0200, Richard Biener wrote:
> >>
> >> This fixes another case similar to the fixed PR89892, mergephi
> >> via remove_forwarder_block_with_phi caused out-of-date debug
> >> binds to become live and thus needs similar treatment as
> >> remove_forwarder_block.  Previously it didn't even bother
> >> to move debug stmts because the destination always has
> >> multiple predecessors.  Now we have to move and reset them.
> >>
> >> Fixed by factoring out a worker from remove_forwarder_block and
> >> using that from remove_forwarder_block_with_phi as well.
> >>
> >> Bootstrap & regtest running on x86_64-unknown-linux-gnu.
> > 
> > This regressed quite a few guality tests on both x86_64 and i686:
> > +FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 
> > x == 36
> > +FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 
> > y == 25
> > +FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 
> > z == 6
> > +FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 
> > x == 98
> > +FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 
> > y == 117
> > +FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 
> > z == 8
> > +FAIL: gcc.dg/guality/pr54519-2.c   -O2 -flto -fuse-linker-plugin 
> > -fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 17 x == 6
> > +FAIL: gcc.dg/guality/pr54519-2.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 
> > x == 6
> > +FAIL: gcc.dg/guality/pr54519-2.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 
> > y == 25
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 20 x 
> > == 36
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 20 y 
> > == 25
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 20 z 
> > == 6
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 23 x 
> > == 98
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 23 y 
> > == 117
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 23 z 
> > == 8
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O2 -flto -fno-use-linker-plugin 
> > -flto-partition=none  -DPREVENT_OPTIMIZATION line 20 x == 36
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O2 -flto -fno-use-linker-plugin 
> > -flto-partition=none  -DPREVENT_OPTIMIZATION line 23 x == 98
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O2 -flto -fuse-linker-plugin 
> > -fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 20 x == 36
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O2 -flto -fuse-linker-plugin 
> > -fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 23 x == 98
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 
> > x == 36
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 
> > y == 25
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 
> > z == 6
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 
> > x == 98
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 
> > y == 117
> > +FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 
> > z == 8
> > +FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 20 x 
> > == 36
> > +FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 20 y 
> > == 25
> > +FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 20 z 
> > == 6
> > +FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 23 x 
> > == 98
> > +FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 23 y 
> > == 117
> > +FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 23 z 
> > == 8
> > +FAIL: gcc.dg/guality/pr54519-4.c   -O2  -DPREVENT_OPTIMIZATION  line 17 x 
> > == 6
> > +FAIL: gcc.dg/guality/pr54519-4.c   -O2  -DPREVENT_OPTIMIZATION  line 17 y 
> > == 25
> > +FAIL: gcc.dg/guality/pr54519-4.c   -O2 -flto -fno-use-linker-plugin 
> > -flto-partition=none  -DPREVENT_OPTIMIZATION line 17 x == 6
> > +FAIL: gcc.dg/guality/pr54519-4.c   -O2 -flto -fuse-linker-plugin 
> > -fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 17 x == 6
> > +FAIL: gcc.dg/guality/pr54519-4.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 
> > x == 6
> > +FAIL: gcc.dg/guality/pr54519-4.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 
> > y == 25
> > +FAIL: gcc.dg/guality/pr54519-4.c   -Os  -DPREVENT_OPTIMIZATION  line 17 x 
> > == 6
> > +FAIL: gcc.dg/guality/pr54519-4.c   -Os  -DPREVENT_OPTIMIZATION  line 17 y 
> > == 25
> > +FAIL: gcc.dg/guality/pr54519-5.c   -O2 -flto -fuse-linker-plugin 
> > -fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 17 x == 6
> > +FAIL: gcc.dg/guality/pr54519-5.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 
> > x == 6
> > +FAIL: gcc.dg/guality/pr54519-5.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 
> > y == 25
> > +FAIL: gcc.dg/guality/pr54519-6.c   -Os  -DPREVENT_OPTIMIZATION  line 11 x 
> > == 2
> > +FAIL: gcc.dg/guality/pr54519-6.c   -Os  -DPREVENT_OPTIMIZATION  line 11 y 
> > == 0
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 14 
> > arg1 == 1
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 14 
> > arg2 == 2
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 14 
> > arg3 == 3
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 14 
> > arg4 == 4
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 14 
> > arg5 == 5
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 14 
> > arg6 == 6
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 16 
> > arg1 == 1
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 16 
> > arg2 == 2
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 16 
> > arg3 == 3
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 16 
> > arg4 == 4
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 16 
> > arg5 == 5
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 16 
> > arg6 == 6
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 14 
> > arg1 == 1
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 14 
> > arg2 == 2
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 14 
> > arg3 == 3
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 14 
> > arg4 == 4
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 14 
> > arg5 == 5
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 14 
> > arg6 == 6
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 16 
> > arg1 == 1
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 16 
> > arg2 == 2
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 16 
> > arg3 == 3
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 16 
> > arg4 == 4
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 16 
> > arg5 == 5
> > +FAIL: gcc.dg/guality/pr68860-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 16 
> > arg6 == 6
> > +FAIL: gcc.dg/guality/pr68860-1.c   -Os  -DPREVENT_OPTIMIZATION  line 14 
> > arg1 == 1
> > +FAIL: gcc.dg/guality/pr68860-1.c   -Os  -DPREVENT_OPTIMIZATION  line 14 
> > arg2 == 2
> > +FAIL: gcc.dg/guality/pr68860-1.c   -Os  -DPREVENT_OPTIMIZATION  line 14 
> > arg3 == 3
> > +FAIL: gcc.dg/guality/pr68860-1.c   -Os  -DPREVENT_OPTIMIZATION  line 14 
> > arg4 == 4
> > +FAIL: gcc.dg/guality/pr68860-1.c   -Os  -DPREVENT_OPTIMIZATION  line 14 
> > arg5 == 5
> > +FAIL: gcc.dg/guality/pr68860-1.c   -Os  -DPREVENT_OPTIMIZATION  line 14 
> > arg6 == 6
> > +FAIL: gcc.dg/guality/pr68860-1.c   -Os  -DPREVENT_OPTIMIZATION  line 16 
> > arg1 == 1
> > +FAIL: gcc.dg/guality/pr68860-1.c   -Os  -DPREVENT_OPTIMIZATION  line 16 
> > arg2 == 2
> > +FAIL: gcc.dg/guality/pr68860-1.c   -Os  -DPREVENT_OPTIMIZATION  line 16 
> > arg3 == 3
> > +FAIL: gcc.dg/guality/pr68860-1.c   -Os  -DPREVENT_OPTIMIZATION  line 16 
> > arg4 == 4
> > +FAIL: gcc.dg/guality/pr68860-1.c   -Os  -DPREVENT_OPTIMIZATION  line 16 
> > arg5 == 5
> > +FAIL: gcc.dg/guality/pr68860-1.c   -Os  -DPREVENT_OPTIMIZATION  line 16 
> > arg6 == 6
> I'm seeing similar results across x86_64, i686, aarch64, ppcle, etc.
> Essentially any native target that's built over the last 24hrs has
> started regressing guality tests.

Not sure how this escaped my testing.  The following fixes it.

Boostrap/regtest running on x86_64-unknown-linux-gnu.

Richard.

2019-04-21  Richard Biener  <rguent...@suse.de>

        PR debug/90131
        * tree-cfgcleanup.c (move_debug_stmts_from_forwarder): Add
        dest_single_pred_p argument.
        (remove_forwarder_block): Adjust.
        (remove_forwarder_block_with_phi): Likewise.

Index: gcc/tree-cfgcleanup.c
===================================================================
--- gcc/tree-cfgcleanup.c       (revision 270483)
+++ gcc/tree-cfgcleanup.c       (working copy)
@@ -447,12 +447,12 @@ phi_alternatives_equal (basic_block dest
 /* Move debug stmts from the forwarder block SRC to DEST.  */
 
 static void
-move_debug_stmts_from_forwarder (basic_block src, basic_block dest)
+move_debug_stmts_from_forwarder (basic_block src, basic_block dest,
+                                bool dest_single_pred_p)
 {
   if (!MAY_HAVE_DEBUG_STMTS)
     return;
 
-  bool can_move_debug_stmts = single_pred_p (dest);
   gimple_stmt_iterator gsi_to = gsi_after_labels (dest);
   for (gimple_stmt_iterator gsi = gsi_after_labels (src); !gsi_end_p (gsi);)
     {
@@ -460,7 +460,7 @@ move_debug_stmts_from_forwarder (basic_b
       gcc_assert (is_gimple_debug (debug));
       /* Move debug binds anyway, but not anything else like begin-stmt
         markers unless they are always valid at the destination.  */
-      if (can_move_debug_stmts
+      if (dest_single_pred_p
          || gimple_debug_bind_p (debug))
        {
          gsi_move_before (&gsi, &gsi_to);
@@ -472,7 +472,7 @@ move_debug_stmts_from_forwarder (basic_b
             For anther, if the debug stmt is immediately followed by a
             (debug) definition in the destination (on a post-dominated path?)
             we can elide it without any bad effects.  */
-         if (!can_move_debug_stmts)
+         if (!dest_single_pred_p)
            {
              gimple_debug_bind_reset_value (debug);
              update_stmt (debug);
@@ -544,6 +544,7 @@ remove_forwarder_block (basic_block bb)
   basic_block pred = NULL;
   if (single_pred_p (bb))
     pred = single_pred (bb);
+  bool dest_single_pred_p = single_pred_p (dest);
 
   /* Redirect the edges.  */
   for (ei = ei_start (bb->preds); (e = ei_safe_edge (ei)); )
@@ -602,7 +603,7 @@ remove_forwarder_block (basic_block bb)
 
   /* Move debug statements.  Reset them if the destination does not
      have a single predecessor.  */
-  move_debug_stmts_from_forwarder (bb, dest);
+  move_debug_stmts_from_forwarder (bb, dest, dest_single_pred_p);
 
   bitmap_set_bit (cfgcleanup_altered_bbs, dest->index);
 
@@ -1203,6 +1204,7 @@ remove_forwarder_block_with_phi (basic_b
   basic_block pred = NULL;
   if (single_pred_p (bb))
     pred = single_pred (bb);
+  bool dest_single_pred_p = single_pred_p (dest);
 
   /* Redirect each incoming edge to BB to DEST.  */
   while (EDGE_COUNT (bb->preds) > 0)
@@ -1287,7 +1289,7 @@ remove_forwarder_block_with_phi (basic_b
 
   /* Move debug statements.  Reset them if the destination does not
      have a single predecessor.  */
-  move_debug_stmts_from_forwarder (bb, dest);
+  move_debug_stmts_from_forwarder (bb, dest, dest_single_pred_p);
 
   /* Update the dominators.  */
   dombb = get_immediate_dominator (CDI_DOMINATORS, bb);

Reply via email to