[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`
(2) add the same interfaces in VPBlockBase as simple wrappers over existing
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
(1) part 1: D75881 <https://reviews.llvm.org/D75881>: Introducing class
(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.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev