[llvm-dev] RFC: Making a common successor/predecessor interface

Alina Sbirlea via llvm-dev llvm-dev at lists.llvm.org
Mon Mar 9 15:56:57 PDT 2020


As part of an ongoing work to extend the GraphDiff (this models a CFG
view), I came across the need to have a common interface for accessing
successors/predecessors in various IR units, such that a type such as
`typename NodeT::succ_iterator` could be used in templated code.
In particular, the need arose for BasicBlocks, MachineBasicBlocks,
VPBlockBase and clang::CFGBlock.

The least invasive change seemed to be to use the interface already being
used in MachineBasicBlock and clang::CFGBlock, and:
(1) update BasicBlock to use this instead of the "global" `succ_iterator`
in IR/CFG.h
(2) add the same interfaces in VPBlockBase as simple wrappers over existing
Successors/Predecessors vectors.

I've been working on a few patches to make this happen, but I'd like the
community's thoughts on this before deep-diving into code reviews.

For some concrete view of what the changes look like, I uploaded two
preliminary patches:
(1) part 1: D75881 <https://reviews.llvm.org/D75881>: Introducing class
specific iterators
(2) D75882 <https://reviews.llvm.org/D75882>
(1) part 2: pending: Cleaning up existing usages; example replacement:
`succ_begin(BB)` with `BB->succ_begin()`.
(1) part3/4: pending: Add class specific iterators to `Instruction` and
clean up existing usages just as for `BasicBlock`.

I split the above (1) just to clarify what interfaces are added versus the
NFC cleanups that follow. But it could be done just as well in a single

I welcome comments on this, and if there's something I missed explaining
please let me know.

Thank you,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200309/6db992a7/attachment.html>

More information about the llvm-dev mailing list