Patchwork Fix PR56188

login
register
mail settings
Submitter Richard Guenther
Date Feb. 4, 2013, 1:26 p.m.
Message ID <alpine.LNX.2.00.1302041426230.6889@zhemvz.fhfr.qr>
Download mbox | patch
Permalink /patch/217917/
State New
Headers show

Comments

Richard Guenther - Feb. 4, 2013, 1:26 p.m.
This fixes PR56188, another oversight in the PTA speedups.

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

Richard.

2013-02-04  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/56188
	* tree-ssa-structalias.c (label_visit): Consider case with
	initially non-empty points-to set.
	(perform_var_substitution): Dump node mapping and clean up.

Patch

Index: gcc/tree-ssa-structalias.c
===================================================================
--- gcc/tree-ssa-structalias.c	(revision 195707)
+++ gcc/tree-ssa-structalias.c	(working copy)
@@ -2101,13 +2101,17 @@  label_visit (constraint_graph_t graph, s
 
       if (graph->points_to[w])
 	{
-	  if (first_pred == -1U)
-	    first_pred = w;
-	  else if (!graph->points_to[n])
+	  if (!graph->points_to[n])
 	    {
-	      graph->points_to[n] = BITMAP_ALLOC (&predbitmap_obstack);
-	      bitmap_ior (graph->points_to[n],
-			  graph->points_to[first_pred], graph->points_to[w]);
+	      if (first_pred == -1U)
+		first_pred = w;
+	      else
+		{
+		  graph->points_to[n] = BITMAP_ALLOC (&predbitmap_obstack);
+		  bitmap_ior (graph->points_to[n],
+			      graph->points_to[first_pred],
+			      graph->points_to[w]);
+		}
 	    }
 	  else
 	    bitmap_ior_into(graph->points_to[n], graph->points_to[w]);
@@ -2231,14 +2235,20 @@  perform_var_substitution (constraint_gra
   if (dump_file && (dump_flags & TDF_DETAILS))
     for (i = 0; i < FIRST_REF_NODE; i++)
       {
-	bool direct_node = bitmap_bit_p (graph->direct_nodes, i);
-	fprintf (dump_file,
-		 "Equivalence classes for %s node id %d:%s are pointer: %d"
-		 ", location:%d\n",
-		 direct_node ? "Direct node" : "Indirect node", i,
-		 get_varinfo (i)->name,
-		 graph->pointer_label[si->node_mapping[i]],
-		 graph->loc_label[si->node_mapping[i]]);
+	unsigned j = si->node_mapping[i];
+	if (j != i)
+	  fprintf (dump_file, "%s node id %d (%s) mapped to SCC leader "
+		   "node id %d (%s)\n",
+		    bitmap_bit_p (graph->direct_nodes, i)
+		    ? "Direct" : "Indirect", i, get_varinfo (i)->name,
+		    j, get_varinfo (j)->name);
+	else
+	  fprintf (dump_file,
+		   "Equivalence classes for %s node id %d (%s): pointer %d"
+		   ", location %d\n",
+		   bitmap_bit_p (graph->direct_nodes, i)
+		   ? "direct" : "indirect", i, get_varinfo (i)->name,
+		   graph->pointer_label[i], graph->loc_label[i]);
       }
 
   /* Quickly eliminate our non-pointer variables.  */