1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 11:13:28 +01:00
llvm-mirror/test/Transforms/ADCE/domtree-DoubleDeletion.ll
Jakub Kuderski 8ac12d00ab [ADCE][Dominators] Reapply: Teach ADCE to preserve dominators
Summary:
This patch teaches ADCE to preserve both DominatorTrees and PostDominatorTrees.

This is reapplies the original patch r311057 that was reverted in r311381.
The previous version wasn't using the batch update api for updating dominators,
which in vary rare cases caused assertion failures.

This also fixes PR34258.

Reviewers: dberlin, chandlerc, sanjoy, davide, grosser, brzycki

Reviewed By: davide

Subscribers: grandinj, zhendongsu, llvm-commits, david2050

Differential Revision: https://reviews.llvm.org/D35869

llvm-svn: 311467
2017-08-22 16:30:21 +00:00

40 lines
1.3 KiB
LLVM

; RUN: opt < %s -gvn -simplifycfg -adce | llvm-dis
; RUN: opt < %s -gvn -simplifycfg -adce -verify-dom-info | llvm-dis
; This test makes sure that the DominatorTree properly handles
; deletion of edges that go to forward-unreachable regions.
; In this case, %land.end is already forward unreachable when
; the DT gets informed about the deletion of %entry -> %land.end.
@a = common global i32 0, align 4
define i32 @main() {
entry:
%retval = alloca i32, align 4
store i32 0, i32* %retval, align 4
%0 = load i32, i32* @a, align 4
%cmp = icmp ne i32 %0, 1
br i1 %cmp, label %land.rhs, label %land.end4
land.rhs: ; preds = %entry
%1 = load i32, i32* @a, align 4
%tobool = icmp ne i32 %1, 0
br i1 %tobool, label %land.rhs1, label %land.end
land.rhs1: ; preds = %land.rhs
br label %land.end
land.end: ; preds = %land.rhs1, %land.rhs
%2 = phi i1 [ false, %land.rhs ], [ true, %land.rhs1 ]
%land.ext = zext i1 %2 to i32
%conv = trunc i32 %land.ext to i16
%conv2 = sext i16 %conv to i32
%tobool3 = icmp ne i32 %conv2, 0
br label %land.end4
land.end4: ; preds = %land.end, %entry
%3 = phi i1 [ false, %entry ], [ %tobool3, %land.end ]
%land.ext5 = zext i1 %3 to i32
ret i32 0
}