LICM may have pulled out a splat, but with .vx instructions we
can fold it into an operation.
This patch enables CGP to reverse the LICM transform and move the
splat back into the loop.
I've started with the commutable integer operations and shifts, but we can
extend this with more operations in future patches.
Do you think the IR pattern matching library would be appropriate to use here?
While I'm on that subject, do you think it's worth separating this logic out into a new pattern matcher (e.g. m_VectorSplat) if there isn't one already?