https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93199

--- Comment #15 from Richard Biener <rguenth at gcc dot gnu.org> ---
So lower_eh_constructs is what is remaining of EH time and there it's just
cleanup_is_dead_in which ends up costly:

  while (reg && reg->type == ERT_CLEANUP)
    reg = reg->outer;
  return (reg && reg->type == ERT_MUST_NOT_THROW);

looks like we could easily track that in the leh_state (cache the innermost
non-cleanup region).  I won't pursue this, but a quick check making the above
simply return false shows

 tree eh                            :   1.44 (  2%)   0.05 (  1%)   1.48 (  2%)
 246315 kB (  8%)

on the RH bugzilla testcase.

The reduced testcase can now be conveniently analyzed using callgrind (even
with -O0 cc1plus).  The RH one is still bigger.

Reply via email to