This may trigger other optimization phases to make more progress themselves.
This is pretty basic. Right now it only handles pure assignments -- same type on each side, no swizzling, and only within basic blocks.