[llvm-dev] How to simply split MachineBasicBlock ?

Craig Topper via llvm-dev llvm-dev at lists.llvm.org
Thu Mar 12 23:35:49 PDT 2020


Did you transfer the successors of BB1 to BB2 and add BB2 as a successor of
BB1? This note in code you referenced refers to that "NOTE: Successor list
of the original BB is out of date after this function, and must be updated
by the caller!"

See this code in ARMConstantIslands::splitBlockBeforeInstr

  // Update the CFG.  All succs of OrigBB are now succs of NewBB.
  NewBB->transferSuccessors(OrigBB);

  // OrigBB branches to NewBB.
  OrigBB->addSuccessor(NewBB);



~Craig


On Thu, Mar 12, 2020 at 10:20 PM PenYiWang via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> Hi
>
> I am developing some machine function pass.
>
> I want to split MachineBasicBlcok when I find some specific machine
> instruction.
>
> But I don't insert or delete any machine instruction.
>
> I just "simply" , "purely" split the MachineBasicBlcok.
>
> (So, I stole the idea from ARM64BranchRelaxation::splitBlockBeforeInstr.)
>
> This is my code :
>
> // I would pass call instruction to this function
>
> void split_mbb(MachineInstr* mi){
>   MachineBasicBlock* mbb=mi->getParent();
>   MachineFunction* mf=mbb->getParent();
>   MachineBasicBlock*
> new_mbb=mf->CreateMachineBasicBlock(mbb->getBasicBlock());
>
>   MachineFunction::iterator mbb_it(mbb);
>   mf->insert(mbb_it,new_mbb);
>   new_mbb->splice(new_mbb->end(),mbb,mbb->begin(),mi);
> }
>
> Originally, mi is in BB.
> (mi would be a call instruction)
> (do not consider mi is a branch instruction)
> BB --> BB1 , BB2
> Then, I split BB, mi is the first instruction of BB2.
> And the instructions before mi are in BB1.
>
> But now, I use  my machine function pass to compile some test programs.
>
> And these test programs can't execute ,  always segment fault.
>
> Is there any problem in my split_mbb ?
>
> How to "simply" split MachineBasicBlock ?
>
> Thank you !!
>
>
> _______________________________________________
> 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/20200312/4317f3ee/attachment.html>


More information about the llvm-dev mailing list