[llvm-dev] is a MachineBasicBlock a kind of superblock?

Finkel, Hal J. via llvm-dev llvm-dev at lists.llvm.org
Sat Jul 11 12:21:14 PDT 2020


Hi, Chris,

As I think about it, no, MBBs are not superblocks. The important part here is that semantically, while we may need multiple instructions at the end of the block in order to encode the branches to the various successors, we don't have other code in between these various terminators. There's an ordering: PHIs, then other things, then terminators. Regarding tail duplication, etc. the thing to realize is that, past a certain point in the pipeline, the blocks' layout order is significant and blocks have implicit fallthrough branches. We still maintain separate blocks, however.

 -Hal

Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory

________________________________
From: llvm-dev <llvm-dev-bounces at lists.llvm.org> on behalf of Chris Sears via llvm-dev <llvm-dev at lists.llvm.org>
Sent: Saturday, July 11, 2020 1:41 PM
To: llvm-dev at lists.llvm.org <llvm-dev at lists.llvm.org>
Subject: [llvm-dev] is a MachineBasicBlock a kind of superblock?

MachineBasicBlock allows for multiple terminators. Unconditional branches and returns are marked as terminators; the MIPS backend also marks conditional branches as terminators. The MachineBasicBlock then has a helper function getFirstTerminator which iterates from the first terminator to the end of the MBB.

So it seems to me that an MBB is a kind of superblock, single entrance and multiple side exits. There are also TailDuplication and BranchFolding passes. While these two are technically not part of the superblock definition, they are usually part of a superblock implementation because you want a superblock to be as big as possible.

Of course, you could make a big superblock in the CFG and then tile it down into basic MBBs. But the only reason that I can think of for that would be codegen simplicity and with GlobalISel, I would think that would no longer be the case.

Anyways, am I getting this right? If so, is there any way to control the creation of these superblocks, that is, which basic blocks from the CFG go into a given MBB?

I'm still in the MC layer, so I really don't know where in the MI layer this sort of tiling of the CFG is done. (In a full blown superblock formation that tiling would be a profile driven decision for finding the hot trace.)

It's always good to just look at things. So I want to just display some MBBs for some code for some backend at preEmit and just look at what they look like. Any suggestions for that will be appreciated.

thanks,

Chris

BTW, this is at the MI-MC interface. The IR BasicBlock is a completely different issue.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200711/eb6fd1ca/attachment.html>


More information about the llvm-dev mailing list