diff options
| author | Serguei Katkov <serguei.katkov@azul.com> | 2018-02-05 09:05:43 +0000 |
|---|---|---|
| committer | Serguei Katkov <serguei.katkov@azul.com> | 2018-02-05 09:05:43 +0000 |
| commit | 276b32bb14eb1a7413af7b73bc0805799c67c75e (patch) | |
| tree | 4bd47857e12645aacde69122b0dca7d3f9042874 | |
| parent | 5a2bd99a9e0cb63a44c27c881341ea347ae0fe38 (diff) | |
| download | bcm5719-llvm-276b32bb14eb1a7413af7b73bc0805799c67c75e.tar.gz bcm5719-llvm-276b32bb14eb1a7413af7b73bc0805799c67c75e.zip | |
Revert [SimplifyCFG] Relax restriction for folding unconditional branches
The patch causes the failure of the test
compiler-rt/test/profile/Linux/counter_promo_nest.c
To unblock buildbot, revert the patch while investigation is in progress.
Differential Revision: https://reviews.llvm.org/D42691
llvm-svn: 324214
5 files changed, 13 insertions, 29 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index bcea927925b..c3343ed8ecc 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -5733,12 +5733,9 @@ bool SimplifyCFGOpt::SimplifyUncondBranch(BranchInst *BI, // header. (This is for early invocations before loop simplify and // vectorization to keep canonical loop forms for nested loops. These blocks // can be eliminated when the pass is invoked later in the back-end.) - // Note that if BB has only one predecessor then we do not introduce new - // backedge, so we can eliminate BB. bool NeedCanonicalLoop = Options.NeedCanonicalLoop && - (LoopHeaders && !BB->getSinglePredecessor() && - (LoopHeaders->count(BB) || LoopHeaders->count(Succ))); + (LoopHeaders && (LoopHeaders->count(BB) || LoopHeaders->count(Succ))); BasicBlock::iterator I = BB->getFirstNonPHIOrDbg()->getIterator(); if (I->isTerminator() && BB != &BB->getParent()->getEntryBlock() && !NeedCanonicalLoop && TryToSimplifyUncondBranchFromEmptyBlock(BB)) diff --git a/llvm/test/Transforms/LoopUnroll/peel-loop.ll b/llvm/test/Transforms/LoopUnroll/peel-loop.ll index 55e818244a7..3f7c64d8154 100644 --- a/llvm/test/Transforms/LoopUnroll/peel-loop.ll +++ b/llvm/test/Transforms/LoopUnroll/peel-loop.ll @@ -19,8 +19,10 @@ ; CHECK: store i32 2, i32* %[[INC2]], align 4 ; CHECK: %[[CMP3:.*]] = icmp eq i32 %k, 3 ; CHECK: br i1 %[[CMP3]], label %for.end, label %[[LOOP_PH:.*]] -; CHECK: for.end: -; CHECK: ret void +; CHECK: [[LOOP_PH]]: +; CHECK: br label %[[LOOP:.*]] +; CHECK: [[LOOP]]: +; CHECK: %[[IV:.*]] = phi i32 [ 3, %[[LOOP_PH]] ], [ {{.*}}, %[[LOOP]] ] define void @basic(i32* %p, i32 %k) #0 { entry: @@ -66,8 +68,11 @@ for.end: ; preds = %for.cond.for.end_cr ; CHECK: store i32 2, i32* %[[INC2]], align 4 ; CHECK: %[[CMP3:.*]] = icmp eq i32 %k, 3 ; CHECK: br i1 %[[CMP3]], label %for.end, label %[[LOOP_PH:.*]] -; CHECK: for.end: -; CHECK: %ret = phi i32 [ 0, %entry ], [ 1, %[[NEXT0]] ], [ 2, %[[NEXT1]] ], [ 3, %[[NEXT2]] ], [ %inc, %for.body ] +; CHECK: [[LOOP_PH]]: +; CHECK: br label %[[LOOP:.*]] +; CHECK: [[LOOP]]: +; CHECK: %[[IV:.*]] = phi i32 [ 3, %[[LOOP_PH]] ], [ %[[IV:.*]], %[[LOOP]] ] +; CHECK: %ret = phi i32 [ 0, %entry ], [ 1, %[[NEXT0]] ], [ 2, %[[NEXT1]] ], [ 3, %[[NEXT2]] ], [ %[[IV]], %[[LOOP]] ] ; CHECK: ret i32 %ret define i32 @output(i32* %p, i32 %k) #0 { entry: diff --git a/llvm/test/Transforms/LoopUnswitch/2015-06-17-Metadata.ll b/llvm/test/Transforms/LoopUnswitch/2015-06-17-Metadata.ll index a215be9d487..8652829bc51 100644 --- a/llvm/test/Transforms/LoopUnswitch/2015-06-17-Metadata.ll +++ b/llvm/test/Transforms/LoopUnswitch/2015-06-17-Metadata.ll @@ -16,7 +16,7 @@ for.body: ; preds = %for.inc, %for.body. %cmp1 = icmp eq i32 %a, 12345 br i1 %cmp1, label %if.then, label %if.else, !prof !0 ; CHECK: %cmp1 = icmp eq i32 %a, 12345 -; CHECK-NEXT: br i1 %cmp1, label %for.body.us, label %for.body, !prof !0 +; CHECK-NEXT: br i1 %cmp1, label %for.body.preheader.split.us, label %for.body.preheader.split, !prof !0 if.then: ; preds = %for.body ; CHECK: for.body.us: ; CHECK: add nsw i32 %{{.*}}, 123 @@ -53,7 +53,7 @@ entry: br label %for.body ;CHECK: entry: ;CHECK-NEXT: %cmp1 = icmp eq i32 1, 2 -;CHECK-NEXT: br i1 %cmp1, label %for.body, label %for.cond.cleanup.split, !prof !1 +;CHECK-NEXT: br i1 %cmp1, label %entry.split, label %for.cond.cleanup.split, !prof !1 ;CHECK: for.body: for.body: ; preds = %for.inc, %entry %inc.i = phi i32 [ 0, %entry ], [ %inc, %if.then ] diff --git a/llvm/test/Transforms/LoopUnswitch/infinite-loop.ll b/llvm/test/Transforms/LoopUnswitch/infinite-loop.ll index 013355faf35..af8725b02a1 100644 --- a/llvm/test/Transforms/LoopUnswitch/infinite-loop.ll +++ b/llvm/test/Transforms/LoopUnswitch/infinite-loop.ll @@ -16,7 +16,7 @@ ; CHECK-NEXT: br i1 %a, label %entry.split, label %abort0.split ; CHECK: entry.split: -; CHECK-NEXT: br i1 %b, label %for.body, label %abort1.split +; CHECK-NEXT: br i1 %b, label %entry.split.split, label %abort1.split ; CHECK: for.body: ; CHECK-NEXT: br label %for.body diff --git a/llvm/test/Transforms/SimplifyCFG/UncondBranchToHeader.ll b/llvm/test/Transforms/SimplifyCFG/UncondBranchToHeader.ll deleted file mode 100644 index 6a265539e75..00000000000 --- a/llvm/test/Transforms/SimplifyCFG/UncondBranchToHeader.ll +++ /dev/null @@ -1,18 +0,0 @@ -; RUN: opt < %s -simplifycfg -S | FileCheck %s - -; Check that we can get rid of empty block leading to header -; if it does not introduce new edge. -define i32 @test(i32 %c) { -entry: - br label %header -header: - %i = phi i32 [0, %entry], [%i.1, %backedge] - %i.1 = add i32 %i, 1 - %cmp = icmp slt i32 %i.1, %c - br i1 %cmp, label %backedge, label %exit -; CHECK-NOT: backedge: -backedge: - br label %header -exit: - ret i32 %i -} |

