This moves SinkIntoLoop from MachineLICM to MachineSink.
Not only is this arguably a better home for this, but more importantly there is infrastructure available in MachineSink that is required for making SinkIntoLoop more generic. For example, hasStoreBetween that is available could be queried by SinkIntoLoop to make it less conservative. This would be the next step of this work. At the moment, this is a non-functional change.
This only checks for stores/calls in the preheader. What about the case where there are stores/clobbering calls in the loop body,
e.g. something like
in the test case?