Reappl "[Dominators] Add the DomTreeUpdater class"
authorJakub Kuderski <kubakuderski@gmail.com>
Tue, 3 Jul 2018 02:06:23 +0000 (02:06 +0000)
committerJakub Kuderski <kubakuderski@gmail.com>
Tue, 3 Jul 2018 02:06:23 +0000 (02:06 +0000)
commit5e3ab7a9405a104c23212024f071162d4a9ab465
treec9e881d825d3244d3d9afab518c19098f9f1976b
parent988a16af929ece9453622ea256911cdfdf079d47
Reappl "[Dominators] Add the DomTreeUpdater class"

Summary:
This patch is the first in a series of patches related to the [[ http://lists.llvm.org/pipermail/llvm-dev/2018-June/123883.html | RFC - A new dominator tree updater for LLVM ]].

This patch introduces the DomTreeUpdater class, which provides a cleaner API to perform updates on available dominator trees (none, only DomTree, only PostDomTree, both) using different update strategies (eagerly or lazily) to simplify the updating process.

—Prior to the patch—

   - Directly calling update functions of DominatorTree updates the data structure eagerly while DeferredDominance does updates lazily.
   - DeferredDominance class cannot be used when a PostDominatorTree also needs to be updated.
   - Functions receiving DT/DDT need to branch a lot which is currently necessary.
   - Functions using both DomTree and PostDomTree need to call the update function separately on both trees.
   - People need to construct an additional DeferredDominance class to use functions only receiving DDT.

—After the patch—

Patch by Chijun Sima <simachijun@gmail.com>.

Reviewers: kuhar, brzycki, dmgreen, grosser, davide

Reviewed By: kuhar, brzycki

Author: NutshellySima

Subscribers: vsk, mgorny, llvm-commits

Differential Revision: https://reviews.llvm.org/D48383

llvm-svn: 336163
llvm/include/llvm/IR/DomTreeUpdater.h [new file with mode: 0644]
llvm/include/llvm/module.modulemap
llvm/lib/IR/CMakeLists.txt
llvm/lib/IR/DomTreeUpdater.cpp [new file with mode: 0644]
llvm/unittests/IR/CMakeLists.txt
llvm/unittests/IR/DomTreeUpdaterTest.cpp [new file with mode: 0644]