[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