Skip to content

Commit 784c70d

Browse files
committed
[ConstraintElimination] Add initial ICMP_NE test cases.
1 parent 8720ec6 commit 784c70d

File tree

1 file changed

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

1 file changed

+148
-0
lines changed
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes
2+
; RUN: opt -constraint-elimination -S %s | FileCheck %s
3+
4+
define i1 @test_eq_ne(i8 %a, i8 %b) {
5+
; CHECK-LABEL: @test_eq_ne(
6+
; CHECK-NEXT: entry:
7+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[A:%.*]], 0
8+
; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
9+
; CHECK: then:
10+
; CHECK-NEXT: [[F_1:%.*]] = icmp ne i8 [[A]], 0
11+
; CHECK-NEXT: [[C_1:%.*]] = icmp ne i8 [[A]], 1
12+
; CHECK-NEXT: [[C_2:%.*]] = icmp ne i8 [[A]], [[B:%.*]]
13+
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 [[F_1]], [[C_1]]
14+
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_2]]
15+
; CHECK-NEXT: ret i1 [[RES_2]]
16+
; CHECK: else:
17+
; CHECK-NEXT: [[T_1:%.*]] = icmp ne i8 [[A]], 0
18+
; CHECK-NEXT: [[C_3:%.*]] = icmp ne i8 [[A]], 1
19+
; CHECK-NEXT: [[C_4:%.*]] = icmp ne i8 [[A]], [[B]]
20+
; CHECK-NEXT: [[RES_3:%.*]] = xor i1 [[T_1]], [[C_3]]
21+
; CHECK-NEXT: [[RES_4:%.*]] = xor i1 [[RES_3]], [[C_4]]
22+
; CHECK-NEXT: ret i1 [[RES_4]]
23+
;
24+
entry:
25+
%cmp = icmp eq i8 %a, 0
26+
br i1 %cmp, label %then, label %else
27+
28+
then:
29+
%f.1 = icmp ne i8 %a, 0
30+
%c.1 = icmp ne i8 %a, 1
31+
%c.2 = icmp ne i8 %a, %b
32+
%res.1 = xor i1 %f.1, %c.1
33+
%res.2 = xor i1 %res.1, %c.2
34+
ret i1 %res.2
35+
36+
else:
37+
%t.1 = icmp ne i8 %a, 0
38+
%c.3 = icmp ne i8 %a, 1
39+
%c.4 = icmp ne i8 %a, %b
40+
%res.3 = xor i1 %t.1, %c.3
41+
%res.4 = xor i1 %res.3, %c.4
42+
ret i1 %res.4
43+
}
44+
45+
define i1 @test_ne_eq(i8 %a, i8 %b) {
46+
; CHECK-LABEL: @test_ne_eq(
47+
; CHECK-NEXT: entry:
48+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i8 [[A:%.*]], 0
49+
; CHECK-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[ELSE:%.*]]
50+
; CHECK: then:
51+
; CHECK-NEXT: [[T_1:%.*]] = icmp ne i8 [[A]], 0
52+
; CHECK-NEXT: [[C_1:%.*]] = icmp ne i8 [[A]], 1
53+
; CHECK-NEXT: [[RES_1:%.*]] = xor i1 [[T_1]], [[C_1]]
54+
; CHECK-NEXT: [[C_2:%.*]] = icmp ne i8 [[A]], [[B:%.*]]
55+
; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[RES_1]], [[C_2]]
56+
; CHECK-NEXT: [[C_3:%.*]] = icmp eq i8 [[A]], [[B]]
57+
; CHECK-NEXT: [[RES_3:%.*]] = xor i1 [[RES_2]], [[C_3]]
58+
; CHECK-NEXT: [[C_4:%.*]] = icmp eq i8 [[A]], 0
59+
; CHECK-NEXT: [[RES_4:%.*]] = xor i1 [[RES_3]], [[C_4]]
60+
; CHECK-NEXT: [[T_2:%.*]] = icmp ugt i8 [[A]], 0
61+
; CHECK-NEXT: [[RES_5:%.*]] = xor i1 [[RES_4]], [[T_2]]
62+
; CHECK-NEXT: [[T_3:%.*]] = icmp uge i8 [[A]], 1
63+
; CHECK-NEXT: [[RES_6:%.*]] = xor i1 [[RES_5]], [[T_3]]
64+
; CHECK-NEXT: [[C_5:%.*]] = icmp ugt i8 [[A]], 1
65+
; CHECK-NEXT: [[RES_7:%.*]] = xor i1 [[RES_6]], [[C_5]]
66+
; CHECK-NEXT: [[C_6:%.*]] = icmp sgt i8 [[A]], 0
67+
; CHECK-NEXT: [[RES_8:%.*]] = xor i1 [[RES_7]], [[C_6]]
68+
; CHECK-NEXT: ret i1 [[RES_8]]
69+
; CHECK: else:
70+
; CHECK-NEXT: [[F_1:%.*]] = icmp ne i8 [[A]], 0
71+
; CHECK-NEXT: [[C_7:%.*]] = icmp ne i8 [[A]], 1
72+
; CHECK-NEXT: [[RES_9:%.*]] = xor i1 [[F_1]], [[C_7]]
73+
; CHECK-NEXT: [[C_8:%.*]] = icmp ne i8 [[A]], [[B]]
74+
; CHECK-NEXT: [[RES_10:%.*]] = xor i1 [[RES_9]], [[C_8]]
75+
; CHECK-NEXT: [[C_9:%.*]] = icmp eq i8 [[A]], [[B]]
76+
; CHECK-NEXT: [[RES_11:%.*]] = xor i1 [[RES_10]], [[C_9]]
77+
; CHECK-NEXT: [[C_10:%.*]] = icmp eq i8 [[A]], 0
78+
; CHECK-NEXT: [[RES_12:%.*]] = xor i1 [[RES_11]], [[C_10]]
79+
; CHECK-NEXT: [[F_2:%.*]] = icmp ugt i8 [[A]], 0
80+
; CHECK-NEXT: [[RES_13:%.*]] = xor i1 [[RES_12]], false
81+
; CHECK-NEXT: [[F_3:%.*]] = icmp uge i8 [[A]], 1
82+
; CHECK-NEXT: [[RES_14:%.*]] = xor i1 [[RES_13]], false
83+
; CHECK-NEXT: [[C_11:%.*]] = icmp ugt i8 [[A]], 1
84+
; CHECK-NEXT: [[RES_15:%.*]] = xor i1 [[RES_14]], false
85+
; CHECK-NEXT: [[C_12:%.*]] = icmp sgt i8 [[A]], 0
86+
; CHECK-NEXT: [[RES_16:%.*]] = xor i1 [[RES_15]], [[C_12]]
87+
; CHECK-NEXT: ret i1 [[RES_16]]
88+
;
89+
entry:
90+
%cmp = icmp ne i8 %a, 0
91+
br i1 %cmp, label %then, label %else
92+
93+
then:
94+
%t.1 = icmp ne i8 %a, 0
95+
%c.1 = icmp ne i8 %a, 1
96+
%res.1 = xor i1 %t.1, %c.1
97+
98+
%c.2 = icmp ne i8 %a, %b
99+
%res.2 = xor i1 %res.1, %c.2
100+
101+
%c.3 = icmp eq i8 %a, %b
102+
%res.3 = xor i1 %res.2, %c.3
103+
104+
%c.4 = icmp eq i8 %a, 0
105+
%res.4 = xor i1 %res.3, %c.4
106+
107+
%t.2 = icmp ugt i8 %a, 0
108+
%res.5 = xor i1 %res.4, %t.2
109+
110+
%t.3 = icmp uge i8 %a, 1
111+
%res.6 = xor i1 %res.5, %t.3
112+
113+
%c.5 = icmp ugt i8 %a, 1
114+
%res.7 = xor i1 %res.6, %c.5
115+
116+
%c.6 = icmp sgt i8 %a, 0
117+
%res.8 = xor i1 %res.7, %c.6
118+
119+
ret i1 %res.8
120+
121+
else:
122+
%f.1 = icmp ne i8 %a, 0
123+
%c.7 = icmp ne i8 %a, 1
124+
%res.9 = xor i1 %f.1, %c.7
125+
126+
%c.8 = icmp ne i8 %a, %b
127+
%res.10 = xor i1 %res.9, %c.8
128+
129+
%c.9 = icmp eq i8 %a, %b
130+
%res.11 = xor i1 %res.10, %c.9
131+
132+
%c.10 = icmp eq i8 %a, 0
133+
%res.12 = xor i1 %res.11, %c.10
134+
135+
%f.2 = icmp ugt i8 %a, 0
136+
%res.13 = xor i1 %res.12, %f.2
137+
138+
%f.3 = icmp uge i8 %a, 1
139+
%res.14 = xor i1 %res.13, %f.3
140+
141+
%c.11 = icmp ugt i8 %a, 1
142+
%res.15 = xor i1 %res.14, %c.11
143+
144+
%c.12 = icmp sgt i8 %a, 0
145+
%res.16 = xor i1 %res.15, %c.12
146+
147+
ret i1 %res.16
148+
}

0 commit comments

Comments
 (0)