[llvm-dev] Why MachineBasicBlcok doesn't have transferPredecessors() ?

Nicolai Hähnle via llvm-dev llvm-dev at lists.llvm.org
Fri Mar 13 18:18:23 PDT 2020

On Fri, Mar 13, 2020 at 5:09 PM PenYiWang <s89162504 at gmail.com> wrote:
> for example
> I want to insert a new machine bb “before” a specific machine bb.
> or split a mbb and keep the later one as the original one.
> (to keep the label/Blackadder's correct
> t)

Can you explain why that would make a difference? Basic block labels
ought to be irrelevant for codegen.

> (or keep other property of mbb)

What property?


> so I need to transfer the original mbb's predecessor to the new mbb.
> Nicolai Hähnle <nhaehnle at gmail.com> 於 2020年3月13日 週五 23:57 寫道:
>> On Fri, Mar 13, 2020 at 12:22 PM PenYiWang via llvm-dev
>> <llvm-dev at lists.llvm.org> wrote:
>> > I found that there is transferSuccessors() in MachineBasicBlcok
>> >
>> > So that when manipulating MachineBasicBlock,
>> > we can use transferSuccessors to update the CFG easily.
>> >
>> > Why there is not transferPredecessors in  MachineBasicBlcok ?
>> What would you want to use it for? If it's for splitting a block: the
>> common pattern for splitting seems to be to create a new block that
>> will be the successor of the old one rather than the other way around.
>> One good reason for this is that doing it this way only requires
>> fixing up (target-independent) phi instructions, while doing it the
>> other way around would require fixing up the (target-specific!) branch
>> instructions.
>> Cheers,
>> Nicolai
>> --
>> Lerne, wie die Welt wirklich ist,
>> aber vergiss niemals, wie sie sein sollte.

Lerne, wie die Welt wirklich ist,
aber vergiss niemals, wie sie sein sollte.

More information about the llvm-dev mailing list