Skip to content

Commit 91ea992

Browse files
committed
[X86] Add avx512bw command lines to avx512-select.ll
Prep for fixing PR42355 and ensuring we have coverage of ISD::SELECT for v64i8/v32i16 on KNL and SKX configs. llvm-svn: 364092
1 parent ce6c06d commit 91ea992

File tree

1 file changed

+192
-89
lines changed

1 file changed

+192
-89
lines changed

llvm/test/CodeGen/X86/avx512-select.ll

Lines changed: 192 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2-
; RUN: llc < %s -mtriple=i686-unknown-unknown -mcpu=knl | FileCheck %s --check-prefix=X86
3-
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefix=X64
2+
; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=avx512f | FileCheck %s --check-prefixes=X86,X86-AVX512F
3+
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f | FileCheck %s --check-prefixes=X64,X64-AVX512F
4+
; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=avx512bw | FileCheck %s --check-prefixes=X86,X86-AVX512BW
5+
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512bw | FileCheck %s --check-prefixes=X64,X64-AVX512BW
46

57
define <16 x i32> @select00(i32 %a, <16 x i32> %b) nounwind {
68
; X86-LABEL: select00:
@@ -147,25 +149,45 @@ define i8 @select05(i8 %a.0, i8 %m) {
147149
}
148150

149151
define i8 @select05_mem(<8 x i1>* %a.0, <8 x i1>* %m) {
150-
; X86-LABEL: select05_mem:
151-
; X86: # %bb.0:
152-
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
153-
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
154-
; X86-NEXT: kmovw (%ecx), %k0
155-
; X86-NEXT: kmovw (%eax), %k1
156-
; X86-NEXT: korw %k1, %k0, %k0
157-
; X86-NEXT: kmovw %k0, %eax
158-
; X86-NEXT: # kill: def $al killed $al killed $eax
159-
; X86-NEXT: retl
152+
; X86-AVX512F-LABEL: select05_mem:
153+
; X86-AVX512F: # %bb.0:
154+
; X86-AVX512F-NEXT: movl {{[0-9]+}}(%esp), %eax
155+
; X86-AVX512F-NEXT: movl {{[0-9]+}}(%esp), %ecx
156+
; X86-AVX512F-NEXT: kmovw (%ecx), %k0
157+
; X86-AVX512F-NEXT: kmovw (%eax), %k1
158+
; X86-AVX512F-NEXT: korw %k1, %k0, %k0
159+
; X86-AVX512F-NEXT: kmovw %k0, %eax
160+
; X86-AVX512F-NEXT: # kill: def $al killed $al killed $eax
161+
; X86-AVX512F-NEXT: retl
160162
;
161-
; X64-LABEL: select05_mem:
162-
; X64: # %bb.0:
163-
; X64-NEXT: kmovw (%rsi), %k0
164-
; X64-NEXT: kmovw (%rdi), %k1
165-
; X64-NEXT: korw %k1, %k0, %k0
166-
; X64-NEXT: kmovw %k0, %eax
167-
; X64-NEXT: # kill: def $al killed $al killed $eax
168-
; X64-NEXT: retq
163+
; X64-AVX512F-LABEL: select05_mem:
164+
; X64-AVX512F: # %bb.0:
165+
; X64-AVX512F-NEXT: kmovw (%rsi), %k0
166+
; X64-AVX512F-NEXT: kmovw (%rdi), %k1
167+
; X64-AVX512F-NEXT: korw %k1, %k0, %k0
168+
; X64-AVX512F-NEXT: kmovw %k0, %eax
169+
; X64-AVX512F-NEXT: # kill: def $al killed $al killed $eax
170+
; X64-AVX512F-NEXT: retq
171+
;
172+
; X86-AVX512BW-LABEL: select05_mem:
173+
; X86-AVX512BW: # %bb.0:
174+
; X86-AVX512BW-NEXT: movl {{[0-9]+}}(%esp), %eax
175+
; X86-AVX512BW-NEXT: movl {{[0-9]+}}(%esp), %ecx
176+
; X86-AVX512BW-NEXT: kmovw (%ecx), %k0
177+
; X86-AVX512BW-NEXT: kmovw (%eax), %k1
178+
; X86-AVX512BW-NEXT: korw %k1, %k0, %k0
179+
; X86-AVX512BW-NEXT: kmovd %k0, %eax
180+
; X86-AVX512BW-NEXT: # kill: def $al killed $al killed $eax
181+
; X86-AVX512BW-NEXT: retl
182+
;
183+
; X64-AVX512BW-LABEL: select05_mem:
184+
; X64-AVX512BW: # %bb.0:
185+
; X64-AVX512BW-NEXT: kmovw (%rsi), %k0
186+
; X64-AVX512BW-NEXT: kmovw (%rdi), %k1
187+
; X64-AVX512BW-NEXT: korw %k1, %k0, %k0
188+
; X64-AVX512BW-NEXT: kmovd %k0, %eax
189+
; X64-AVX512BW-NEXT: # kill: def $al killed $al killed $eax
190+
; X64-AVX512BW-NEXT: retq
169191
%mask = load <8 x i1> , <8 x i1>* %m
170192
%a = load <8 x i1> , <8 x i1>* %a.0
171193
%r = select <8 x i1> %mask, <8 x i1> <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>, <8 x i1> %a
@@ -194,58 +216,105 @@ define i8 @select06(i8 %a.0, i8 %m) {
194216
}
195217

196218
define i8 @select06_mem(<8 x i1>* %a.0, <8 x i1>* %m) {
197-
; X86-LABEL: select06_mem:
198-
; X86: # %bb.0:
199-
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
200-
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
201-
; X86-NEXT: kmovw (%ecx), %k0
202-
; X86-NEXT: kmovw (%eax), %k1
203-
; X86-NEXT: kandw %k1, %k0, %k0
204-
; X86-NEXT: kmovw %k0, %eax
205-
; X86-NEXT: # kill: def $al killed $al killed $eax
206-
; X86-NEXT: retl
219+
; X86-AVX512F-LABEL: select06_mem:
220+
; X86-AVX512F: # %bb.0:
221+
; X86-AVX512F-NEXT: movl {{[0-9]+}}(%esp), %eax
222+
; X86-AVX512F-NEXT: movl {{[0-9]+}}(%esp), %ecx
223+
; X86-AVX512F-NEXT: kmovw (%ecx), %k0
224+
; X86-AVX512F-NEXT: kmovw (%eax), %k1
225+
; X86-AVX512F-NEXT: kandw %k1, %k0, %k0
226+
; X86-AVX512F-NEXT: kmovw %k0, %eax
227+
; X86-AVX512F-NEXT: # kill: def $al killed $al killed $eax
228+
; X86-AVX512F-NEXT: retl
207229
;
208-
; X64-LABEL: select06_mem:
209-
; X64: # %bb.0:
210-
; X64-NEXT: kmovw (%rsi), %k0
211-
; X64-NEXT: kmovw (%rdi), %k1
212-
; X64-NEXT: kandw %k1, %k0, %k0
213-
; X64-NEXT: kmovw %k0, %eax
214-
; X64-NEXT: # kill: def $al killed $al killed $eax
215-
; X64-NEXT: retq
230+
; X64-AVX512F-LABEL: select06_mem:
231+
; X64-AVX512F: # %bb.0:
232+
; X64-AVX512F-NEXT: kmovw (%rsi), %k0
233+
; X64-AVX512F-NEXT: kmovw (%rdi), %k1
234+
; X64-AVX512F-NEXT: kandw %k1, %k0, %k0
235+
; X64-AVX512F-NEXT: kmovw %k0, %eax
236+
; X64-AVX512F-NEXT: # kill: def $al killed $al killed $eax
237+
; X64-AVX512F-NEXT: retq
238+
;
239+
; X86-AVX512BW-LABEL: select06_mem:
240+
; X86-AVX512BW: # %bb.0:
241+
; X86-AVX512BW-NEXT: movl {{[0-9]+}}(%esp), %eax
242+
; X86-AVX512BW-NEXT: movl {{[0-9]+}}(%esp), %ecx
243+
; X86-AVX512BW-NEXT: kmovw (%ecx), %k0
244+
; X86-AVX512BW-NEXT: kmovw (%eax), %k1
245+
; X86-AVX512BW-NEXT: kandw %k1, %k0, %k0
246+
; X86-AVX512BW-NEXT: kmovd %k0, %eax
247+
; X86-AVX512BW-NEXT: # kill: def $al killed $al killed $eax
248+
; X86-AVX512BW-NEXT: retl
249+
;
250+
; X64-AVX512BW-LABEL: select06_mem:
251+
; X64-AVX512BW: # %bb.0:
252+
; X64-AVX512BW-NEXT: kmovw (%rsi), %k0
253+
; X64-AVX512BW-NEXT: kmovw (%rdi), %k1
254+
; X64-AVX512BW-NEXT: kandw %k1, %k0, %k0
255+
; X64-AVX512BW-NEXT: kmovd %k0, %eax
256+
; X64-AVX512BW-NEXT: # kill: def $al killed $al killed $eax
257+
; X64-AVX512BW-NEXT: retq
216258
%mask = load <8 x i1> , <8 x i1>* %m
217259
%a = load <8 x i1> , <8 x i1>* %a.0
218260
%r = select <8 x i1> %mask, <8 x i1> %a, <8 x i1> zeroinitializer
219261
%res = bitcast <8 x i1> %r to i8
220262
ret i8 %res;
221263
}
222264
define i8 @select07(i8 %a.0, i8 %b.0, i8 %m) {
223-
; X86-LABEL: select07:
224-
; X86: # %bb.0:
225-
; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax
226-
; X86-NEXT: kmovw %eax, %k0
227-
; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax
228-
; X86-NEXT: kmovw %eax, %k1
229-
; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax
230-
; X86-NEXT: kmovw %eax, %k2
231-
; X86-NEXT: kandnw %k2, %k0, %k2
232-
; X86-NEXT: kandw %k0, %k1, %k0
233-
; X86-NEXT: korw %k2, %k0, %k0
234-
; X86-NEXT: kmovw %k0, %eax
235-
; X86-NEXT: # kill: def $al killed $al killed $eax
236-
; X86-NEXT: retl
265+
; X86-AVX512F-LABEL: select07:
266+
; X86-AVX512F: # %bb.0:
267+
; X86-AVX512F-NEXT: movzbl {{[0-9]+}}(%esp), %eax
268+
; X86-AVX512F-NEXT: kmovw %eax, %k0
269+
; X86-AVX512F-NEXT: movzbl {{[0-9]+}}(%esp), %eax
270+
; X86-AVX512F-NEXT: kmovw %eax, %k1
271+
; X86-AVX512F-NEXT: movzbl {{[0-9]+}}(%esp), %eax
272+
; X86-AVX512F-NEXT: kmovw %eax, %k2
273+
; X86-AVX512F-NEXT: kandnw %k2, %k0, %k2
274+
; X86-AVX512F-NEXT: kandw %k0, %k1, %k0
275+
; X86-AVX512F-NEXT: korw %k2, %k0, %k0
276+
; X86-AVX512F-NEXT: kmovw %k0, %eax
277+
; X86-AVX512F-NEXT: # kill: def $al killed $al killed $eax
278+
; X86-AVX512F-NEXT: retl
237279
;
238-
; X64-LABEL: select07:
239-
; X64: # %bb.0:
240-
; X64-NEXT: kmovw %edx, %k0
241-
; X64-NEXT: kmovw %edi, %k1
242-
; X64-NEXT: kmovw %esi, %k2
243-
; X64-NEXT: kandnw %k2, %k0, %k2
244-
; X64-NEXT: kandw %k0, %k1, %k0
245-
; X64-NEXT: korw %k2, %k0, %k0
246-
; X64-NEXT: kmovw %k0, %eax
247-
; X64-NEXT: # kill: def $al killed $al killed $eax
248-
; X64-NEXT: retq
280+
; X64-AVX512F-LABEL: select07:
281+
; X64-AVX512F: # %bb.0:
282+
; X64-AVX512F-NEXT: kmovw %edx, %k0
283+
; X64-AVX512F-NEXT: kmovw %edi, %k1
284+
; X64-AVX512F-NEXT: kmovw %esi, %k2
285+
; X64-AVX512F-NEXT: kandnw %k2, %k0, %k2
286+
; X64-AVX512F-NEXT: kandw %k0, %k1, %k0
287+
; X64-AVX512F-NEXT: korw %k2, %k0, %k0
288+
; X64-AVX512F-NEXT: kmovw %k0, %eax
289+
; X64-AVX512F-NEXT: # kill: def $al killed $al killed $eax
290+
; X64-AVX512F-NEXT: retq
291+
;
292+
; X86-AVX512BW-LABEL: select07:
293+
; X86-AVX512BW: # %bb.0:
294+
; X86-AVX512BW-NEXT: movzbl {{[0-9]+}}(%esp), %eax
295+
; X86-AVX512BW-NEXT: kmovd %eax, %k0
296+
; X86-AVX512BW-NEXT: movzbl {{[0-9]+}}(%esp), %eax
297+
; X86-AVX512BW-NEXT: kmovd %eax, %k1
298+
; X86-AVX512BW-NEXT: movzbl {{[0-9]+}}(%esp), %eax
299+
; X86-AVX512BW-NEXT: kmovd %eax, %k2
300+
; X86-AVX512BW-NEXT: kandnw %k2, %k0, %k2
301+
; X86-AVX512BW-NEXT: kandw %k0, %k1, %k0
302+
; X86-AVX512BW-NEXT: korw %k2, %k0, %k0
303+
; X86-AVX512BW-NEXT: kmovd %k0, %eax
304+
; X86-AVX512BW-NEXT: # kill: def $al killed $al killed $eax
305+
; X86-AVX512BW-NEXT: retl
306+
;
307+
; X64-AVX512BW-LABEL: select07:
308+
; X64-AVX512BW: # %bb.0:
309+
; X64-AVX512BW-NEXT: kmovd %edx, %k0
310+
; X64-AVX512BW-NEXT: kmovd %edi, %k1
311+
; X64-AVX512BW-NEXT: kmovd %esi, %k2
312+
; X64-AVX512BW-NEXT: kandnw %k2, %k0, %k2
313+
; X64-AVX512BW-NEXT: kandw %k0, %k1, %k0
314+
; X64-AVX512BW-NEXT: korw %k2, %k0, %k0
315+
; X64-AVX512BW-NEXT: kmovd %k0, %eax
316+
; X64-AVX512BW-NEXT: # kill: def $al killed $al killed $eax
317+
; X64-AVX512BW-NEXT: retq
249318
%mask = bitcast i8 %m to <8 x i1>
250319
%a = bitcast i8 %a.0 to <8 x i1>
251320
%b = bitcast i8 %b.0 to <8 x i1>
@@ -279,11 +348,17 @@ define double @pr30561_f64(double %b, double %a, i1 %c) {
279348
; X86-NEXT: fldl (%ecx)
280349
; X86-NEXT: retl
281350
;
282-
; X64-LABEL: pr30561_f64:
283-
; X64: # %bb.0:
284-
; X64-NEXT: kmovw %edi, %k1
285-
; X64-NEXT: vmovsd %xmm1, %xmm0, %xmm0 {%k1}
286-
; X64-NEXT: retq
351+
; X64-AVX512F-LABEL: pr30561_f64:
352+
; X64-AVX512F: # %bb.0:
353+
; X64-AVX512F-NEXT: kmovw %edi, %k1
354+
; X64-AVX512F-NEXT: vmovsd %xmm1, %xmm0, %xmm0 {%k1}
355+
; X64-AVX512F-NEXT: retq
356+
;
357+
; X64-AVX512BW-LABEL: pr30561_f64:
358+
; X64-AVX512BW: # %bb.0:
359+
; X64-AVX512BW-NEXT: kmovd %edi, %k1
360+
; X64-AVX512BW-NEXT: vmovsd %xmm1, %xmm0, %xmm0 {%k1}
361+
; X64-AVX512BW-NEXT: retq
287362
%cond = select i1 %c, double %a, double %b
288363
ret double %cond
289364
}
@@ -298,33 +373,61 @@ define float @pr30561_f32(float %b, float %a, i1 %c) {
298373
; X86-NEXT: flds (%ecx)
299374
; X86-NEXT: retl
300375
;
301-
; X64-LABEL: pr30561_f32:
302-
; X64: # %bb.0:
303-
; X64-NEXT: kmovw %edi, %k1
304-
; X64-NEXT: vmovss %xmm1, %xmm0, %xmm0 {%k1}
305-
; X64-NEXT: retq
376+
; X64-AVX512F-LABEL: pr30561_f32:
377+
; X64-AVX512F: # %bb.0:
378+
; X64-AVX512F-NEXT: kmovw %edi, %k1
379+
; X64-AVX512F-NEXT: vmovss %xmm1, %xmm0, %xmm0 {%k1}
380+
; X64-AVX512F-NEXT: retq
381+
;
382+
; X64-AVX512BW-LABEL: pr30561_f32:
383+
; X64-AVX512BW: # %bb.0:
384+
; X64-AVX512BW-NEXT: kmovd %edi, %k1
385+
; X64-AVX512BW-NEXT: vmovss %xmm1, %xmm0, %xmm0 {%k1}
386+
; X64-AVX512BW-NEXT: retq
306387
%cond = select i1 %c, float %a, float %b
307388
ret float %cond
308389
}
309390

310391
define <16 x i16> @pr31515(<16 x i1> %a, <16 x i1> %b, <16 x i16> %c) nounwind {
311-
; X86-LABEL: pr31515:
312-
; X86: # %bb.0:
313-
; X86-NEXT: vpand %xmm1, %xmm0, %xmm0
314-
; X86-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
315-
; X86-NEXT: vpsllw $15, %ymm0, %ymm0
316-
; X86-NEXT: vpsraw $15, %ymm0, %ymm0
317-
; X86-NEXT: vpandn %ymm2, %ymm0, %ymm0
318-
; X86-NEXT: retl
392+
; X86-AVX512F-LABEL: pr31515:
393+
; X86-AVX512F: # %bb.0:
394+
; X86-AVX512F-NEXT: vpand %xmm1, %xmm0, %xmm0
395+
; X86-AVX512F-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
396+
; X86-AVX512F-NEXT: vpsllw $15, %ymm0, %ymm0
397+
; X86-AVX512F-NEXT: vpsraw $15, %ymm0, %ymm0
398+
; X86-AVX512F-NEXT: vpandn %ymm2, %ymm0, %ymm0
399+
; X86-AVX512F-NEXT: retl
319400
;
320-
; X64-LABEL: pr31515:
321-
; X64: # %bb.0:
322-
; X64-NEXT: vpand %xmm1, %xmm0, %xmm0
323-
; X64-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
324-
; X64-NEXT: vpsllw $15, %ymm0, %ymm0
325-
; X64-NEXT: vpsraw $15, %ymm0, %ymm0
326-
; X64-NEXT: vpandn %ymm2, %ymm0, %ymm0
327-
; X64-NEXT: retq
401+
; X64-AVX512F-LABEL: pr31515:
402+
; X64-AVX512F: # %bb.0:
403+
; X64-AVX512F-NEXT: vpand %xmm1, %xmm0, %xmm0
404+
; X64-AVX512F-NEXT: vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
405+
; X64-AVX512F-NEXT: vpsllw $15, %ymm0, %ymm0
406+
; X64-AVX512F-NEXT: vpsraw $15, %ymm0, %ymm0
407+
; X64-AVX512F-NEXT: vpandn %ymm2, %ymm0, %ymm0
408+
; X64-AVX512F-NEXT: retq
409+
;
410+
; X86-AVX512BW-LABEL: pr31515:
411+
; X86-AVX512BW: # %bb.0:
412+
; X86-AVX512BW-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2
413+
; X86-AVX512BW-NEXT: vpand %xmm1, %xmm0, %xmm0
414+
; X86-AVX512BW-NEXT: vpsllw $7, %xmm0, %xmm0
415+
; X86-AVX512BW-NEXT: vpmovb2m %zmm0, %k0
416+
; X86-AVX512BW-NEXT: knotw %k0, %k1
417+
; X86-AVX512BW-NEXT: vmovdqu16 %zmm2, %zmm0 {%k1} {z}
418+
; X86-AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
419+
; X86-AVX512BW-NEXT: retl
420+
;
421+
; X64-AVX512BW-LABEL: pr31515:
422+
; X64-AVX512BW: # %bb.0:
423+
; X64-AVX512BW-NEXT: # kill: def $ymm2 killed $ymm2 def $zmm2
424+
; X64-AVX512BW-NEXT: vpand %xmm1, %xmm0, %xmm0
425+
; X64-AVX512BW-NEXT: vpsllw $7, %xmm0, %xmm0
426+
; X64-AVX512BW-NEXT: vpmovb2m %zmm0, %k0
427+
; X64-AVX512BW-NEXT: knotw %k0, %k1
428+
; X64-AVX512BW-NEXT: vmovdqu16 %zmm2, %zmm0 {%k1} {z}
429+
; X64-AVX512BW-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
430+
; X64-AVX512BW-NEXT: retq
328431
%mask = and <16 x i1> %a, %b
329432
%res = select <16 x i1> %mask, <16 x i16> zeroinitializer, <16 x i16> %c
330433
ret <16 x i16> %res

0 commit comments

Comments
 (0)