This change essentially does the following:
- Factors out formLCSSAForOneInstruction, so that we can use the same instance of SSAUpdate for all rewritings corresponding to the same instruction.
- Starts to use a stricter check than just SSAUpdate.HasValueForBlock: we need to process the value even if SSAUpdater thinks it's available unless it's a PHI-node defined in this block.
(1) allows us to avoid generating duplicate phi-nodes in the same BB for
the same instruction - we did this because we cleared SSAUpdater on
every iteration in our Worklist loop. Now we only clear it once, before
processing an instruction.
(2) makes sure that we still generate LCSSA phi-nodes even in cases
where SSAUpdater thinks we have an available value.
Note: this cache become less effective since we're not reusing it for the entire worklist anymore.