[SimplifyCFG] Relax restriction for folding unconditional branches
authorSerguei Katkov <serguei.katkov@azul.com>
Mon, 5 Feb 2018 07:56:43 +0000 (07:56 +0000)
committerSerguei Katkov <serguei.katkov@azul.com>
Mon, 5 Feb 2018 07:56:43 +0000 (07:56 +0000)
commit6e93980e8251213269aa3e314036d933e77e6f33
tree1179dbb21653d6b076ef6a3ab126625dd514642f
parent6ff5eb5dd51e63f0244a3ec7fab76a9a7595659d
[SimplifyCFG] Relax restriction for folding unconditional branches

The commit rL308422 introduces a restriction for folding unconditional
branches. Specifically if empty block with unconditional branch leads to
header of the loop then elimination of this basic block is prohibited.
However it seems this condition is redundantly strict.
If elimination of this basic block does not introduce more back edges
then we can eliminate this block.

The patch implements this relax of restriction.

Reviewers: efriedma, mcrosier, pacxx, hsung, davidxl
Reviewed By: pacxx
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D42691

llvm-svn: 324208
llvm/lib/Transforms/Utils/SimplifyCFG.cpp
llvm/test/Transforms/LoopUnroll/peel-loop.ll
llvm/test/Transforms/LoopUnswitch/2015-06-17-Metadata.ll
llvm/test/Transforms/LoopUnswitch/infinite-loop.ll
llvm/test/Transforms/SimplifyCFG/UncondBranchToHeader.ll [new file with mode: 0644]