[PATCH] D50302: [WIP!][Dominators] A new Auto UpdateStrategy to test the impact of passes preserving DomTree

Chijun Sima via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 5 03:40:07 PDT 2018


NutshellySima created this revision.
NutshellySima added a reviewer: kuhar.
Herald added subscribers: llvm-commits, mgrang, JDevlieghere.

> This patch is a work-in-process and I don't intend to commit it.

The Auto UpdateStrategy in this patch gets a *full* snapshot every time it is going to apply updates to the DominatorTree and it also needs to snapshot the Function every time a `DomTreeUpdater` is constructed.

This patch is at first a approach to solve the problems in the current `DomTreeUpdater` and `JumpThreading` pass. (We need to figure out the previous state of the CFG when we call `applyUpdates()/insertEdge()/deleteEdge()` or we need to concern about the internal state of the `DomTreeUpdater`.) It shows a similar performance most of the times on bitcode files with the current `DomTreeUpdater` working under Lazy UpdateStrategy after converting `CorrelatedValuePropagation/RewriteStatepointsForGC/JumpThreading` and testing under the `-O3` pipeline. But it also suffers a performance degradation sometimes which is caused by 1. the `LazyValueInfo` relies on whether the `DominatorTree` is up to date to perform queries and the new Auto UpdateStrategy reports up-to-date less than the Lazy UpdateStrategy (this issue needs to inspect further); 2. some Function contains a lot of BasicBlock which causes snapshotting really slow. (we can use some other compilers like `rustc` which emits a lot of BasicBlocks to test it).

Due to the drawbacks above, now this patch is proposed to be a util for developers to inspect whether it is profitable to make a pass preserving the DominatorTree, for example, the `SimplifyCFG` pass, or some other complicated new passes. It is easy to test it out combining with https://reviews.llvm.org/D50300 and you only need to deal with BasicBlock deletions.


Repository:
  rL LLVM

https://reviews.llvm.org/D50302

Files:
  include/llvm/IR/DomTreeUpdater.h
  lib/IR/DomTreeUpdater.cpp
  unittests/IR/DomTreeUpdaterTest.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50302.159204.patch
Type: text/x-patch
Size: 12854 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180805/3bb53aff/attachment.bin>


More information about the llvm-commits mailing list