Skip to content

Commit 2229674

Browse files
committed
[ConstraintElimination] Add additional tests with uncond branches.
1 parent 09a2b5b commit 2229674

File tree

2 files changed

+85
-2
lines changed

2 files changed

+85
-2
lines changed

llvm/test/Transforms/ConstraintElimination/assumes.ll

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,28 @@ exit:
180180
ret i1 %c.2
181181
}
182182

183+
define i1 @assume_dominates_successor_with_may_unwind_call_before_assume_uncond_branch(i16 %a) {
184+
; CHECK-LABEL: @assume_dominates_successor_with_may_unwind_call_before_assume_uncond_branch(
185+
; CHECK-NEXT: entry:
186+
; CHECK-NEXT: call void @may_unwind()
187+
; CHECK-NEXT: [[C_1:%.*]] = icmp eq i16 [[A:%.*]], 0
188+
; CHECK-NEXT: call void @llvm.assume(i1 [[C_1]])
189+
; CHECK-NEXT: br label [[EXIT:%.*]]
190+
; CHECK: exit:
191+
; CHECK-NEXT: [[C_2:%.*]] = icmp eq i16 [[A]], 0
192+
; CHECK-NEXT: ret i1 [[C_2]]
193+
;
194+
entry:
195+
call void @may_unwind()
196+
%c.1 = icmp eq i16 %a, 0
197+
call void @llvm.assume(i1 %c.1)
198+
br label %exit
199+
200+
exit:
201+
%c.2 = icmp eq i16 %a, 0
202+
ret i1 %c.2
203+
}
204+
183205
define i1 @assume_single_bb(i8 %a, i8 %b, i1 %c) {
184206
; CHECK-LABEL: @assume_single_bb(
185207
; CHECK-NEXT: [[ADD_1:%.*]] = add nuw nsw i8 [[A:%.*]], 1
@@ -517,4 +539,3 @@ define i1 @all_uses_after_assume(i8 %a, i8 %b, i1 %c) {
517539
%res.2 = xor i1 %res.1, %c.2
518540
ret i1 %res.2
519541
}
520-

llvm/test/Transforms/ConstraintElimination/dom.ll

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,69 @@ bb2:
3333
ret i1 %c.3
3434
}
3535

36+
define i1 @test_chain_1(i8 %x) {
37+
; CHECK-LABEL: @test_chain_1(
38+
; CHECK-NEXT: entry:
39+
; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X:%.*]], 10
40+
; CHECK-NEXT: br i1 [[C_1]], label [[THEN:%.*]], label [[ELSE:%.*]]
41+
; CHECK: then:
42+
; CHECK-NEXT: [[C_2:%.*]] = icmp ule i8 [[X]], 10
43+
; CHECK-NEXT: call void @use(i1 true)
44+
; CHECK-NEXT: br label [[EXIT:%.*]]
45+
; CHECK: else:
46+
; CHECK-NEXT: br label [[EXIT]]
47+
; CHECK: exit:
48+
; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i8 [[X]], 10
49+
; CHECK-NEXT: ret i1 [[C_3]]
50+
;
51+
entry:
52+
%c.1 = icmp ule i8 %x, 10
53+
br i1 %c.1, label %then, label %else
54+
55+
then:
56+
%c.2 = icmp ule i8 %x, 10
57+
call void @use(i1 %c.2)
58+
br label %exit
59+
60+
else:
61+
br label %exit
62+
63+
exit:
64+
%c.3 = icmp ugt i8 %x, 10
65+
ret i1 %c.3
66+
}
67+
68+
define i1 @test_chain_2(i8 %x) {
69+
; CHECK-LABEL: @test_chain_2(
70+
; CHECK-NEXT: entry:
71+
; CHECK-NEXT: [[C_1:%.*]] = icmp ule i8 [[X:%.*]], 10
72+
; CHECK-NEXT: br i1 [[C_1]], label [[THEN:%.*]], label [[ELSE:%.*]]
73+
; CHECK: then:
74+
; CHECK-NEXT: br label [[EXIT:%.*]]
75+
; CHECK: else:
76+
; CHECK-NEXT: [[C_2:%.*]] = icmp ule i8 [[X]], 10
77+
; CHECK-NEXT: call void @use(i1 false)
78+
; CHECK-NEXT: br label [[EXIT]]
79+
; CHECK: exit:
80+
; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i8 [[X]], 10
81+
; CHECK-NEXT: ret i1 [[C_3]]
82+
;
83+
entry:
84+
%c.1 = icmp ule i8 %x, 10
85+
br i1 %c.1, label %then, label %else
86+
87+
then:
88+
br label %exit
89+
90+
else:
91+
%c.2 = icmp ule i8 %x, 10
92+
call void @use(i1 %c.2)
93+
br label %exit
94+
95+
exit:
96+
%c.3 = icmp ugt i8 %x, 10
97+
ret i1 %c.3
98+
}
3699

37100
define i1 @test2(i8 %x) {
38101
; CHECK-LABEL: @test2(
@@ -61,7 +124,6 @@ bb2:
61124
br label %bb1
62125
}
63126

64-
65127
; Test cases where the true/false successors are not domianted by the conditional branching block.
66128
define i1 @test3(i8 %x, i1 %c) {
67129
; CHECK-LABEL: @test3(

0 commit comments

Comments
 (0)