• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl | FileCheck %s
3
4; Function Attrs: norecurse nounwind readnone
5define zeroext i16 @TEST_mm_test_epi8_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {
6; CHECK-LABEL: TEST_mm_test_epi8_mask:
7; CHECK:       # %bb.0: # %entry
8; CHECK-NEXT:    vptestmb %xmm0, %xmm1, %k0
9; CHECK-NEXT:    kmovd %k0, %eax
10; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
11; CHECK-NEXT:    retq
12entry:
13  %and.i.i = and <2 x i64> %__B, %__A
14  %0 = bitcast <2 x i64> %and.i.i to <16 x i8>
15  %1 = icmp ne <16 x i8> %0, zeroinitializer
16  %2 = bitcast <16 x i1> %1 to i16
17  ret i16 %2
18}
19
20; Function Attrs: norecurse nounwind readnone
21define zeroext i16 @TEST_mm_mask_test_epi8_mask(i16 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {
22; CHECK-LABEL: TEST_mm_mask_test_epi8_mask:
23; CHECK:       # %bb.0: # %entry
24; CHECK-NEXT:    vptestmb %xmm0, %xmm1, %k0
25; CHECK-NEXT:    kmovd %k0, %eax
26; CHECK-NEXT:    andl %edi, %eax
27; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
28; CHECK-NEXT:    retq
29entry:
30  %and.i.i = and <2 x i64> %__B, %__A
31  %0 = bitcast <2 x i64> %and.i.i to <16 x i8>
32  %1 = icmp ne <16 x i8> %0, zeroinitializer
33  %2 = bitcast i16 %__U to <16 x i1>
34  %3 = and <16 x i1> %1, %2
35  %4 = bitcast <16 x i1> %3 to i16
36  ret i16 %4
37}
38
39; Function Attrs: norecurse nounwind readnone
40define zeroext i8 @TEST_mm_test_epi16_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {
41; CHECK-LABEL: TEST_mm_test_epi16_mask:
42; CHECK:       # %bb.0: # %entry
43; CHECK-NEXT:    vptestmw %xmm0, %xmm1, %k0
44; CHECK-NEXT:    kmovd %k0, %eax
45; CHECK-NEXT:    # kill: def $al killed $al killed $eax
46; CHECK-NEXT:    retq
47entry:
48  %and.i.i = and <2 x i64> %__B, %__A
49  %0 = bitcast <2 x i64> %and.i.i to <8 x i16>
50  %1 = icmp ne <8 x i16> %0, zeroinitializer
51  %2 = bitcast <8 x i1> %1 to i8
52  ret i8 %2
53}
54
55; Function Attrs: norecurse nounwind readnone
56define zeroext i8 @TEST_mm_mask_test_epi16_mask(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {
57; CHECK-LABEL: TEST_mm_mask_test_epi16_mask:
58; CHECK:       # %bb.0: # %entry
59; CHECK-NEXT:    vptestmw %xmm0, %xmm1, %k0
60; CHECK-NEXT:    kmovd %k0, %eax
61; CHECK-NEXT:    andb %dil, %al
62; CHECK-NEXT:    # kill: def $al killed $al killed $eax
63; CHECK-NEXT:    retq
64entry:
65  %and.i.i = and <2 x i64> %__B, %__A
66  %0 = bitcast <2 x i64> %and.i.i to <8 x i16>
67  %1 = icmp ne <8 x i16> %0, zeroinitializer
68  %2 = bitcast i8 %__U to <8 x i1>
69  %3 = and <8 x i1> %1, %2
70  %4 = bitcast <8 x i1> %3 to i8
71  ret i8 %4
72}
73
74; Function Attrs: norecurse nounwind readnone
75define zeroext i16 @TEST_mm_testn_epi8_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {
76; CHECK-LABEL: TEST_mm_testn_epi8_mask:
77; CHECK:       # %bb.0: # %entry
78; CHECK-NEXT:    vptestnmb %xmm0, %xmm1, %k0
79; CHECK-NEXT:    kmovd %k0, %eax
80; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
81; CHECK-NEXT:    retq
82entry:
83  %and.i.i = and <2 x i64> %__B, %__A
84  %0 = bitcast <2 x i64> %and.i.i to <16 x i8>
85  %1 = icmp eq <16 x i8> %0, zeroinitializer
86  %2 = bitcast <16 x i1> %1 to i16
87  ret i16 %2
88}
89
90; Function Attrs: norecurse nounwind readnone
91define zeroext i16 @TEST_mm_mask_testn_epi8_mask(i16 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {
92; CHECK-LABEL: TEST_mm_mask_testn_epi8_mask:
93; CHECK:       # %bb.0: # %entry
94; CHECK-NEXT:    vptestnmb %xmm0, %xmm1, %k0
95; CHECK-NEXT:    kmovd %k0, %eax
96; CHECK-NEXT:    andl %edi, %eax
97; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
98; CHECK-NEXT:    retq
99entry:
100  %and.i.i = and <2 x i64> %__B, %__A
101  %0 = bitcast <2 x i64> %and.i.i to <16 x i8>
102  %1 = icmp eq <16 x i8> %0, zeroinitializer
103  %2 = bitcast i16 %__U to <16 x i1>
104  %3 = and <16 x i1> %1, %2
105  %4 = bitcast <16 x i1> %3 to i16
106  ret i16 %4
107}
108
109; Function Attrs: norecurse nounwind readnone
110define zeroext i8 @TEST_mm_testn_epi16_mask(<2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {
111; CHECK-LABEL: TEST_mm_testn_epi16_mask:
112; CHECK:       # %bb.0: # %entry
113; CHECK-NEXT:    vptestnmw %xmm0, %xmm1, %k0
114; CHECK-NEXT:    kmovd %k0, %eax
115; CHECK-NEXT:    # kill: def $al killed $al killed $eax
116; CHECK-NEXT:    retq
117entry:
118  %and.i.i = and <2 x i64> %__B, %__A
119  %0 = bitcast <2 x i64> %and.i.i to <8 x i16>
120  %1 = icmp eq <8 x i16> %0, zeroinitializer
121  %2 = bitcast <8 x i1> %1 to i8
122  ret i8 %2
123}
124
125; Function Attrs: norecurse nounwind readnone
126define zeroext i8 @TEST_mm_mask_testn_epi16_mask(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) local_unnamed_addr #0 {
127; CHECK-LABEL: TEST_mm_mask_testn_epi16_mask:
128; CHECK:       # %bb.0: # %entry
129; CHECK-NEXT:    vptestnmw %xmm0, %xmm1, %k0
130; CHECK-NEXT:    kmovd %k0, %eax
131; CHECK-NEXT:    andb %dil, %al
132; CHECK-NEXT:    # kill: def $al killed $al killed $eax
133; CHECK-NEXT:    retq
134entry:
135  %and.i.i = and <2 x i64> %__B, %__A
136  %0 = bitcast <2 x i64> %and.i.i to <8 x i16>
137  %1 = icmp eq <8 x i16> %0, zeroinitializer
138  %2 = bitcast i8 %__U to <8 x i1>
139  %3 = and <8 x i1> %1, %2
140  %4 = bitcast <8 x i1> %3 to i8
141  ret i8 %4
142}
143
144; Function Attrs: norecurse nounwind readnone
145define i32 @TEST_mm256_test_epi8_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {
146; CHECK-LABEL: TEST_mm256_test_epi8_mask:
147; CHECK:       # %bb.0: # %entry
148; CHECK-NEXT:    vptestmb %ymm0, %ymm1, %k0
149; CHECK-NEXT:    kmovd %k0, %eax
150; CHECK-NEXT:    vzeroupper
151; CHECK-NEXT:    retq
152entry:
153  %and.i.i = and <4 x i64> %__B, %__A
154  %0 = bitcast <4 x i64> %and.i.i to <32 x i8>
155  %1 = icmp ne <32 x i8> %0, zeroinitializer
156  %2 = bitcast <32 x i1> %1 to i32
157  ret i32 %2
158}
159
160; Function Attrs: norecurse nounwind readnone
161define i32 @TEST_mm256_mask_test_epi8_mask(i32 %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {
162; CHECK-LABEL: TEST_mm256_mask_test_epi8_mask:
163; CHECK:       # %bb.0: # %entry
164; CHECK-NEXT:    vptestmb %ymm0, %ymm1, %k0
165; CHECK-NEXT:    kmovd %k0, %eax
166; CHECK-NEXT:    andl %edi, %eax
167; CHECK-NEXT:    vzeroupper
168; CHECK-NEXT:    retq
169entry:
170  %and.i.i = and <4 x i64> %__B, %__A
171  %0 = bitcast <4 x i64> %and.i.i to <32 x i8>
172  %1 = icmp ne <32 x i8> %0, zeroinitializer
173  %2 = bitcast i32 %__U to <32 x i1>
174  %3 = and <32 x i1> %1, %2
175  %4 = bitcast <32 x i1> %3 to i32
176  ret i32 %4
177}
178
179; Function Attrs: norecurse nounwind readnone
180define zeroext i16 @TEST_mm256_test_epi16_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {
181; CHECK-LABEL: TEST_mm256_test_epi16_mask:
182; CHECK:       # %bb.0: # %entry
183; CHECK-NEXT:    vptestmw %ymm0, %ymm1, %k0
184; CHECK-NEXT:    kmovd %k0, %eax
185; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
186; CHECK-NEXT:    vzeroupper
187; CHECK-NEXT:    retq
188entry:
189  %and.i.i = and <4 x i64> %__B, %__A
190  %0 = bitcast <4 x i64> %and.i.i to <16 x i16>
191  %1 = icmp ne <16 x i16> %0, zeroinitializer
192  %2 = bitcast <16 x i1> %1 to i16
193  ret i16 %2
194}
195
196; Function Attrs: norecurse nounwind readnone
197define zeroext i16 @TEST_mm256_mask_test_epi16_mask(i16 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {
198; CHECK-LABEL: TEST_mm256_mask_test_epi16_mask:
199; CHECK:       # %bb.0: # %entry
200; CHECK-NEXT:    vptestmw %ymm0, %ymm1, %k0
201; CHECK-NEXT:    kmovd %k0, %eax
202; CHECK-NEXT:    andl %edi, %eax
203; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
204; CHECK-NEXT:    vzeroupper
205; CHECK-NEXT:    retq
206entry:
207  %and.i.i = and <4 x i64> %__B, %__A
208  %0 = bitcast <4 x i64> %and.i.i to <16 x i16>
209  %1 = icmp ne <16 x i16> %0, zeroinitializer
210  %2 = bitcast i16 %__U to <16 x i1>
211  %3 = and <16 x i1> %1, %2
212  %4 = bitcast <16 x i1> %3 to i16
213  ret i16 %4
214}
215
216; Function Attrs: norecurse nounwind readnone
217define i32 @TEST_mm256_testn_epi8_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {
218; CHECK-LABEL: TEST_mm256_testn_epi8_mask:
219; CHECK:       # %bb.0: # %entry
220; CHECK-NEXT:    vptestnmb %ymm0, %ymm1, %k0
221; CHECK-NEXT:    kmovd %k0, %eax
222; CHECK-NEXT:    vzeroupper
223; CHECK-NEXT:    retq
224entry:
225  %and.i.i = and <4 x i64> %__B, %__A
226  %0 = bitcast <4 x i64> %and.i.i to <32 x i8>
227  %1 = icmp eq <32 x i8> %0, zeroinitializer
228  %2 = bitcast <32 x i1> %1 to i32
229  ret i32 %2
230}
231
232; Function Attrs: norecurse nounwind readnone
233define i32 @TEST_mm256_mask_testn_epi8_mask(i32 %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {
234; CHECK-LABEL: TEST_mm256_mask_testn_epi8_mask:
235; CHECK:       # %bb.0: # %entry
236; CHECK-NEXT:    vptestnmb %ymm0, %ymm1, %k0
237; CHECK-NEXT:    kmovd %k0, %eax
238; CHECK-NEXT:    andl %edi, %eax
239; CHECK-NEXT:    vzeroupper
240; CHECK-NEXT:    retq
241entry:
242  %and.i.i = and <4 x i64> %__B, %__A
243  %0 = bitcast <4 x i64> %and.i.i to <32 x i8>
244  %1 = icmp eq <32 x i8> %0, zeroinitializer
245  %2 = bitcast i32 %__U to <32 x i1>
246  %3 = and <32 x i1> %1, %2
247  %4 = bitcast <32 x i1> %3 to i32
248  ret i32 %4
249}
250
251; Function Attrs: norecurse nounwind readnone
252define zeroext i16 @TEST_mm256_testn_epi16_mask(<4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {
253; CHECK-LABEL: TEST_mm256_testn_epi16_mask:
254; CHECK:       # %bb.0: # %entry
255; CHECK-NEXT:    vptestnmw %ymm0, %ymm1, %k0
256; CHECK-NEXT:    kmovd %k0, %eax
257; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
258; CHECK-NEXT:    vzeroupper
259; CHECK-NEXT:    retq
260entry:
261  %and.i.i = and <4 x i64> %__B, %__A
262  %0 = bitcast <4 x i64> %and.i.i to <16 x i16>
263  %1 = icmp eq <16 x i16> %0, zeroinitializer
264  %2 = bitcast <16 x i1> %1 to i16
265  ret i16 %2
266}
267
268; Function Attrs: norecurse nounwind readnone
269define zeroext i16 @TEST_mm256_mask_testn_epi16_mask(i16 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) local_unnamed_addr #0 {
270; CHECK-LABEL: TEST_mm256_mask_testn_epi16_mask:
271; CHECK:       # %bb.0: # %entry
272; CHECK-NEXT:    vptestnmw %ymm0, %ymm1, %k0
273; CHECK-NEXT:    kmovd %k0, %eax
274; CHECK-NEXT:    andl %edi, %eax
275; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
276; CHECK-NEXT:    vzeroupper
277; CHECK-NEXT:    retq
278entry:
279  %and.i.i = and <4 x i64> %__B, %__A
280  %0 = bitcast <4 x i64> %and.i.i to <16 x i16>
281  %1 = icmp eq <16 x i16> %0, zeroinitializer
282  %2 = bitcast i16 %__U to <16 x i1>
283  %3 = and <16 x i1> %1, %2
284  %4 = bitcast <16 x i1> %3 to i16
285  ret i16 %4
286}
287
288
289