> Hi, > > On Tue, 28 Jan 2014, Richard Biener wrote: > > > >> The EH optimizations involving cleanups with only clobbers in them > > >> are that if at the end of the cleanup after only CLOBBER stmts you > > >> would rethrow the exception externally, then the clobber isn't needed > > >> and the whole cleanup can be removed. And, if it rethrows somewhere > > >> internally, we can move the clobber stmts to the landing pad of > > >> wherever it would be caught. > > > > > > OK, I still do not see how ehclanup1 can then safely remove them > > > pre-inline given that the whole function body can be inlined into > > > another containing the outer EH region. > > > > That's true. > > Yes, and I think they should be removed only after inlining.
In that case I think I shoud look into detecting clobber only EH in inliner and do not account it into the size/time estimates. I always wondered why tramp3d becomes so harder for inliner with EH enabled, I seem to get it now ;) > (Alternatively the inliner could be extended to add clobbers when changing > an external-throw into an internal-throw, but well, ...) > > > > If this is valid, why we can not just eliminate EH in those outer > > > clobber try..finally as part of ehlowering earlier? > > > > Probably we'd miss too many inlining cases from early inlining and the > > ehcleanup1 time is just a heuristic that works good enough for us? > > No, removing even more clobbers would remove even more stack slot sharing. > If anything we should remove _less_ regions (as in the precondition for > Honzas sentence above, "If this is valid, ..." simply is false). AFAIU > this all is just a problem with O0 code quality. So, there's the obvious > solution: run ehcleanup also for O0. It is also problem of inliner quality decisions and memory use/compile time. The in-memory representation of unnecesary EH is quite big. I am quite ignorant in this area, but for -O0 can't we simply disable all clobbers? Honza > > > Ciao, > Michael.