xref: /aosp_15_r20/external/llvm/test/Transforms/SimplifyCFG/branch-phi-thread.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -simplifycfg -adce -S | \
2*9880d681SAndroid Build Coastguard Worker; RUN:   not grep "call void @f1"
3*9880d681SAndroid Build Coastguard Worker; END.
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdeclare void @f1()
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdeclare void @f2()
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Workerdeclare void @f3()
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerdeclare void @f4()
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Workerdefine i32 @test1(i32 %X, i1 %D) {
14*9880d681SAndroid Build Coastguard WorkerE:
15*9880d681SAndroid Build Coastguard Worker	%C = icmp eq i32 %X, 0		; <i1> [#uses=2]
16*9880d681SAndroid Build Coastguard Worker	br i1 %C, label %T, label %F
17*9880d681SAndroid Build Coastguard WorkerT:		; preds = %A, %E
18*9880d681SAndroid Build Coastguard Worker	br i1 %C, label %B, label %A
19*9880d681SAndroid Build Coastguard WorkerA:		; preds = %T
20*9880d681SAndroid Build Coastguard Worker	call void @f1( )
21*9880d681SAndroid Build Coastguard Worker	br i1 %D, label %T, label %F
22*9880d681SAndroid Build Coastguard WorkerB:		; preds = %T
23*9880d681SAndroid Build Coastguard Worker	call void @f2( )
24*9880d681SAndroid Build Coastguard Worker	ret i32 345
25*9880d681SAndroid Build Coastguard WorkerF:		; preds = %A, %E
26*9880d681SAndroid Build Coastguard Worker	call void @f3( )
27*9880d681SAndroid Build Coastguard Worker	ret i32 123
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine i32 @test2(i32 %X, i1 %D) {
31*9880d681SAndroid Build Coastguard WorkerE:
32*9880d681SAndroid Build Coastguard Worker	%C = icmp eq i32 %X, 0		; <i1> [#uses=2]
33*9880d681SAndroid Build Coastguard Worker	br i1 %C, label %T, label %F
34*9880d681SAndroid Build Coastguard WorkerT:		; preds = %A, %E
35*9880d681SAndroid Build Coastguard Worker	%P = phi i1 [ true, %E ], [ %C, %A ]		; <i1> [#uses=1]
36*9880d681SAndroid Build Coastguard Worker	br i1 %P, label %B, label %A
37*9880d681SAndroid Build Coastguard WorkerA:		; preds = %T
38*9880d681SAndroid Build Coastguard Worker	call void @f1( )
39*9880d681SAndroid Build Coastguard Worker	br i1 %D, label %T, label %F
40*9880d681SAndroid Build Coastguard WorkerB:		; preds = %T
41*9880d681SAndroid Build Coastguard Worker	call void @f2( )
42*9880d681SAndroid Build Coastguard Worker	ret i32 345
43*9880d681SAndroid Build Coastguard WorkerF:		; preds = %A, %E
44*9880d681SAndroid Build Coastguard Worker	call void @f3( )
45*9880d681SAndroid Build Coastguard Worker	ret i32 123
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerdefine i32 @test3(i32 %X, i1 %D, i32* %AP, i32* %BP) {
49*9880d681SAndroid Build Coastguard WorkerE:
50*9880d681SAndroid Build Coastguard Worker	%C = icmp eq i32 %X, 0		; <i1> [#uses=2]
51*9880d681SAndroid Build Coastguard Worker	br i1 %C, label %T, label %F
52*9880d681SAndroid Build Coastguard WorkerT:		; preds = %A, %E
53*9880d681SAndroid Build Coastguard Worker	call void @f3( )
54*9880d681SAndroid Build Coastguard Worker	%XX = load i32, i32* %AP		; <i32> [#uses=1]
55*9880d681SAndroid Build Coastguard Worker	store i32 %XX, i32* %BP
56*9880d681SAndroid Build Coastguard Worker	br i1 %C, label %B, label %A
57*9880d681SAndroid Build Coastguard WorkerA:		; preds = %T
58*9880d681SAndroid Build Coastguard Worker	call void @f1( )
59*9880d681SAndroid Build Coastguard Worker	br i1 %D, label %T, label %F
60*9880d681SAndroid Build Coastguard WorkerB:		; preds = %T
61*9880d681SAndroid Build Coastguard Worker	call void @f2( )
62*9880d681SAndroid Build Coastguard Worker	ret i32 345
63*9880d681SAndroid Build Coastguard WorkerF:		; preds = %A, %E
64*9880d681SAndroid Build Coastguard Worker	call void @f3( )
65*9880d681SAndroid Build Coastguard Worker	ret i32 123
66*9880d681SAndroid Build Coastguard Worker}
67