[Bug tree-optimization/26854] Inordinate compile times on large routines
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Feb 23 11:06:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=26854
--- Comment #135 from Richard Biener <rguenth at gcc dot gnu.org> ---
bitmap stats seem to be confused by 1) bitmap_obstack_release not releasing
overhead of bitmaps allocated from it, 2) the DF machinery using embedded
bitmap heads which for this testcase seems to explode df_rd_alloc stats
by not accounting releases properly(?) - 'out' is updated by bitmap_clear
on it and copying over a local bitmap_head:
struct df_rd_problem_data *problem_data;
bitmap_head tmp;
/* Note that TMP is _not_ a temporary bitmap if we end up replacing
OUT with TMP. Therefore, allocate TMP in the RD bitmaps obstack. */
problem_data = (struct df_rd_problem_data *) df_rd->problem_data;
bitmap_initialize (&tmp, &problem_data->rd_bitmaps);
bitmap_and_compl (&tmp, in, kill);
EXECUTE_IF_SET_IN_BITMAP (sparse_kill, 0, regno, bi)
{
bitmap_clear_range (&tmp,
DF_DEFS_BEGIN (regno),
DF_DEFS_COUNT (regno));
}
bitmap_ior_into (&tmp, gen);
changed = !bitmap_equal_p (&tmp, out);
if (changed)
{
bitmap_clear (out);
bb_info->out = tmp;
}
else
bitmap_clear (&tmp);
it looks like this "underflows" the counters. It would be good to
have this abstracted into a bitmap_move () doing the proper accounting.
Trying if that fixes the above issue somewhat.
More information about the Gcc-bugs
mailing list