The NewDefault was used to simplify the updating of PHI nodes, but it
causes some inefficiency for target that will run structurizer later. For
example, for a simple two-case switch, the extra NewDefault is causing
unstructured CFG like:
O
/ \
O O
/ \ / \
C1 ND C2
\ | /
\ | /
D
The change is to avoid the ND(NewDefault) block, that is we will get a
structured CFG for above example like:
O
/ \
/ \
O O
/ \ / \
C1 \ / C2
\-> D <-/
The IR change introduced by this patch should be trivial to other targets,
so I am doing this unconditionally.
Fall-through among the cases will also cause unstructured CFG, but it need
more work and will be addressed in a separate change.
Reviewed by: arsenm
Differential Revision: https://reviews.llvm.org/D123607
|
||
|---|---|---|
| .. | ||
| AMDGPU | ||
| workarounds | ||
| branch-on-argument.ll | ||
| bug36015.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 | ||