The PeepholeOptimizer misses some rewrite opportunities since it can't look through PHI instructions.
This patch cleans the current logic a bit while preparing for another patch that can handle PHIs. Changes include:
- Create a new CopyRewriter for Uncoalescable copy-like instructions.
- Change the ValueTracker to return a ValueTrackerResult.
This makes optimizeUncoalescable looks more like optimizeCoalescable and use the CopyRewritter infrastructure.