[PATCH] tree-optimization/98024 - fix rnflow regression

Richard Biener rguenther@suse.de
Fri Nov 27 11:50:17 GMT 2020


The change to make PRE insertion iterate less had a typo in checking
successors RPO state.  Fixing this exposes that regular PRE insertion
when facing a value that is the same on all edges inserts an
assignment in place of a PHI node but fails to set up things so that
this insertion is not repeated (it correctly does not return
'new_stuff').  But with the new iteration scheme this causes us
to repeatedly insert such assignment and change AVAIL_OUT over to
the newly inserted expression.  The fix is to treat this as PHI
and insert into PHI_GEN, avoiding repetitive insertion.

Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed.

2020-11-27  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/98024
	* tree-ssa-pre.c (insert): Fix successor RPO order check.
	(do_pre_regular_insertion): When inserting an assignment
	in place of an all-same-value PHI still record that into
	PHI_GEN.
---
 gcc/tree-ssa-pre.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index e25cec7ffa1..a17a09af990 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -3471,6 +3471,7 @@ do_pre_regular_insertion (basic_block block, basic_block dom,
 	      add_to_value (val, newe);
 	      bitmap_value_replace_in_set (AVAIL_OUT (block), newe);
 	      bitmap_insert_into_set (NEW_SETS (block), newe);
+	      bitmap_insert_into_set (PHI_GEN (block), newe);
 	    }
 	}
     }
@@ -3808,13 +3809,14 @@ insert (void)
 		    |= bitmap_value_replace_in_set (AVAIL_OUT (block), expr);
 		}
 	      /* We need to iterate if AVAIL_OUT of an already processed
-		 block source.  */
+		 block source changed.  */
 	      if (avail_out_changed && !changed)
 		{
 		  edge_iterator ei;
 		  edge e;
 		  FOR_EACH_EDGE (e, ei, block->succs)
-		    if (bb_rpo[e->src->index] < idx)
+		    if (e->dest->index != EXIT_BLOCK
+			&& bb_rpo[e->dest->index] < idx)
 		      changed = true;
 		}
 
-- 
2.26.2


More information about the Gcc-patches mailing list