http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38474
--- Comment #76 from Richard Biener <rguenth at gcc dot gnu.org> ---
There are a lot of calls with fnspec, almost all constraints look like
D.12770.0+16 = allalltmp
D.12770.64+128 = allalltmp
D.12770.192+64 = allalltmp
callarg = &READONLY
callarg = *callarg
callarg = callarg + UNKNOWN
CALLUSED = callarg
ESCAPED = &NONLOCAL
allalltmp = CALLUSED
allalltmp = NONLOCAL
D.12771.0+16 = allalltmp
D.12771.64+128 = allalltmp
D.12771.192+64 = allalltmp
callarg = &D.12770.0+16
callarg = *callarg
callarg = callarg + UNKNOWN
They get unified pretty quickly though.
Still we end up with many very large sets that include ESCAPED but also some
members of ESCAPED explicitely (that's redundant). I have some idea on how
to mitigate this which eventually should speed things up (or at least reduce
memory usage).
Like
Index: tree-ssa-structalias.c
===================================================================
--- tree-ssa-structalias.c (revision 205739)
+++ tree-ssa-structalias.c (working copy)
@@ -1600,6 +1600,14 @@ do_sd_constraint (constraint_graph_t gra
goto done;
}
+ /* If the solution of Y contains escaped then filter all bits from
+ that from the delta to reduce work. */
+ if (bitmap_bit_p (delta, escaped_id))
+ {
+ bitmap_and_compl_into (delta, get_varinfo (find
(escaped_id))->solution);
+ flag |= bitmap_set_bit (sol, escaped_id);
+ }
+
/* If we do not know at with offset the rhs is dereferenced compute
the reachability set of DELTA, conservatively assuming it is
dereferenced at all valid offsets. */
will check next week.