[llvm-dev] An update on the DominatorTree and incremental dominators

Tobias Grosser via llvm-dev llvm-dev at lists.llvm.org
Sat Aug 19 01:57:04 PDT 2017


On Sat, Aug 19, 2017, at 00:58, Jakub (Kuba) Kuderski via llvm-dev
wrote:
> Hi folks,
> 
> Today is the last day of my internship, so here is a short list of
> changes
> to dominators that I committed since the last email:
> 
>    - Infinite loops are now included in the PostDominatorTree.
>    - Incrementally updated DominatorTree and PostDominatorTree are now
>    guaranteed to be the same as freshly recalculated ones.
>    - The low-level incremental API (insertEdge/deleteEdge) is used to
>    update dominators in LoopDeletion and AgressiveDeadCodeElimination.
>    - Support for batch updates (applyUpdates) was introduced to make
>    updating dominators *much* easier. The batch updater landed upstream
>    earlier this week.
>    - The batch updater is now used to preserve dominators in
>    LoopUnswitching, LoopRotation, and BreakCriticalEdges.
> 
> Thank you all for giving me feedback and reviewing my patches, especially
> to Danny, Sanjoy, Davide, Tobias, and Brian. I cannot imagine getting so
> far without your support :).

Dear Kuba,

thanks a lot for all of your hard work! I am very impressive by your
output. The incremental dominator construction in LLVM is indeed a large
step forward. We may not always have agreed on everything, but
independently it was a pleasure to work with you.
As you likely soon fly back to Europe, feel invited to pass by at ETH at
any point.

Best,
Tobias

> 
> Best,
> Kuba
> 
> On Mon, Jul 17, 2017 at 11:24 AM, Jakub (Kuba) Kuderski <
> kubakuderski at gmail.com> wrote:
> 
> > Hi folks,
> >
> > For the past month I’ve been working on improving the DominatorTree and
> > PostDominatorTree in LLVM. The RFC that explains the motivations and plans
> > can be found here: http://lists.llvm.org/pipermail/llvm-dev/2017-June/
> > 114045.html .
> >
> > Here’s a short summary of what changed upstream since posting it:
> >
> >    -
> >
> >    We switched from the Simple Lengauer-Tarjan algorithm for computing
> >    dominators to Semi-NCA, which is a bit faster in most cases. Although it is
> >    possible to construct a CFG that triggers the pathological quadratic
> >    complexity of Semi-NCA, we weren’t able to observe it in practice.
> >    -
> >
> >    DomTreeNodes now automatically store their level (depth) in the tree,
> >    which is always up-to-date. This is used for fast nearest common dominator
> >    computation and for building iterated dominance frontier. You can get it by
> >    calling .getLevel() on a DomTreeNode.
> >    -
> >
> >    We have a new set of verifiers that are able to prove or disprove
> >    correctness of a DomTree -- you can explicitly do it by calling
> >    DT.verify(). The check has a disadvantage of being quite slow (O(n^3)), so
> >    the legacy DT.verifyDominatorTree() uses it only when
> >    ENABLE_EXPENSIVE_CHECK is enabled, or when the -verify-dom-info command
> >    line option is set to 1. Some of the transforms assume that calling
> >    DT.verifyDomTree() is fast, so we cannot turn it on by default.
> >    -
> >
> >    Dominators and Postdominators are now different types, i.e. IsPostDom
> >    is a template argument and not a runtime value. It is no longer possible to
> >    assign a PostDomTree to a DomTree (or the other way round).
> >
> >
> > And now the big thing: support for incremental updates (insertEdge and
> > deleteEdge) has just landed upstream. This should make updating
> > DominatorTree much easier and less error-prone.
> > Although he API is quite basic at the moment, it should be sufficient to
> > replace manual DomTree updates in many places. Please give the new
> > incremental API a try and share your feedback :).
> >
> > During the remaining 5 weeks of my internship at Google, I plan to make a
> > few transforms use the new incremental API, further improve
> > PostDominatorTree by making it always have a virtual root, and to
> > investigate batch updates. After that I would like to continue maintaining
> > dominators, but I won’t be able spend as much time on it as I do now.
> >
> > Best,
> > Kuba
> >
> >
> 
> 
> -- 
> Jakub Kuderski
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


More information about the llvm-dev mailing list