diff options
| author | Johannes Doerfert <johannes@jdoerfert.de> | 2019-10-30 17:34:59 -0500 |
|---|---|---|
| committer | Johannes Doerfert <johannes@jdoerfert.de> | 2019-10-31 00:09:50 -0500 |
| commit | 5e442a51bce73f3e69eef022674acfb28224619d (patch) | |
| tree | 8e6f4f773c5019fb64b7449b167fea9b9806d3dd | |
| parent | fe799c97fae0729e5952c6a8edf41e67bf60048f (diff) | |
| download | bcm5719-llvm-5e442a51bce73f3e69eef022674acfb28224619d.tar.gz bcm5719-llvm-5e442a51bce73f3e69eef022674acfb28224619d.zip | |
[Attributor][NFC] Do not delete dead blocks but "clear" them
Deleting blocks will require us to deal with dead edges, e.g.,
`br i1 false, label %live, label %dead`
explicitly. For now we just clear the blocks and move on.
This will be revisited once we actually fold branches.
| -rw-r--r-- | llvm/lib/Transforms/IPO/Attributor.cpp | 9 | ||||
| -rw-r--r-- | llvm/test/Transforms/FunctionAttrs/liveness.ll | 3 |
2 files changed, 6 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp index 11a4939da78..129eb197674 100644 --- a/llvm/lib/Transforms/IPO/Attributor.cpp +++ b/llvm/lib/Transforms/IPO/Attributor.cpp @@ -4644,9 +4644,12 @@ ChangeStatus Attributor::run(Module &M) { SmallVector<BasicBlock *, 8> ToBeDeletedBBs; ToBeDeletedBBs.reserve(NumDeadBlocks); ToBeDeletedBBs.append(ToBeDeletedBlocks.begin(), ToBeDeletedBlocks.end()); - DeleteDeadBlocks(ToBeDeletedBBs); - STATS_DECLTRACK(AAIsDead, BasicBlock, - "Number of dead basic blocks deleted."); + // Actually we do not delete the blocks but squash them into a single + // unreachable but untangling branches that jump here is something we need + // to do in a more generic way. + DetatchDeadBlocks(ToBeDeletedBBs, nullptr); + STATS_DECL(AAIsDead, BasicBlock, "Number of dead basic blocks deleted."); + BUILD_STAT_NAME(AAIsDead, BasicBlock) += ToBeDeletedBlocks.size(); } STATS_DECL(AAIsDead, Function, "Number of dead functions deleted."); diff --git a/llvm/test/Transforms/FunctionAttrs/liveness.ll b/llvm/test/Transforms/FunctionAttrs/liveness.ll index e1bcb31d288..f029f9476b7 100644 --- a/llvm/test/Transforms/FunctionAttrs/liveness.ll +++ b/llvm/test/Transforms/FunctionAttrs/liveness.ll @@ -56,7 +56,6 @@ entry: call void @no_return_call() ; CHECK: call void @no_return_call() ; CHECK-NEXT: unreachable - ; CHECK-NEXT: } call i32 @dead_internal_func(i32 10) %cmp = icmp eq i32 %a, 0 br i1 %cmp, label %cond.true, label %cond.false @@ -130,7 +129,6 @@ cond.false: ; preds = %entry ; CHECK: call void @no_return_call() ; CHECK-NEXT: unreachable call i32 @dead_internal_func(i32 10) - ; CHECK-NEXT: } %call1 = call i32 @bar() br label %cond.end @@ -526,7 +524,6 @@ define linkonce_odr void @non_exact3() { ; CHECK-NEXT: call void @non_dead_d15() ; CHECK-NEXT: %nr = call i32 @foo_noreturn() ; CHECK-NEXT: unreachable -; CHECK-NEXT: } define internal void @non_dead_a0() { ret void } define internal void @non_dead_a1() { ret void } |

