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.