forked from OSchip/llvm-project
![]() StructurizeCFG linearizes the successors of branching basic block by adding Flow blocks to record the true/false path for branches and back edges. This patch reduces the number of Phi values needed to capture the control flow path by improving the basic block ordering. Previously, StructurizeCFG adds loop exit blocks outside of the loop. StructurizeCFG sets a boolean value to indicate the path taken, and all exit block live values extend to after the loop. For loops with a large number of exits blocks, this creates a huge number of values that are maintained, which increases compilation time and register pressure. This is problem especially with ASAN, which adds early exits to blocks with unreachable instructions for each instrumented check in the loop. In specific cases, this patch reduces the number of values needed after the loop by moving the exit block into the loop. This is done for blocks that have a single predecessor and single successor by moving the block to appear just after the predecessor. Differential Revision: https://reviews.llvm.org/D123231 |
||
---|---|---|
.. | ||
AMDGPU | ||
workarounds | ||
branch-on-argument.ll | ||
bug36015.ll | ||
improve-order.ll | ||
interleaved-loop-order.ll | ||
invert-condition.ll | ||
invert-constantexpr.ll | ||
loop-continue-phi.ll | ||
loop-multiple-exits.ll | ||
nested-loop-order.ll | ||
nested-loop-subregion.ll | ||
no-branch-to-entry.ll | ||
one-loop-multiple-backedges.ll | ||
post-order-traversal-bug.ll | ||
rebuild-ssa-infinite-loop-inseltpoison.ll | ||
rebuild-ssa-infinite-loop.ll | ||
switch.ll |