[all-commits] [llvm/llvm-project] ad16e7: Reapply [SCCP] Directly remove non-feasible edges

Nikita Popov via All-commits all-commits at lists.llvm.org
Sat Jul 25 05:55:59 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: ad16e71c953c92dbb4ffe9581c4e31a4cde70ccf
      https://github.com/llvm/llvm-project/commit/ad16e71c953c92dbb4ffe9581c4e31a4cde70ccf
  Author: Nikita Popov <nikita.ppv at gmail.com>
  Date:   2020-07-25 (Sat, 25 Jul 2020)

  Changed paths:
    M llvm/lib/Transforms/Scalar/SCCP.cpp
    M llvm/test/Transforms/SCCP/conditions-ranges.ll
    A llvm/test/Transforms/SCCP/domtree-update.ll
    M llvm/test/Transforms/SCCP/predicateinfo-cond.ll
    M llvm/test/Transforms/SCCP/resolvedundefsin-tracked-fn.ll
    M llvm/test/Transforms/SCCP/switch-constantfold-crash.ll
    M llvm/test/Transforms/SCCP/switch.ll
    M llvm/test/Transforms/SCCP/widening.ll

  Log Message:
  -----------
  Reapply [SCCP] Directly remove non-feasible edges

Reapply with DTU update moved after CFG update, which is a
requirement of the API.

-----

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




More information about the All-commits mailing list