Optimize exceptional control flow
Summary:
The ExnNode tree has references to blocks, which can prevent things
being marked dead. We only recomputed it when we emitted the bytecode,
so a second invocation of hhbbc would have more optimization
opportunities.
This adds an optimization step. Initially, I called it along with the
other control flow optimizations, but that still resulted in
suboptimal code, because the extra edges would hinder the analysis
phase.
To fix this, I've moved it to the analysis phase; this is fine because
we never look at the internals of any Func other than the one we're
working on. If it ever does become a problem, we could move it to the
single-threaded update phase.
Reviewed By: ricklavoie
Differential Revision:
D4750629
fbshipit-source-id:
e59f8514ecb4bb590fdb986400cc8d20a855be46