Changing order of instructions

Given a segment of a MachineBasicBlock containing the instructions [MI4, MI5, MI6] at an arbitrary point, what would be the best way to change this segment with the same instructions in a different order, say, [MI5, MI6, MI4]?

I looked into splice(), but it was impossible to hold iterators that remained valid before and after the splicing. I tried erase/remove() with insert/insertAfter(), but I ended up with the instructions being destroyed.

TIA

Hi Evandro,

Given a segment of a MachineBasicBlock containing the instructions [MI4,
MI5, MI6] at an arbitrary point, what would be the best way to change
this segment with the same instructions in a different order, say, [MI5,
MI6, MI4]?

I looked into splice(), but it was impossible to hold iterators that
remained valid before and after the splicing. I tried erase/remove()
with insert/insertAfter(), but I ended up with the instructions being
destroyed.

I don't know the answer, but perhaps you can do it earlier. When the basic
block is in SDag form there is no ordering between instructions except what
is logically necessary: operands of an instruction need to come before the
instruction. It is instruction scheduling that determines the order in
which instructions actually occur - perhaps you can tweak that to improve the
order in which your instructions are output?

Ciao, Duncan.