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

Nicolai Hähnle via llvm-dev llvm-dev at lists.llvm.org
Tue Mar 10 02:23:32 PDT 2020

On Mon, Mar 9, 2020 at 11:57 PM Alina Sbirlea via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> 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.

Have you considered going the other way and implementing
succ_begin/end for MachineBasicBlock and others?


> 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: Introducing class specific iterators
> (2) 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 patch.
> I welcome comments on this, and if there's something I missed explaining please let me know.
> Thank you,
> Alina
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

Lerne, wie die Welt wirklich ist,
aber vergiss niemals, wie sie sein sollte.

More information about the llvm-dev mailing list