[all-commits] [llvm/llvm-project] 4495a6: [BreakCritEdges] Add option to opt-out of perservi...

Florian Hahn via All-commits all-commits at lists.llvm.org
Fri Jun 12 03:47:35 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 4495a6b141ebf55bd1d7de48f3c0920c50cc9a77
      https://github.com/llvm/llvm-project/commit/4495a6b141ebf55bd1d7de48f3c0920c50cc9a77
  Author: Florian Hahn <flo at fhahn.com>
  Date:   2020-06-12 (Fri, 12 Jun 2020)

  Changed paths:
    M llvm/include/llvm/Transforms/Utils/BasicBlockUtils.h
    M llvm/lib/Transforms/Scalar/GVN.cpp
    M llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp
    A llvm/test/Transforms/GVN/critical-edge-split-indbr-pred-in-loop.ll
    M llvm/test/Transforms/GVN/preserve-analysis.ll

  Log Message:
  -----------
  [BreakCritEdges] Add option to opt-out of perserving loop-simplify.

This patch adds a new option to CriticalEdgeSplittingOptions to control
whether loop-simplify form must be preserved. It is them used by GVN to
indicate that loop-simplify form does not have to be preserved.

This fixes a crash exposed by 189efe295b6e.

If the critical edge we are splitting goes from a block inside a loop to
a block outside the loop, splitting the edge will create a new exit
block. As a result, the new block will branch to the original exit
block, which will add a non-loop predecessor, breaking loop-simplify
form. To preserve loop-simplify form, the predecessor blocks of the
original exit are split, but that does not work for blocks with
indirectbr terminators. If preserving loop-simplify form is requested,
bail out , before making any changes.

Reviewers: reames, hfinkel, davide, efriedma

Reviewed By: efriedma

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




More information about the All-commits mailing list