This function has a bug which will incorrectly reschedule instructions
after an INLINEASM_BR (which can branch). (The bug may also allow
scheduling past a throwing-CALL, I'm not certain.)
I could fix that bug, but, as the removed FIXME noted, attempting to
move instructions _before_ converting to 3-addr, so as to avoid
needing to make the conversion in the first place is a better
idea. And, in fact, the code to do such reodering was added to this
pass in 2011, via the addition of the function rescheduleMIBelowKill,
only a few months after the FIXME was added. That reschedule code
does not contain the same bug.
The removal of this funciton is not a no-op: in some cases
sink3AddrInstruction would move an instruction after converting it to
3-addr form, when rescheduleMIBelowKill would not move before
converison. However, this does not appear to be important: the
machine instruction scheduler can reorder the after-conversion
instructions, in any case.
Looks like we only access the third element of this struct in the GEP, IIUC the GEP correctly?