do Code Splitting
Find places where control flow diverges due to a condition that was known at some point earlier in the chain of phis leading to it. Find all vertices from the phi where control flow merged and the knowledge of the condition was lost, up to the point where the condition is being tested again.
Do this for every such control-flow branch point, accumulating the estimated profitability of each split.
Then regenerate the instruction graph, but instead of merging and losing information at the affected phis, produce a duplicate for each reached profitable combination of conditions, allowing the code regeneration to take advantage of the stronger condition along that path... at the expense of producing more code.
The graph starts and ends in SSA form.