PenYiWang via llvm-dev
2020-Mar-13 16:09 UTC
[llvm-dev] Why MachineBasicBlcok doesn't have transferPredecessors() ?
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) (or keep other property of mbb) 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. >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200314/2536364e/attachment.html>
Nicolai Hähnle via llvm-dev
2020-Mar-14 01:18 UTC
[llvm-dev] Why MachineBasicBlcok doesn't have transferPredecessors() ?
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? Cheers, Nicolai> > 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.
PenYiWang via llvm-dev
2020-Mar-14 03:47 UTC
[llvm-dev] Fwd: Why MachineBasicBlcok doesn't have transferPredecessors() ?
---------- Forwarded message --------- 寄件者: PenYiWang <s89162504 at gmail.com> Date: 2020年3月14日 週六 11:24 Subject: Re: [llvm-dev] Why MachineBasicBlcok doesn't have transferPredecessors() ? To: Nicolai Hähnle <nhaehnle at gmail.com> for example in llvm ir level, I use BlockAddress to get the address of a BasicBlock, which is started with a Call Inst ir. /* I want to get the address of exactly the call instruction in asm level. */ but in llvm backend, llvm will insert some instruction before the call, like “sub rsp” or “mov rdi” , so the BlockAddress would get the address in front of the call instruction. that' why i want to spilt the MachineBasicBlock and move out the ”sub rsp“ or ”mov rdi“ to the new mbb before the original mbb, so that i can keep the call instruction as the first instruction of the MachineBasicBlock. so i need to maintain the predecessor of the new mbb, (because i insert a new mbb “before” the original mbb) Nicolai Hähnle <nhaehnle at gmail.com> 於 2020年3月14日 週六 09:18 寫道:> 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? > > Cheers, > Nicolai > > > > > > 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. >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200314/c4f8cd66/attachment.html>
Reid Kleckner via llvm-dev
2020-Mar-14 15:20 UTC
[llvm-dev] Fwd: Why MachineBasicBlcok doesn't have transferPredecessors() ?
If you are working at the MachineInstr level, try using setPostInstrSymbol to place your own label after the call in question. That is the reliable way of getting the address of a specific instruction. On Fri, Mar 13, 2020 at 8:47 PM PenYiWang via llvm-dev < llvm-dev at lists.llvm.org> wrote:> > > ---------- Forwarded message --------- > 寄件者: PenYiWang <s89162504 at gmail.com> > Date: 2020年3月14日 週六 11:24 > Subject: Re: [llvm-dev] Why MachineBasicBlcok doesn't have > transferPredecessors() ? > To: Nicolai Hähnle <nhaehnle at gmail.com> > > > for example > > in llvm ir level, I use BlockAddress to get the address of a BasicBlock, > which is started with a Call Inst ir. > > /* > I want to get the address of exactly the call instruction in asm level. > */ > > but in llvm backend, llvm will insert some instruction before the call, > like “sub rsp” or “mov rdi” , so the BlockAddress would get the address in > front of the call instruction. > > that' why i want to spilt the MachineBasicBlock > > and move out the ”sub rsp“ or ”mov rdi“ to the new mbb before the original > mbb, > > so that i can keep the call instruction as the first instruction of the > MachineBasicBlock. > > so i need to maintain the predecessor of the new mbb, > (because i insert a new mbb “before” the original mbb) > > Nicolai Hähnle <nhaehnle at gmail.com> 於 2020年3月14日 週六 09:18 寫道: > >> 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? >> >> Cheers, >> Nicolai >> >> >> > >> > 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. >> > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200314/56867e34/attachment.html>