Skip to content

Commit 86a861a

Browse files
committed
[ConstraintElimination] Add additional tests with uncond branches.
(cherry-picked from 2229674)
1 parent 6345202 commit 86a861a

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
@@ -34,6 +34,69 @@ bb2:
3434
ret i1 %c.3
3535
}
3636

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

38101
define i1 @test2(i8 %x) {
39102
; CHECK-LABEL: @test2(
@@ -62,7 +125,6 @@ bb2:
62125
br label %bb1
63126
}
64127

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

0 commit comments

Comments
 (0)