Skip to content

Commit 2d14317

Browse files
committed
[ConstraintElim] Add extra switch test coverage.
1 parent b9e08cb commit 2d14317

File tree

1 file changed

+100
-0
lines changed
  • llvm/test/Transforms/ConstraintElimination

1 file changed

+100
-0
lines changed

llvm/test/Transforms/ConstraintElimination/switch.ll

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,103 @@ exit.2:
4343
}
4444

4545
declare void @llvm.assume(i1)
46+
47+
define i1 @simplify_based_on_switch(i32 %x) {
48+
; CHECK-LABEL: @simplify_based_on_switch(
49+
; CHECK-NEXT: entry:
50+
; CHECK-NEXT: switch i32 [[X:%.*]], label [[EXIT_1:%.*]] [
51+
; CHECK-NEXT: i32 6, label [[EXIT_2:%.*]]
52+
; CHECK-NEXT: i32 10, label [[EXIT_3:%.*]]
53+
; CHECK-NEXT: ]
54+
; CHECK: exit.1:
55+
; CHECK-NEXT: [[C_1:%.*]] = icmp ult i32 [[X]], 7
56+
; CHECK-NEXT: [[C_2:%.*]] = icmp ult i32 [[X]], 6
57+
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 [[C_1]], [[C_2]]
58+
; CHECK-NEXT: ret i1 [[RES_1]]
59+
; CHECK: exit.2:
60+
; CHECK-NEXT: [[T_1:%.*]] = icmp ult i32 [[X]], 7
61+
; CHECK-NEXT: [[F_1:%.*]] = icmp ult i32 [[X]], 6
62+
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[T_1]], [[F_1]]
63+
; CHECK-NEXT: ret i1 [[RES_2]]
64+
; CHECK: exit.3:
65+
; CHECK-NEXT: [[T_2:%.*]] = icmp ult i32 [[X]], 11
66+
; CHECK-NEXT: [[F_2:%.*]] = icmp ult i32 [[X]], 10
67+
; CHECK-NEXT: [[RES_3:%.*]] = xor i1 [[T_2]], [[F_2]]
68+
; CHECK-NEXT: ret i1 [[RES_3]]
69+
;
70+
entry:
71+
switch i32 %x, label %exit.1 [
72+
i32 6, label %exit.2
73+
i32 10, label %exit.3
74+
]
75+
76+
exit.1:
77+
%c.1 = icmp ult i32 %x, 7
78+
%c.2 = icmp ult i32 %x, 6
79+
%res.1 = xor i1 %c.1, %c.2
80+
ret i1 %res.1
81+
82+
exit.2:
83+
%t.1 = icmp ult i32 %x, 7
84+
%f.1 = icmp ult i32 %x, 6
85+
%res.2 = xor i1 %t.1, %f.1
86+
ret i1 %res.2
87+
88+
exit.3:
89+
%t.2 = icmp ult i32 %x, 11
90+
%f.2 = icmp ult i32 %x, 10
91+
%res.3 = xor i1 %t.2, %f.2
92+
ret i1 %res.3
93+
}
94+
95+
define i1 @simplify_based_on_switch_successor_branches(i32 %x) {
96+
; CHECK-LABEL: @simplify_based_on_switch_successor_branches(
97+
; CHECK-NEXT: entry:
98+
; CHECK-NEXT: switch i32 [[X:%.*]], label [[EXIT_1:%.*]] [
99+
; CHECK-NEXT: i32 6, label [[EXIT_2:%.*]]
100+
; CHECK-NEXT: i32 10, label [[EXIT_3:%.*]]
101+
; CHECK-NEXT: ]
102+
; CHECK: exit.1:
103+
; CHECK-NEXT: [[C_1:%.*]] = icmp ult i32 [[X]], 7
104+
; CHECK-NEXT: [[C_2:%.*]] = icmp ult i32 [[X]], 6
105+
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 [[C_1]], [[C_2]]
106+
; CHECK-NEXT: ret i1 [[RES_1]]
107+
; CHECK: exit.2:
108+
; CHECK-NEXT: [[T_1:%.*]] = icmp ult i32 [[X]], 7
109+
; CHECK-NEXT: [[F_1:%.*]] = icmp ult i32 [[X]], 6
110+
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[T_1]], [[F_1]]
111+
; CHECK-NEXT: call void @use(i1 [[RES_2]])
112+
; CHECK-NEXT: br label [[EXIT_3]]
113+
; CHECK: exit.3:
114+
; CHECK-NEXT: [[C_3:%.*]] = icmp ult i32 [[X]], 11
115+
; CHECK-NEXT: [[C_4:%.*]] = icmp ult i32 [[X]], 10
116+
; CHECK-NEXT: [[RES_3:%.*]] = xor i1 [[C_3]], [[C_4]]
117+
; CHECK-NEXT: ret i1 [[RES_3]]
118+
;
119+
entry:
120+
switch i32 %x, label %exit.1 [
121+
i32 6, label %exit.2
122+
i32 10, label %exit.3
123+
]
124+
125+
exit.1:
126+
%c.1 = icmp ult i32 %x, 7
127+
%c.2 = icmp ult i32 %x, 6
128+
%res.1 = xor i1 %c.1, %c.2
129+
ret i1 %res.1
130+
131+
exit.2:
132+
%t.1 = icmp ult i32 %x, 7
133+
%f.1 = icmp ult i32 %x, 6
134+
%res.2 = xor i1 %t.1, %f.1
135+
call void @use(i1 %res.2)
136+
br label %exit.3
137+
138+
exit.3:
139+
%c.3 = icmp ult i32 %x, 11
140+
%c.4 = icmp ult i32 %x, 10
141+
%res.3 = xor i1 %c.3, %c.4
142+
ret i1 %res.3
143+
}
144+
145+
declare void @use(i1)

0 commit comments

Comments
 (0)