Skip to content

Commit 612fdf3

Browse files
committed
[X86] Add AVX1 v8i32 comparison test coverage
Pulled from #82290
1 parent 9f44d5d commit 612fdf3

File tree

1 file changed

+263
-0
lines changed

1 file changed

+263
-0
lines changed

llvm/test/CodeGen/X86/cmpf-avx.ll

Lines changed: 263 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,263 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=CHECK,X86
3+
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=CHECK,X64
4+
5+
define <8 x i32> @cmp_eq_bitcast(<8 x i32> %x) {
6+
; X86-LABEL: cmp_eq_bitcast:
7+
; X86: # %bb.0:
8+
; X86-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0
9+
; X86-NEXT: vextractf128 $1, %ymm0, %xmm1
10+
; X86-NEXT: vbroadcastss {{.*#+}} xmm2 = [3,3,3,3]
11+
; X86-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1
12+
; X86-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0
13+
; X86-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
14+
; X86-NEXT: retl
15+
;
16+
; X64-LABEL: cmp_eq_bitcast:
17+
; X64: # %bb.0:
18+
; X64-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
19+
; X64-NEXT: vextractf128 $1, %ymm0, %xmm1
20+
; X64-NEXT: vbroadcastss {{.*#+}} xmm2 = [3,3,3,3]
21+
; X64-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1
22+
; X64-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0
23+
; X64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
24+
; X64-NEXT: retq
25+
%and = and <8 x i32> %x, <i32 7, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
26+
%cmp = icmp eq <8 x i32> %and, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
27+
%sext = sext <8 x i1> %cmp to <8 x i32>
28+
ret <8 x i32> %sext
29+
}
30+
31+
define <8 x i32> @cmp_ne_sitofp(<8 x i32> %x) {
32+
; CHECK-LABEL: cmp_ne_sitofp:
33+
; CHECK: # %bb.0:
34+
; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1
35+
; CHECK-NEXT: vbroadcastss {{.*#+}} xmm2 = [3,3,3,3]
36+
; CHECK-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1
37+
; CHECK-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
38+
; CHECK-NEXT: vpxor %xmm3, %xmm1, %xmm1
39+
; CHECK-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0
40+
; CHECK-NEXT: vpxor %xmm3, %xmm0, %xmm0
41+
; CHECK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
42+
; CHECK-NEXT: ret{{[l|q]}}
43+
%cmp = icmp ne <8 x i32> %x, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
44+
%sext = sext <8 x i1> %cmp to <8 x i32>
45+
ret <8 x i32> %sext
46+
}
47+
48+
define <8 x i32> @cmp_slt_fail_no_const(<8 x i32> %x, <8 x i32> %y) {
49+
; X86-LABEL: cmp_slt_fail_no_const:
50+
; X86: # %bb.0:
51+
; X86-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0
52+
; X86-NEXT: vextractf128 $1, %ymm1, %xmm2
53+
; X86-NEXT: vextractf128 $1, %ymm0, %xmm3
54+
; X86-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm2
55+
; X86-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0
56+
; X86-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
57+
; X86-NEXT: retl
58+
;
59+
; X64-LABEL: cmp_slt_fail_no_const:
60+
; X64: # %bb.0:
61+
; X64-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
62+
; X64-NEXT: vextractf128 $1, %ymm1, %xmm2
63+
; X64-NEXT: vextractf128 $1, %ymm0, %xmm3
64+
; X64-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm2
65+
; X64-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0
66+
; X64-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
67+
; X64-NEXT: retq
68+
%and = and <8 x i32> %x, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
69+
%cmp = icmp slt <8 x i32> %and, %y
70+
%sext = sext <8 x i1> %cmp to <8 x i32>
71+
ret <8 x i32> %sext
72+
}
73+
74+
define <8 x i32> @cmp_eq_sitofp(<8 x i32> %x) {
75+
; CHECK-LABEL: cmp_eq_sitofp:
76+
; CHECK: # %bb.0:
77+
; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1
78+
; CHECK-NEXT: vbroadcastss {{.*#+}} xmm2 = [4294967293,4294967293,4294967293,4294967293]
79+
; CHECK-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1
80+
; CHECK-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0
81+
; CHECK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
82+
; CHECK-NEXT: ret{{[l|q]}}
83+
%cmp = icmp eq <8 x i32> %x, <i32 -3, i32 -3, i32 -3, i32 -3, i32 -3, i32 -3, i32 -3, i32 -3>
84+
%sext = sext <8 x i1> %cmp to <8 x i32>
85+
ret <8 x i32> %sext
86+
}
87+
88+
define <8 x i32> @cmp_sgt_fail_no_bounds(<8 x i32> %x, <8 x i32> %y) {
89+
; CHECK-LABEL: cmp_sgt_fail_no_bounds:
90+
; CHECK: # %bb.0:
91+
; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm2
92+
; CHECK-NEXT: vextractf128 $1, %ymm1, %xmm3
93+
; CHECK-NEXT: vpcmpgtd %xmm2, %xmm3, %xmm2
94+
; CHECK-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0
95+
; CHECK-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
96+
; CHECK-NEXT: ret{{[l|q]}}
97+
%cmp = icmp slt <8 x i32> %x, %y
98+
%sext = sext <8 x i1> %cmp to <8 x i32>
99+
ret <8 x i32> %sext
100+
}
101+
102+
define <8 x i32> @cmp_sgt_bitcast(<8 x i32> %xx, <8 x i32> %yy) {
103+
; CHECK-LABEL: cmp_sgt_bitcast:
104+
; CHECK: # %bb.0:
105+
; CHECK-NEXT: vbroadcastss {{.*#+}} ymm2 = [2139095040,2139095040,2139095040,2139095040,2139095040,2139095040,2139095040,2139095040]
106+
; CHECK-NEXT: vandps %ymm2, %ymm0, %ymm0
107+
; CHECK-NEXT: vandps %ymm2, %ymm1, %ymm1
108+
; CHECK-NEXT: vextractf128 $1, %ymm1, %xmm2
109+
; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm3
110+
; CHECK-NEXT: vpcmpgtd %xmm2, %xmm3, %xmm2
111+
; CHECK-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0
112+
; CHECK-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
113+
; CHECK-NEXT: ret{{[l|q]}}
114+
%x = and <8 x i32> %xx, <i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040>
115+
%y = and <8 x i32> %yy, <i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040>
116+
117+
%cmp = icmp sgt <8 x i32> %x, %y
118+
%sext = sext <8 x i1> %cmp to <8 x i32>
119+
ret <8 x i32> %sext
120+
}
121+
122+
define <8 x i32> @cmp_sle_fail_out_of_bounds(<8 x i32> %xx) {
123+
; X86-LABEL: cmp_sle_fail_out_of_bounds:
124+
; X86: # %bb.0:
125+
; X86-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0
126+
; X86-NEXT: vextractf128 $1, %ymm0, %xmm1
127+
; X86-NEXT: vbroadcastss {{.*#+}} xmm2 = [2139095041,2139095041,2139095041,2139095041]
128+
; X86-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1
129+
; X86-NEXT: vpcmpgtd %xmm0, %xmm2, %xmm0
130+
; X86-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
131+
; X86-NEXT: retl
132+
;
133+
; X64-LABEL: cmp_sle_fail_out_of_bounds:
134+
; X64: # %bb.0:
135+
; X64-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
136+
; X64-NEXT: vextractf128 $1, %ymm0, %xmm1
137+
; X64-NEXT: vbroadcastss {{.*#+}} xmm2 = [2139095041,2139095041,2139095041,2139095041]
138+
; X64-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1
139+
; X64-NEXT: vpcmpgtd %xmm0, %xmm2, %xmm0
140+
; X64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
141+
; X64-NEXT: retq
142+
%x = and <8 x i32> %xx, <i32 2139095041, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040>
143+
%cmp = icmp sle <8 x i32> %x, <i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040>
144+
%sext = sext <8 x i1> %cmp to <8 x i32>
145+
ret <8 x i32> %sext
146+
}
147+
148+
define <8 x i32> @cmp_eq_fail_out_of_bounds(<8 x i32> %x) {
149+
; CHECK-LABEL: cmp_eq_fail_out_of_bounds:
150+
; CHECK: # %bb.0:
151+
; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1
152+
; CHECK-NEXT: vbroadcastss {{.*#+}} xmm2 = [16777216,16777216,16777216,16777216]
153+
; CHECK-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1
154+
; CHECK-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0
155+
; CHECK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
156+
; CHECK-NEXT: ret{{[l|q]}}
157+
%cmp = icmp eq <8 x i32> %x, <i32 16777216, i32 16777216, i32 16777216, i32 16777216, i32 16777216, i32 16777216, i32 16777216, i32 16777216>
158+
%sext = sext <8 x i1> %cmp to <8 x i32>
159+
ret <8 x i32> %sext
160+
}
161+
162+
define <8 x i32> @cmp_eq_fail_out_of_bounds2(<8 x i32> %x) {
163+
; CHECK-LABEL: cmp_eq_fail_out_of_bounds2:
164+
; CHECK: # %bb.0:
165+
; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1
166+
; CHECK-NEXT: vbroadcastss {{.*#+}} xmm2 = [4278190080,4278190080,4278190080,4278190080]
167+
; CHECK-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1
168+
; CHECK-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0
169+
; CHECK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
170+
; CHECK-NEXT: ret{{[l|q]}}
171+
%cmp = icmp eq <8 x i32> %x, <i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216, i32 -16777216>
172+
%sext = sext <8 x i1> %cmp to <8 x i32>
173+
ret <8 x i32> %sext
174+
}
175+
176+
define <8 x i32> @cmp_eq_todo(<8 x i32> %x) {
177+
; X86-LABEL: cmp_eq_todo:
178+
; X86: # %bb.0:
179+
; X86-NEXT: vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm1
180+
; X86-NEXT: vextractf128 $1, %ymm0, %xmm0
181+
; X86-NEXT: vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0
182+
; X86-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
183+
; X86-NEXT: retl
184+
;
185+
; X64-LABEL: cmp_eq_todo:
186+
; X64: # %bb.0:
187+
; X64-NEXT: vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
188+
; X64-NEXT: vextractf128 $1, %ymm0, %xmm0
189+
; X64-NEXT: vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
190+
; X64-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
191+
; X64-NEXT: retq
192+
%cmp = icmp eq <8 x i32> %x, <i32 -16777215, i32 16777215, i32 16777215, i32 -16777215, i32 16777215, i32 -16777215, i32 16777215, i32 -16777215>
193+
%sext = sext <8 x i1> %cmp to <8 x i32>
194+
ret <8 x i32> %sext
195+
}
196+
197+
define <8 x i32> @cmp_ult_fail_maybe_negative(<8 x i32> %x) {
198+
; CHECK-LABEL: cmp_ult_fail_maybe_negative:
199+
; CHECK: # %bb.0:
200+
; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm1
201+
; CHECK-NEXT: vbroadcastss {{.*#+}} xmm2 = [2,2,2,2]
202+
; CHECK-NEXT: vpminud %xmm2, %xmm1, %xmm3
203+
; CHECK-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1
204+
; CHECK-NEXT: vpminud %xmm2, %xmm0, %xmm2
205+
; CHECK-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0
206+
; CHECK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
207+
; CHECK-NEXT: ret{{[l|q]}}
208+
%cmp = icmp ult <8 x i32> %x, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
209+
%sext = sext <8 x i1> %cmp to <8 x i32>
210+
ret <8 x i32> %sext
211+
}
212+
213+
define <8 x i32> @cmp_ule_bitcast(<8 x i32> %xx) {
214+
; X86-LABEL: cmp_ule_bitcast:
215+
; X86: # %bb.0:
216+
; X86-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0
217+
; X86-NEXT: vextractf128 $1, %ymm0, %xmm1
218+
; X86-NEXT: vbroadcastss {{.*#+}} xmm2 = [4,4,4,4]
219+
; X86-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1
220+
; X86-NEXT: vpcmpgtd %xmm0, %xmm2, %xmm0
221+
; X86-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
222+
; X86-NEXT: retl
223+
;
224+
; X64-LABEL: cmp_ule_bitcast:
225+
; X64: # %bb.0:
226+
; X64-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
227+
; X64-NEXT: vextractf128 $1, %ymm0, %xmm1
228+
; X64-NEXT: vbroadcastss {{.*#+}} xmm2 = [4,4,4,4]
229+
; X64-NEXT: vpcmpgtd %xmm1, %xmm2, %xmm1
230+
; X64-NEXT: vpcmpgtd %xmm0, %xmm2, %xmm0
231+
; X64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
232+
; X64-NEXT: retq
233+
%x = and <8 x i32> %xx, <i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040, i32 2139095040>
234+
%cmp = icmp ule <8 x i32> %x, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
235+
%sext = sext <8 x i1> %cmp to <8 x i32>
236+
ret <8 x i32> %sext
237+
}
238+
239+
define <8 x i32> @cmp_ugt_sitofp(<8 x i32> %xx) {
240+
; X86-LABEL: cmp_ugt_sitofp:
241+
; X86: # %bb.0:
242+
; X86-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %ymm0, %ymm0
243+
; X86-NEXT: vextractf128 $1, %ymm0, %xmm1
244+
; X86-NEXT: vbroadcastss {{.*#+}} xmm2 = [3,3,3,3]
245+
; X86-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1
246+
; X86-NEXT: vpcmpgtd %xmm2, %xmm0, %xmm0
247+
; X86-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
248+
; X86-NEXT: retl
249+
;
250+
; X64-LABEL: cmp_ugt_sitofp:
251+
; X64: # %bb.0:
252+
; X64-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
253+
; X64-NEXT: vextractf128 $1, %ymm0, %xmm1
254+
; X64-NEXT: vbroadcastss {{.*#+}} xmm2 = [3,3,3,3]
255+
; X64-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1
256+
; X64-NEXT: vpcmpgtd %xmm2, %xmm0, %xmm0
257+
; X64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
258+
; X64-NEXT: retq
259+
%x = and <8 x i32> %xx, <i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647>
260+
%cmp = icmp ugt <8 x i32> %x, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
261+
%sext = sext <8 x i1> %cmp to <8 x i32>
262+
ret <8 x i32> %sext
263+
}

0 commit comments

Comments
 (0)