llvm-project/llvm/test/Transforms/LowerSwitch
Ruiling Song 1e01f95057 LowerSwitch: Avoid inserting NewDefault block
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
2022-04-14 13:30:56 +08:00
..
2003-05-01-PHIProblem.ll
2003-08-23-EmptySwitch.ll
2004-03-13-SwitchIsDefaultCrash.ll
2014-06-10-SwitchContiguousOpt.ll
2014-06-11-SwitchDefaultUnreachableOpt.ll
2014-06-23-PHIlowering.ll
condition-phi-unreachable-default.ll
delete-default-block-crash.ll
do-not-handle-impossible-values.ll
feature.ll
fold-popular-case-to-unreachable-default.ll
phi-in-dead-block.ll