HomePhabricator

[SCCP] Directly remove non-feasible edges

Authored by nikic on Tue, Jul 21, 12:26 PM.

Description

[SCCP] Directly remove non-feasible edges

Non-feasible control-flow edges are currently removed by replacing
the branch condition with a constant and then calling
ConstantFoldTerminator. This happens in a rather roundabout manner,
by inspecting the users (effectively: predecessors) of unreachable
blocks, and further complicated by the need to explicitly materialize
the condition for "forced" edges. I would like to extend SCCP to
discard switch conditions that are non-feasible based on range
information, but this is incompatible with the current approach
(as there is no single constant we could use.)

Instead, this patch explicitly removes non-feasible edges. It
currently only needs to handle the case where there is a single
feasible edge. The llvm_unreachable() branch will need to be
implemented for the aforementioned switch improvement.

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

Details

Committed
nikicThu, Jul 23, 11:32 AM
Differential Revision
D84264: [SCCP] Directly remove non-feasible edges
Parents
rGd2b8fcff3446: AMDGPU/GlobalISel: Handle call return values
Branches
Unknown
Tags
Unknown