summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Doerfert <johannes@jdoerfert.de>2019-10-30 17:34:59 -0500
committerJohannes Doerfert <johannes@jdoerfert.de>2019-10-31 00:09:50 -0500
commit5e442a51bce73f3e69eef022674acfb28224619d (patch)
tree8e6f4f773c5019fb64b7449b167fea9b9806d3dd
parentfe799c97fae0729e5952c6a8edf41e67bf60048f (diff)
downloadbcm5719-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.cpp9
-rw-r--r--llvm/test/Transforms/FunctionAttrs/liveness.ll3
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 }
OpenPOWER on IntegriCloud