So that forwards is forwards and backwards is reverse. Also add a check so that we know the instructions are in the expected order. We'll need a follow-up patch to two to be able to successfully move instructions around for ARMLowOverheadLoops.
I may be misunderstanding this but won't this overwrite the subtraction to r3 that is done each iteration? So I think this should be outside the loop like it was before.
If Sam has no further questions, this looks good to me.
This code is an exact copy of the previous one, except one iterator. This can probably be refactored into one IsSafeToMove function that gets passed in this iterator. But it's a nit, up to you if it is worth doing this.