aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2023-03-14 14:38:01 +0100
committerRichard Biener <rguenther@suse.de>2023-04-19 15:42:21 +0200
commit2cef0d0964d74dd61d3f4df855d521a0ff219a03 (patch)
treecdf55289b44da8aa16fbe10d38f8f3c0e73a7106
parent1da16c1141ebf3948de69eaeb1148778bf0790a9 (diff)
downloadgcc-2cef0d0964d74dd61d3f4df855d521a0ff219a03.zip
gcc-2cef0d0964d74dd61d3f4df855d521a0ff219a03.tar.gz
gcc-2cef0d0964d74dd61d3f4df855d521a0ff219a03.tar.bz2
Split out solve_add_graph_edge
Split out a worker with all the special-casings when adding a graph edge during solving. * tree-ssa-structalias.cc (solve_add_graph_edge): New function, split out from ... (do_sd_constraint): ... here.
-rw-r--r--gcc/tree-ssa-structalias.cc35
1 files changed, 24 insertions, 11 deletions
diff --git a/gcc/tree-ssa-structalias.cc b/gcc/tree-ssa-structalias.cc
index 39c342f..84c625d 100644
--- a/gcc/tree-ssa-structalias.cc
+++ b/gcc/tree-ssa-structalias.cc
@@ -1640,6 +1640,29 @@ topo_visit (constraint_graph_t graph, struct topo_info *ti,
ti->topo_order.safe_push (n);
}
+/* Add a copy edge FROM -> TO, optimizing special cases. Returns TRUE
+ if the solution of TO changed. */
+
+static bool
+solve_add_graph_edge (constraint_graph_t graph, unsigned int to,
+ unsigned int from)
+{
+ /* Adding edges from the special vars is pointless.
+ They don't have sets that can change. */
+ if (get_varinfo (from)->is_special_var)
+ return bitmap_ior_into (get_varinfo (to)->solution,
+ get_varinfo (from)->solution);
+ /* Merging the solution from ESCAPED needlessly increases
+ the set. Use ESCAPED as representative instead. */
+ else if (from == find (escaped_id))
+ return bitmap_set_bit (get_varinfo (to)->solution, escaped_id);
+ else if (get_varinfo (from)->may_have_pointers
+ && add_graph_edge (graph, to, from))
+ return bitmap_ior_into (get_varinfo (to)->solution,
+ get_varinfo (from)->solution);
+ return false;
+}
+
/* Process a constraint C that represents x = *(y + off), using DELTA as the
starting solution for y. */
@@ -1700,17 +1723,7 @@ do_sd_constraint (constraint_graph_t graph, constraint_t c,
{
t = find (v->id);
- /* Adding edges from the special vars is pointless.
- They don't have sets that can change. */
- if (get_varinfo (t)->is_special_var)
- flag |= bitmap_ior_into (sol, get_varinfo (t)->solution);
- /* Merging the solution from ESCAPED needlessly increases
- the set. Use ESCAPED as representative instead. */
- else if (t == find (escaped_id))
- flag |= bitmap_set_bit (sol, escaped_id);
- else if (v->may_have_pointers
- && add_graph_edge (graph, lhs, t))
- flag |= bitmap_ior_into (sol, get_varinfo (t)->solution);
+ flag |= solve_add_graph_edge (graph, lhs, t);
if (v->is_full_var
|| v->next == 0)