CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
2983 lines
137 KiB
LLVM
2983 lines
137 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp
|
|
; RUN: llc < %s -mtriple=x86_64-apple-darwin9 -mcpu=knl | FileCheck %s --check-prefix=ALL_X64 --check-prefix=KNL
|
|
; RUN: llc < %s -mtriple=x86_64-apple-darwin9 -mcpu=skx | FileCheck %s --check-prefix=ALL_X64 --check-prefix=SKX
|
|
; RUN: llc < %s -mtriple=i686-apple-darwin9 -mcpu=knl | FileCheck %s --check-prefix=KNL_X32
|
|
; RUN: llc < %s -mtriple=x86_64-apple-darwin9 -mcpu=skx -fast-isel | FileCheck %s --check-prefix=FASTISEL
|
|
|
|
define <16 x i1> @test1() {
|
|
; ALL_X64-LABEL: test1:
|
|
; ALL_X64: ## %bb.0:
|
|
; ALL_X64-NEXT: vxorps %xmm0, %xmm0, %xmm0
|
|
; ALL_X64-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test1:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: vxorps %xmm0, %xmm0, %xmm0
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test1:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: vxorps %xmm0, %xmm0, %xmm0
|
|
; FASTISEL-NEXT: retq
|
|
ret <16 x i1> zeroinitializer
|
|
}
|
|
|
|
define <16 x i1> @test2(<16 x i1>%a, <16 x i1>%b) {
|
|
; ALL_X64-LABEL: test2:
|
|
; ALL_X64: ## %bb.0:
|
|
; ALL_X64-NEXT: vandps %xmm1, %xmm0, %xmm0
|
|
; ALL_X64-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test2:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: vandps %xmm1, %xmm0, %xmm0
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test2:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: vpsllw $7, %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpmovb2m %xmm1, %k0
|
|
; FASTISEL-NEXT: vpsllw $7, %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpmovb2m %xmm0, %k1
|
|
; FASTISEL-NEXT: kandw %k0, %k1, %k0
|
|
; FASTISEL-NEXT: vpmovm2b %k0, %xmm0
|
|
; FASTISEL-NEXT: retq
|
|
%c = and <16 x i1>%a, %b
|
|
ret <16 x i1> %c
|
|
}
|
|
|
|
define <8 x i1> @test3(<8 x i1>%a, <8 x i1>%b) {
|
|
; ALL_X64-LABEL: test3:
|
|
; ALL_X64: ## %bb.0:
|
|
; ALL_X64-NEXT: vandps %xmm1, %xmm0, %xmm0
|
|
; ALL_X64-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test3:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: vandps %xmm1, %xmm0, %xmm0
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test3:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: vpsllw $15, %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpmovw2m %xmm1, %k0
|
|
; FASTISEL-NEXT: vpsllw $15, %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpmovw2m %xmm0, %k1
|
|
; FASTISEL-NEXT: kandb %k0, %k1, %k0
|
|
; FASTISEL-NEXT: vpmovm2w %k0, %xmm0
|
|
; FASTISEL-NEXT: retq
|
|
%c = and <8 x i1>%a, %b
|
|
ret <8 x i1> %c
|
|
}
|
|
|
|
define <4 x i1> @test4(<4 x i1>%a, <4 x i1>%b) {
|
|
; ALL_X64-LABEL: test4:
|
|
; ALL_X64: ## %bb.0:
|
|
; ALL_X64-NEXT: vandps %xmm1, %xmm0, %xmm0
|
|
; ALL_X64-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test4:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: vandps %xmm1, %xmm0, %xmm0
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test4:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: vpslld $31, %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpmovd2m %xmm1, %k0
|
|
; FASTISEL-NEXT: vpslld $31, %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpmovd2m %xmm0, %k1
|
|
; FASTISEL-NEXT: kandw %k0, %k1, %k0
|
|
; FASTISEL-NEXT: vpmovm2d %k0, %xmm0
|
|
; FASTISEL-NEXT: retq
|
|
%c = and <4 x i1>%a, %b
|
|
ret <4 x i1> %c
|
|
}
|
|
|
|
declare <8 x i1> @func8xi1(<8 x i1> %a)
|
|
|
|
define <8 x i32> @test5(<8 x i32>%a, <8 x i32>%b) {
|
|
; KNL-LABEL: test5:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: pushq %rax
|
|
; KNL-NEXT: .cfi_def_cfa_offset 16
|
|
; KNL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0
|
|
; KNL-NEXT: vpmovdw %zmm0, %ymm0
|
|
; KNL-NEXT: ## kill: def $xmm0 killed $xmm0 killed $ymm0
|
|
; KNL-NEXT: callq _func8xi1
|
|
; KNL-NEXT: vpmovzxwd {{.*#+}} 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
|
|
; KNL-NEXT: vpslld $31, %ymm0, %ymm0
|
|
; KNL-NEXT: vpsrad $31, %ymm0, %ymm0
|
|
; KNL-NEXT: popq %rax
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: test5:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: pushq %rax
|
|
; SKX-NEXT: .cfi_def_cfa_offset 16
|
|
; SKX-NEXT: vpcmpgtd %ymm1, %ymm0, %k0
|
|
; SKX-NEXT: vpmovm2w %k0, %xmm0
|
|
; SKX-NEXT: vzeroupper
|
|
; SKX-NEXT: callq _func8xi1
|
|
; SKX-NEXT: vpmovzxwd {{.*#+}} 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
|
|
; SKX-NEXT: vpslld $31, %ymm0, %ymm0
|
|
; SKX-NEXT: vpsrad $31, %ymm0, %ymm0
|
|
; SKX-NEXT: popq %rax
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test5:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: subl $12, %esp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 16
|
|
; KNL_X32-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0
|
|
; KNL_X32-NEXT: vpmovdw %zmm0, %ymm0
|
|
; KNL_X32-NEXT: ## kill: def $xmm0 killed $xmm0 killed $ymm0
|
|
; KNL_X32-NEXT: calll _func8xi1
|
|
; KNL_X32-NEXT: vpmovzxwd {{.*#+}} 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
|
|
; KNL_X32-NEXT: vpslld $31, %ymm0, %ymm0
|
|
; KNL_X32-NEXT: vpsrad $31, %ymm0, %ymm0
|
|
; KNL_X32-NEXT: addl $12, %esp
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test5:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: pushq %rax
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 16
|
|
; FASTISEL-NEXT: vpcmpgtd %ymm1, %ymm0, %k0
|
|
; FASTISEL-NEXT: vpmovm2w %k0, %xmm0
|
|
; FASTISEL-NEXT: vzeroupper
|
|
; FASTISEL-NEXT: callq _func8xi1
|
|
; FASTISEL-NEXT: vpsllw $15, %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpmovw2m %xmm0, %k0
|
|
; FASTISEL-NEXT: vpmovm2d %k0, %ymm0
|
|
; FASTISEL-NEXT: popq %rax
|
|
; FASTISEL-NEXT: retq
|
|
%cmpRes = icmp sgt <8 x i32>%a, %b
|
|
%resi = call <8 x i1> @func8xi1(<8 x i1> %cmpRes)
|
|
%res = sext <8 x i1>%resi to <8 x i32>
|
|
ret <8 x i32> %res
|
|
}
|
|
|
|
declare <16 x i1> @func16xi1(<16 x i1> %a)
|
|
|
|
define <16 x i32> @test6(<16 x i32>%a, <16 x i32>%b) {
|
|
; KNL-LABEL: test6:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: pushq %rax
|
|
; KNL-NEXT: .cfi_def_cfa_offset 16
|
|
; KNL-NEXT: vpcmpgtd %zmm1, %zmm0, %k1
|
|
; KNL-NEXT: vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1
|
|
; KNL-NEXT: vpmovdb %zmm0, %xmm0
|
|
; KNL-NEXT: callq _func16xi1
|
|
; KNL-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
|
|
; KNL-NEXT: vpslld $31, %zmm0, %zmm0
|
|
; KNL-NEXT: vpsrad $31, %zmm0, %zmm0
|
|
; KNL-NEXT: popq %rax
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: test6:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: pushq %rax
|
|
; SKX-NEXT: .cfi_def_cfa_offset 16
|
|
; SKX-NEXT: vpcmpgtd %zmm1, %zmm0, %k0
|
|
; SKX-NEXT: vpmovm2b %k0, %xmm0
|
|
; SKX-NEXT: vzeroupper
|
|
; SKX-NEXT: callq _func16xi1
|
|
; SKX-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
|
|
; SKX-NEXT: vpslld $31, %zmm0, %zmm0
|
|
; SKX-NEXT: vpsrad $31, %zmm0, %zmm0
|
|
; SKX-NEXT: popq %rax
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test6:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: subl $12, %esp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 16
|
|
; KNL_X32-NEXT: vpcmpgtd %zmm1, %zmm0, %k1
|
|
; KNL_X32-NEXT: vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1
|
|
; KNL_X32-NEXT: vpmovdb %zmm0, %xmm0
|
|
; KNL_X32-NEXT: calll _func16xi1
|
|
; KNL_X32-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
|
|
; KNL_X32-NEXT: vpslld $31, %zmm0, %zmm0
|
|
; KNL_X32-NEXT: vpsrad $31, %zmm0, %zmm0
|
|
; KNL_X32-NEXT: addl $12, %esp
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test6:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: pushq %rax
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 16
|
|
; FASTISEL-NEXT: vpcmpgtd %zmm1, %zmm0, %k0
|
|
; FASTISEL-NEXT: vpmovm2b %k0, %xmm0
|
|
; FASTISEL-NEXT: vzeroupper
|
|
; FASTISEL-NEXT: callq _func16xi1
|
|
; FASTISEL-NEXT: vpsllw $7, %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpmovb2m %xmm0, %k0
|
|
; FASTISEL-NEXT: vpmovm2d %k0, %zmm0
|
|
; FASTISEL-NEXT: popq %rax
|
|
; FASTISEL-NEXT: retq
|
|
%cmpRes = icmp sgt <16 x i32>%a, %b
|
|
%resi = call <16 x i1> @func16xi1(<16 x i1> %cmpRes)
|
|
%res = sext <16 x i1>%resi to <16 x i32>
|
|
ret <16 x i32> %res
|
|
}
|
|
|
|
declare <4 x i1> @func4xi1(<4 x i1> %a)
|
|
|
|
define <4 x i32> @test7(<4 x i32>%a, <4 x i32>%b) {
|
|
; ALL_X64-LABEL: test7:
|
|
; ALL_X64: ## %bb.0:
|
|
; ALL_X64-NEXT: pushq %rax
|
|
; ALL_X64-NEXT: .cfi_def_cfa_offset 16
|
|
; ALL_X64-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0
|
|
; ALL_X64-NEXT: callq _func4xi1
|
|
; ALL_X64-NEXT: vpslld $31, %xmm0, %xmm0
|
|
; ALL_X64-NEXT: vpsrad $31, %xmm0, %xmm0
|
|
; ALL_X64-NEXT: popq %rax
|
|
; ALL_X64-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test7:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: subl $12, %esp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 16
|
|
; KNL_X32-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0
|
|
; KNL_X32-NEXT: calll _func4xi1
|
|
; KNL_X32-NEXT: vpslld $31, %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpsrad $31, %xmm0, %xmm0
|
|
; KNL_X32-NEXT: addl $12, %esp
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test7:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: pushq %rax
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 16
|
|
; FASTISEL-NEXT: vpcmpgtd %xmm1, %xmm0, %k0
|
|
; FASTISEL-NEXT: vpmovm2d %k0, %xmm0
|
|
; FASTISEL-NEXT: callq _func4xi1
|
|
; FASTISEL-NEXT: vpslld $31, %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpmovd2m %xmm0, %k0
|
|
; FASTISEL-NEXT: vpmovm2d %k0, %xmm0
|
|
; FASTISEL-NEXT: popq %rax
|
|
; FASTISEL-NEXT: retq
|
|
%cmpRes = icmp sgt <4 x i32>%a, %b
|
|
%resi = call <4 x i1> @func4xi1(<4 x i1> %cmpRes)
|
|
%res = sext <4 x i1>%resi to <4 x i32>
|
|
ret <4 x i32> %res
|
|
}
|
|
|
|
define <8 x i1> @test7a(<8 x i32>%a, <8 x i32>%b) {
|
|
; KNL-LABEL: test7a:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: pushq %rax
|
|
; KNL-NEXT: .cfi_def_cfa_offset 16
|
|
; KNL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0
|
|
; KNL-NEXT: vpmovdw %zmm0, %ymm0
|
|
; KNL-NEXT: ## kill: def $xmm0 killed $xmm0 killed $ymm0
|
|
; KNL-NEXT: callq _func8xi1
|
|
; KNL-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
|
|
; KNL-NEXT: popq %rax
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: test7a:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: pushq %rax
|
|
; SKX-NEXT: .cfi_def_cfa_offset 16
|
|
; SKX-NEXT: vpcmpgtd %ymm1, %ymm0, %k0
|
|
; SKX-NEXT: vpmovm2w %k0, %xmm0
|
|
; SKX-NEXT: vzeroupper
|
|
; SKX-NEXT: callq _func8xi1
|
|
; SKX-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0
|
|
; SKX-NEXT: popq %rax
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test7a:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: subl $12, %esp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 16
|
|
; KNL_X32-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0
|
|
; KNL_X32-NEXT: vpmovdw %zmm0, %ymm0
|
|
; KNL_X32-NEXT: ## kill: def $xmm0 killed $xmm0 killed $ymm0
|
|
; KNL_X32-NEXT: calll _func8xi1
|
|
; KNL_X32-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0
|
|
; KNL_X32-NEXT: addl $12, %esp
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test7a:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: pushq %rax
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 16
|
|
; FASTISEL-NEXT: vpcmpgtd %ymm1, %ymm0, %k0
|
|
; FASTISEL-NEXT: vpmovm2w %k0, %xmm0
|
|
; FASTISEL-NEXT: vzeroupper
|
|
; FASTISEL-NEXT: callq _func8xi1
|
|
; FASTISEL-NEXT: vpandd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0
|
|
; FASTISEL-NEXT: popq %rax
|
|
; FASTISEL-NEXT: retq
|
|
%cmpRes = icmp sgt <8 x i32>%a, %b
|
|
%resi = call <8 x i1> @func8xi1(<8 x i1> %cmpRes)
|
|
%res = and <8 x i1>%resi, <i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false>
|
|
ret <8 x i1> %res
|
|
}
|
|
|
|
define <16 x i8> @test8(<16 x i8> %a1, <16 x i8> %a2, i1 %cond) {
|
|
; ALL_X64-LABEL: test8:
|
|
; ALL_X64: ## %bb.0:
|
|
; ALL_X64-NEXT: testb $1, %dil
|
|
; ALL_X64-NEXT: jne LBB8_2
|
|
; ALL_X64-NEXT: ## %bb.1:
|
|
; ALL_X64-NEXT: vmovaps %xmm1, %xmm0
|
|
; ALL_X64-NEXT: LBB8_2:
|
|
; ALL_X64-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test8:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: testb $1, 4(%esp)
|
|
; KNL_X32-NEXT: jne LBB8_2
|
|
; KNL_X32-NEXT: ## %bb.1:
|
|
; KNL_X32-NEXT: vmovaps %xmm1, %xmm0
|
|
; KNL_X32-NEXT: LBB8_2:
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test8:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: testb $1, %dil
|
|
; FASTISEL-NEXT: jne LBB8_2
|
|
; FASTISEL-NEXT: ## %bb.1:
|
|
; FASTISEL-NEXT: vmovaps %xmm1, %xmm0
|
|
; FASTISEL-NEXT: LBB8_2:
|
|
; FASTISEL-NEXT: retq
|
|
%res = select i1 %cond, <16 x i8> %a1, <16 x i8> %a2
|
|
ret <16 x i8> %res
|
|
}
|
|
|
|
define i1 @test9(double %a, double %b) {
|
|
; ALL_X64-LABEL: test9:
|
|
; ALL_X64: ## %bb.0:
|
|
; ALL_X64-NEXT: vucomisd %xmm0, %xmm1
|
|
; ALL_X64-NEXT: setb %al
|
|
; ALL_X64-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test9:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
|
|
; KNL_X32-NEXT: vucomisd 4(%esp), %xmm0
|
|
; KNL_X32-NEXT: setb %al
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test9:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: vucomisd %xmm0, %xmm1
|
|
; FASTISEL-NEXT: setb %al
|
|
; FASTISEL-NEXT: retq
|
|
%c = fcmp ugt double %a, %b
|
|
ret i1 %c
|
|
}
|
|
|
|
define i32 @test10(i32 %a, i32 %b, i1 %cond) {
|
|
; ALL_X64-LABEL: test10:
|
|
; ALL_X64: ## %bb.0:
|
|
; ALL_X64-NEXT: movl %edi, %eax
|
|
; ALL_X64-NEXT: testb $1, %dl
|
|
; ALL_X64-NEXT: cmovel %esi, %eax
|
|
; ALL_X64-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test10:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: testb $1, 12(%esp)
|
|
; KNL_X32-NEXT: leal 4(%esp), %eax
|
|
; KNL_X32-NEXT: leal 8(%esp), %ecx
|
|
; KNL_X32-NEXT: cmovnel %eax, %ecx
|
|
; KNL_X32-NEXT: movl (%ecx), %eax
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test10:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: movl %edi, %eax
|
|
; FASTISEL-NEXT: testb $1, %dl
|
|
; FASTISEL-NEXT: cmovel %esi, %eax
|
|
; FASTISEL-NEXT: retq
|
|
%c = select i1 %cond, i32 %a, i32 %b
|
|
ret i32 %c
|
|
}
|
|
|
|
define i1 @test11(i32 %a, i32 %b) {
|
|
; ALL_X64-LABEL: test11:
|
|
; ALL_X64: ## %bb.0:
|
|
; ALL_X64-NEXT: cmpl %esi, %edi
|
|
; ALL_X64-NEXT: setg %al
|
|
; ALL_X64-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test11:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: movl 4(%esp), %eax
|
|
; KNL_X32-NEXT: cmpl 8(%esp), %eax
|
|
; KNL_X32-NEXT: setg %al
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test11:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: cmpl %esi, %edi
|
|
; FASTISEL-NEXT: setg %al
|
|
; FASTISEL-NEXT: retq
|
|
%c = icmp sgt i32 %a, %b
|
|
ret i1 %c
|
|
}
|
|
|
|
define i32 @test12(i32 %a1, i32 %a2, i32 %b1) {
|
|
; ALL_X64-LABEL: test12:
|
|
; ALL_X64: ## %bb.0:
|
|
; ALL_X64-NEXT: pushq %rbp
|
|
; ALL_X64-NEXT: .cfi_def_cfa_offset 16
|
|
; ALL_X64-NEXT: pushq %r14
|
|
; ALL_X64-NEXT: .cfi_def_cfa_offset 24
|
|
; ALL_X64-NEXT: pushq %rbx
|
|
; ALL_X64-NEXT: .cfi_def_cfa_offset 32
|
|
; ALL_X64-NEXT: .cfi_offset %rbx, -32
|
|
; ALL_X64-NEXT: .cfi_offset %r14, -24
|
|
; ALL_X64-NEXT: .cfi_offset %rbp, -16
|
|
; ALL_X64-NEXT: movl %esi, %ebx
|
|
; ALL_X64-NEXT: movl %edi, %ebp
|
|
; ALL_X64-NEXT: movl %edx, %esi
|
|
; ALL_X64-NEXT: callq _test11
|
|
; ALL_X64-NEXT: movzbl %al, %r14d
|
|
; ALL_X64-NEXT: movl %ebp, %edi
|
|
; ALL_X64-NEXT: movl %ebx, %esi
|
|
; ALL_X64-NEXT: movl %r14d, %edx
|
|
; ALL_X64-NEXT: callq _test10
|
|
; ALL_X64-NEXT: xorl %ecx, %ecx
|
|
; ALL_X64-NEXT: testb $1, %r14b
|
|
; ALL_X64-NEXT: cmovel %ecx, %eax
|
|
; ALL_X64-NEXT: popq %rbx
|
|
; ALL_X64-NEXT: popq %r14
|
|
; ALL_X64-NEXT: popq %rbp
|
|
; ALL_X64-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test12:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: pushl %ebx
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 8
|
|
; KNL_X32-NEXT: pushl %edi
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 12
|
|
; KNL_X32-NEXT: pushl %esi
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 16
|
|
; KNL_X32-NEXT: subl $16, %esp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 32
|
|
; KNL_X32-NEXT: .cfi_offset %esi, -16
|
|
; KNL_X32-NEXT: .cfi_offset %edi, -12
|
|
; KNL_X32-NEXT: .cfi_offset %ebx, -8
|
|
; KNL_X32-NEXT: movl 36(%esp), %esi
|
|
; KNL_X32-NEXT: movl 32(%esp), %edi
|
|
; KNL_X32-NEXT: movl 40(%esp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 4(%esp)
|
|
; KNL_X32-NEXT: movl %edi, (%esp)
|
|
; KNL_X32-NEXT: calll _test11
|
|
; KNL_X32-NEXT: movl %eax, %ebx
|
|
; KNL_X32-NEXT: movzbl %al, %eax
|
|
; KNL_X32-NEXT: movl %eax, 8(%esp)
|
|
; KNL_X32-NEXT: movl %esi, 4(%esp)
|
|
; KNL_X32-NEXT: movl %edi, (%esp)
|
|
; KNL_X32-NEXT: calll _test10
|
|
; KNL_X32-NEXT: xorl %ecx, %ecx
|
|
; KNL_X32-NEXT: testb $1, %bl
|
|
; KNL_X32-NEXT: cmovel %ecx, %eax
|
|
; KNL_X32-NEXT: addl $16, %esp
|
|
; KNL_X32-NEXT: popl %esi
|
|
; KNL_X32-NEXT: popl %edi
|
|
; KNL_X32-NEXT: popl %ebx
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test12:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: pushq %rbp
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 16
|
|
; FASTISEL-NEXT: pushq %r14
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 24
|
|
; FASTISEL-NEXT: pushq %rbx
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 32
|
|
; FASTISEL-NEXT: .cfi_offset %rbx, -32
|
|
; FASTISEL-NEXT: .cfi_offset %r14, -24
|
|
; FASTISEL-NEXT: .cfi_offset %rbp, -16
|
|
; FASTISEL-NEXT: movl %esi, %ebx
|
|
; FASTISEL-NEXT: movl %edi, %ebp
|
|
; FASTISEL-NEXT: movl %edx, %esi
|
|
; FASTISEL-NEXT: callq _test11
|
|
; FASTISEL-NEXT: movzbl %al, %r14d
|
|
; FASTISEL-NEXT: movl %ebp, %edi
|
|
; FASTISEL-NEXT: movl %ebx, %esi
|
|
; FASTISEL-NEXT: movl %r14d, %edx
|
|
; FASTISEL-NEXT: callq _test10
|
|
; FASTISEL-NEXT: xorl %ecx, %ecx
|
|
; FASTISEL-NEXT: testb $1, %r14b
|
|
; FASTISEL-NEXT: cmovel %ecx, %eax
|
|
; FASTISEL-NEXT: popq %rbx
|
|
; FASTISEL-NEXT: popq %r14
|
|
; FASTISEL-NEXT: popq %rbp
|
|
; FASTISEL-NEXT: retq
|
|
%cond = call i1 @test11(i32 %a1, i32 %b1)
|
|
%res = call i32 @test10(i32 %a1, i32 %a2, i1 %cond)
|
|
%res1 = select i1 %cond, i32 %res, i32 0
|
|
ret i32 %res1
|
|
}
|
|
|
|
define <1 x i1> @test13(ptr %foo) {
|
|
; KNL-LABEL: test13:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: movzbl (%rdi), %eax
|
|
; KNL-NEXT: ## kill: def $al killed $al killed $eax
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: test13:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: kmovb (%rdi), %k0
|
|
; SKX-NEXT: kmovd %k0, %eax
|
|
; SKX-NEXT: ## kill: def $al killed $al killed $eax
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test13:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: movl 4(%esp), %eax
|
|
; KNL_X32-NEXT: movzbl (%eax), %eax
|
|
; KNL_X32-NEXT: ## kill: def $al killed $al killed $eax
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test13:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: kmovb (%rdi), %k0
|
|
; FASTISEL-NEXT: kmovd %k0, %eax
|
|
; FASTISEL-NEXT: ## kill: def $al killed $al killed $eax
|
|
; FASTISEL-NEXT: retq
|
|
%bar = load <1 x i1>, ptr %foo
|
|
ret <1 x i1> %bar
|
|
}
|
|
|
|
define void @test14(ptr %x) {
|
|
; KNL-LABEL: test14:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: pushq %rbx
|
|
; KNL-NEXT: .cfi_def_cfa_offset 16
|
|
; KNL-NEXT: .cfi_offset %rbx, -16
|
|
; KNL-NEXT: movq %rdi, %rbx
|
|
; KNL-NEXT: vmovaps (%rdi), %zmm0
|
|
; KNL-NEXT: callq _test14_callee
|
|
; KNL-NEXT: vmovaps %zmm0, (%rbx)
|
|
; KNL-NEXT: popq %rbx
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: test14:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: pushq %rbx
|
|
; SKX-NEXT: .cfi_def_cfa_offset 16
|
|
; SKX-NEXT: .cfi_offset %rbx, -16
|
|
; SKX-NEXT: movq %rdi, %rbx
|
|
; SKX-NEXT: vmovaps (%rdi), %zmm0
|
|
; SKX-NEXT: callq _test14_callee
|
|
; SKX-NEXT: vmovaps %zmm0, (%rbx)
|
|
; SKX-NEXT: popq %rbx
|
|
; SKX-NEXT: vzeroupper
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test14:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: pushl %esi
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 8
|
|
; KNL_X32-NEXT: subl $8, %esp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 16
|
|
; KNL_X32-NEXT: .cfi_offset %esi, -8
|
|
; KNL_X32-NEXT: movl 16(%esp), %esi
|
|
; KNL_X32-NEXT: vmovaps (%esi), %zmm0
|
|
; KNL_X32-NEXT: calll _test14_callee
|
|
; KNL_X32-NEXT: vmovaps %zmm0, (%esi)
|
|
; KNL_X32-NEXT: addl $8, %esp
|
|
; KNL_X32-NEXT: popl %esi
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test14:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: pushq %rbx
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 16
|
|
; FASTISEL-NEXT: .cfi_offset %rbx, -16
|
|
; FASTISEL-NEXT: movq %rdi, %rbx
|
|
; FASTISEL-NEXT: vmovaps (%rdi), %zmm0
|
|
; FASTISEL-NEXT: callq _test14_callee
|
|
; FASTISEL-NEXT: vmovaps %zmm0, (%rbx)
|
|
; FASTISEL-NEXT: popq %rbx
|
|
; FASTISEL-NEXT: vzeroupper
|
|
; FASTISEL-NEXT: retq
|
|
%a = load <32 x i16>, ptr %x
|
|
%b = call <32 x i16> @test14_callee(<32 x i16> %a)
|
|
store <32 x i16> %b, ptr %x
|
|
ret void
|
|
}
|
|
declare <32 x i16> @test14_callee(<32 x i16>)
|
|
|
|
define void @test15(ptr %x) {
|
|
; KNL-LABEL: test15:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: pushq %rbx
|
|
; KNL-NEXT: .cfi_def_cfa_offset 16
|
|
; KNL-NEXT: .cfi_offset %rbx, -16
|
|
; KNL-NEXT: movq %rdi, %rbx
|
|
; KNL-NEXT: vmovaps (%rdi), %zmm0
|
|
; KNL-NEXT: callq _test15_callee
|
|
; KNL-NEXT: vmovaps %zmm0, (%rbx)
|
|
; KNL-NEXT: popq %rbx
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: test15:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: pushq %rbx
|
|
; SKX-NEXT: .cfi_def_cfa_offset 16
|
|
; SKX-NEXT: .cfi_offset %rbx, -16
|
|
; SKX-NEXT: movq %rdi, %rbx
|
|
; SKX-NEXT: vmovaps (%rdi), %zmm0
|
|
; SKX-NEXT: callq _test15_callee
|
|
; SKX-NEXT: vmovaps %zmm0, (%rbx)
|
|
; SKX-NEXT: popq %rbx
|
|
; SKX-NEXT: vzeroupper
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test15:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: pushl %esi
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 8
|
|
; KNL_X32-NEXT: subl $8, %esp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 16
|
|
; KNL_X32-NEXT: .cfi_offset %esi, -8
|
|
; KNL_X32-NEXT: movl 16(%esp), %esi
|
|
; KNL_X32-NEXT: vmovaps (%esi), %zmm0
|
|
; KNL_X32-NEXT: calll _test15_callee
|
|
; KNL_X32-NEXT: vmovaps %zmm0, (%esi)
|
|
; KNL_X32-NEXT: addl $8, %esp
|
|
; KNL_X32-NEXT: popl %esi
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: test15:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: pushq %rbx
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 16
|
|
; FASTISEL-NEXT: .cfi_offset %rbx, -16
|
|
; FASTISEL-NEXT: movq %rdi, %rbx
|
|
; FASTISEL-NEXT: vmovaps (%rdi), %zmm0
|
|
; FASTISEL-NEXT: callq _test15_callee
|
|
; FASTISEL-NEXT: vmovaps %zmm0, (%rbx)
|
|
; FASTISEL-NEXT: popq %rbx
|
|
; FASTISEL-NEXT: vzeroupper
|
|
; FASTISEL-NEXT: retq
|
|
%a = load <64 x i8>, ptr %x
|
|
%b = call <64 x i8> @test15_callee(<64 x i8> %a)
|
|
store <64 x i8> %b, ptr %x
|
|
ret void
|
|
}
|
|
declare <64 x i8> @test15_callee(<64 x i8>)
|
|
|
|
define <17 x i1> @test16(<17 x i1> %a, <17 x i1> %b) nounwind {
|
|
; KNL-LABEL: test16:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: pushq %rbp
|
|
; KNL-NEXT: pushq %r15
|
|
; KNL-NEXT: pushq %r14
|
|
; KNL-NEXT: pushq %r13
|
|
; KNL-NEXT: pushq %r12
|
|
; KNL-NEXT: pushq %rbx
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 160(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $2, 168(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $3, 176(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $4, 184(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $5, 192(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $6, 200(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $7, 208(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $8, 216(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $9, 224(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $10, 232(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $11, 240(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $12, 248(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $13, 256(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $14, 264(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $15, 272(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpbroadcastd {{.*#+}} zmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
|
|
; KNL-NEXT: movq %rdi, %rax
|
|
; KNL-NEXT: vmovd %esi, %xmm2
|
|
; KNL-NEXT: vpinsrb $1, %edx, %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $2, %ecx, %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $3, %r8d, %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $4, %r9d, %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $5, 56(%rsp), %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $6, 64(%rsp), %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $7, 72(%rsp), %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $8, 80(%rsp), %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $9, 88(%rsp), %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $10, 96(%rsp), %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $11, 104(%rsp), %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $12, 112(%rsp), %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $13, 120(%rsp), %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $14, 128(%rsp), %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $15, 136(%rsp), %xmm2, %xmm2
|
|
; KNL-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
|
|
; KNL-NEXT: kmovw 280(%rsp), %k0
|
|
; KNL-NEXT: kmovw 144(%rsp), %k1
|
|
; KNL-NEXT: kandw %k0, %k1, %k1
|
|
; KNL-NEXT: vptestmd %zmm1, %zmm0, %k2
|
|
; KNL-NEXT: vpmovzxbd {{.*#+}} zmm0 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero,xmm2[4],zero,zero,zero,xmm2[5],zero,zero,zero,xmm2[6],zero,zero,zero,xmm2[7],zero,zero,zero,xmm2[8],zero,zero,zero,xmm2[9],zero,zero,zero,xmm2[10],zero,zero,zero,xmm2[11],zero,zero,zero,xmm2[12],zero,zero,zero,xmm2[13],zero,zero,zero,xmm2[14],zero,zero,zero,xmm2[15],zero,zero,zero
|
|
; KNL-NEXT: vptestmd %zmm1, %zmm0, %k0 {%k2}
|
|
; KNL-NEXT: kmovw %k1, %edx
|
|
; KNL-NEXT: kshiftrw $1, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %r9d
|
|
; KNL-NEXT: kshiftrw $2, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %r8d
|
|
; KNL-NEXT: kshiftrw $3, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %esi
|
|
; KNL-NEXT: kshiftrw $4, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %edi
|
|
; KNL-NEXT: kshiftrw $5, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %ecx
|
|
; KNL-NEXT: kshiftrw $6, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %r10d
|
|
; KNL-NEXT: kshiftrw $7, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %ebx
|
|
; KNL-NEXT: kshiftrw $8, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %ebp
|
|
; KNL-NEXT: kshiftrw $9, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %r14d
|
|
; KNL-NEXT: kshiftrw $10, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %r11d
|
|
; KNL-NEXT: kshiftrw $11, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %r15d
|
|
; KNL-NEXT: kshiftrw $12, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %r12d
|
|
; KNL-NEXT: kshiftrw $13, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %r13d
|
|
; KNL-NEXT: kshiftrw $14, %k0, %k1
|
|
; KNL-NEXT: andl $1, %edx
|
|
; KNL-NEXT: movb %dl, 2(%rax)
|
|
; KNL-NEXT: kmovw %k0, %edx
|
|
; KNL-NEXT: andl $1, %edx
|
|
; KNL-NEXT: andl $1, %r9d
|
|
; KNL-NEXT: leal (%rdx,%r9,2), %r9d
|
|
; KNL-NEXT: kmovw %k1, %edx
|
|
; KNL-NEXT: kshiftrw $15, %k0, %k0
|
|
; KNL-NEXT: andl $1, %r8d
|
|
; KNL-NEXT: leal (%r9,%r8,4), %r9d
|
|
; KNL-NEXT: kmovw %k0, %r8d
|
|
; KNL-NEXT: andl $1, %esi
|
|
; KNL-NEXT: leal (%r9,%rsi,8), %esi
|
|
; KNL-NEXT: andl $1, %edi
|
|
; KNL-NEXT: shll $4, %edi
|
|
; KNL-NEXT: orl %esi, %edi
|
|
; KNL-NEXT: andl $1, %ecx
|
|
; KNL-NEXT: shll $5, %ecx
|
|
; KNL-NEXT: orl %edi, %ecx
|
|
; KNL-NEXT: andl $1, %r10d
|
|
; KNL-NEXT: shll $6, %r10d
|
|
; KNL-NEXT: andl $1, %ebx
|
|
; KNL-NEXT: shll $7, %ebx
|
|
; KNL-NEXT: orl %r10d, %ebx
|
|
; KNL-NEXT: andl $1, %ebp
|
|
; KNL-NEXT: shll $8, %ebp
|
|
; KNL-NEXT: orl %ebx, %ebp
|
|
; KNL-NEXT: andl $1, %r14d
|
|
; KNL-NEXT: shll $9, %r14d
|
|
; KNL-NEXT: orl %ebp, %r14d
|
|
; KNL-NEXT: andl $1, %r11d
|
|
; KNL-NEXT: shll $10, %r11d
|
|
; KNL-NEXT: orl %r14d, %r11d
|
|
; KNL-NEXT: orl %ecx, %r11d
|
|
; KNL-NEXT: andl $1, %r15d
|
|
; KNL-NEXT: shll $11, %r15d
|
|
; KNL-NEXT: andl $1, %r12d
|
|
; KNL-NEXT: shll $12, %r12d
|
|
; KNL-NEXT: orl %r15d, %r12d
|
|
; KNL-NEXT: andl $1, %r13d
|
|
; KNL-NEXT: shll $13, %r13d
|
|
; KNL-NEXT: orl %r12d, %r13d
|
|
; KNL-NEXT: andl $1, %edx
|
|
; KNL-NEXT: shll $14, %edx
|
|
; KNL-NEXT: orl %r13d, %edx
|
|
; KNL-NEXT: andl $1, %r8d
|
|
; KNL-NEXT: shll $15, %r8d
|
|
; KNL-NEXT: orl %edx, %r8d
|
|
; KNL-NEXT: orl %r11d, %r8d
|
|
; KNL-NEXT: movw %r8w, (%rax)
|
|
; KNL-NEXT: popq %rbx
|
|
; KNL-NEXT: popq %r12
|
|
; KNL-NEXT: popq %r13
|
|
; KNL-NEXT: popq %r14
|
|
; KNL-NEXT: popq %r15
|
|
; KNL-NEXT: popq %rbp
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: test16:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: pushq %rbp
|
|
; SKX-NEXT: pushq %r15
|
|
; SKX-NEXT: pushq %r14
|
|
; SKX-NEXT: pushq %r13
|
|
; SKX-NEXT: pushq %r12
|
|
; SKX-NEXT: pushq %rbx
|
|
; SKX-NEXT: movq %rdi, %rax
|
|
; SKX-NEXT: vmovd %esi, %xmm0
|
|
; SKX-NEXT: vpinsrb $1, %edx, %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $2, %ecx, %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $3, %r8d, %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $4, %r9d, %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $5, 56(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $6, 64(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $7, 72(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $8, 80(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $9, 88(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $10, 96(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $11, 104(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $12, 112(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $13, 120(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $14, 128(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $15, 136(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpbroadcastb 144(%rsp), %xmm1
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 160(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $2, 168(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $3, 176(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $4, 184(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $5, 192(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $6, 200(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $7, 208(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $8, 216(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $9, 224(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $10, 232(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $11, 240(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $12, 248(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $13, 256(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $14, 264(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
|
|
; SKX-NEXT: vpinsrb $15, 272(%rsp), %xmm2, %xmm1
|
|
; SKX-NEXT: vpbroadcastb 280(%rsp), %xmm2
|
|
; SKX-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm1
|
|
; SKX-NEXT: vpbroadcastd {{.*#+}} ymm2 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
|
|
; SKX-NEXT: vptestmb %ymm2, %ymm1, %k1
|
|
; SKX-NEXT: vptestmb %ymm2, %ymm0, %k0 {%k1}
|
|
; SKX-NEXT: kshiftrd $16, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %edx
|
|
; SKX-NEXT: kshiftrd $1, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %r9d
|
|
; SKX-NEXT: kshiftrd $2, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %r8d
|
|
; SKX-NEXT: kshiftrd $3, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %esi
|
|
; SKX-NEXT: kshiftrd $4, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %edi
|
|
; SKX-NEXT: kshiftrd $5, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %ecx
|
|
; SKX-NEXT: kshiftrd $6, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %r10d
|
|
; SKX-NEXT: kshiftrd $7, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %ebx
|
|
; SKX-NEXT: kshiftrd $8, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %ebp
|
|
; SKX-NEXT: kshiftrd $9, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %r14d
|
|
; SKX-NEXT: kshiftrd $10, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %r11d
|
|
; SKX-NEXT: kshiftrd $11, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %r15d
|
|
; SKX-NEXT: kshiftrd $12, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %r12d
|
|
; SKX-NEXT: kshiftrd $13, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %r13d
|
|
; SKX-NEXT: kshiftrd $14, %k0, %k1
|
|
; SKX-NEXT: andl $1, %edx
|
|
; SKX-NEXT: movb %dl, 2(%rax)
|
|
; SKX-NEXT: kmovd %k0, %edx
|
|
; SKX-NEXT: andl $1, %edx
|
|
; SKX-NEXT: andl $1, %r9d
|
|
; SKX-NEXT: leal (%rdx,%r9,2), %r9d
|
|
; SKX-NEXT: kmovd %k1, %edx
|
|
; SKX-NEXT: kshiftrd $15, %k0, %k0
|
|
; SKX-NEXT: andl $1, %r8d
|
|
; SKX-NEXT: leal (%r9,%r8,4), %r9d
|
|
; SKX-NEXT: kmovd %k0, %r8d
|
|
; SKX-NEXT: andl $1, %esi
|
|
; SKX-NEXT: leal (%r9,%rsi,8), %esi
|
|
; SKX-NEXT: andl $1, %edi
|
|
; SKX-NEXT: shll $4, %edi
|
|
; SKX-NEXT: orl %esi, %edi
|
|
; SKX-NEXT: andl $1, %ecx
|
|
; SKX-NEXT: shll $5, %ecx
|
|
; SKX-NEXT: orl %edi, %ecx
|
|
; SKX-NEXT: andl $1, %r10d
|
|
; SKX-NEXT: shll $6, %r10d
|
|
; SKX-NEXT: andl $1, %ebx
|
|
; SKX-NEXT: shll $7, %ebx
|
|
; SKX-NEXT: orl %r10d, %ebx
|
|
; SKX-NEXT: andl $1, %ebp
|
|
; SKX-NEXT: shll $8, %ebp
|
|
; SKX-NEXT: orl %ebx, %ebp
|
|
; SKX-NEXT: andl $1, %r14d
|
|
; SKX-NEXT: shll $9, %r14d
|
|
; SKX-NEXT: orl %ebp, %r14d
|
|
; SKX-NEXT: andl $1, %r11d
|
|
; SKX-NEXT: shll $10, %r11d
|
|
; SKX-NEXT: orl %r14d, %r11d
|
|
; SKX-NEXT: orl %ecx, %r11d
|
|
; SKX-NEXT: andl $1, %r15d
|
|
; SKX-NEXT: shll $11, %r15d
|
|
; SKX-NEXT: andl $1, %r12d
|
|
; SKX-NEXT: shll $12, %r12d
|
|
; SKX-NEXT: orl %r15d, %r12d
|
|
; SKX-NEXT: andl $1, %r13d
|
|
; SKX-NEXT: shll $13, %r13d
|
|
; SKX-NEXT: orl %r12d, %r13d
|
|
; SKX-NEXT: andl $1, %edx
|
|
; SKX-NEXT: shll $14, %edx
|
|
; SKX-NEXT: orl %r13d, %edx
|
|
; SKX-NEXT: andl $1, %r8d
|
|
; SKX-NEXT: shll $15, %r8d
|
|
; SKX-NEXT: orl %edx, %r8d
|
|
; SKX-NEXT: orl %r11d, %r8d
|
|
; SKX-NEXT: movw %r8w, (%rax)
|
|
; SKX-NEXT: popq %rbx
|
|
; SKX-NEXT: popq %r12
|
|
; SKX-NEXT: popq %r13
|
|
; SKX-NEXT: popq %r14
|
|
; SKX-NEXT: popq %r15
|
|
; SKX-NEXT: popq %rbp
|
|
; SKX-NEXT: vzeroupper
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test16:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: pushl %ebp
|
|
; KNL_X32-NEXT: pushl %ebx
|
|
; KNL_X32-NEXT: pushl %edi
|
|
; KNL_X32-NEXT: pushl %esi
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 96(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $2, 100(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $3, 104(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $4, 108(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $5, 112(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $6, 116(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $7, 120(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $8, 124(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $9, 128(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $10, 132(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $11, 136(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $12, 140(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $13, 144(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $14, 148(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $15, 152(%esp), %xmm0, %xmm1
|
|
; KNL_X32-NEXT: vpbroadcastd {{.*#+}} zmm0 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
|
|
; KNL_X32-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero
|
|
; KNL_X32-NEXT: kmovw 156(%esp), %k0
|
|
; KNL_X32-NEXT: kmovw 88(%esp), %k1
|
|
; KNL_X32-NEXT: kandw %k0, %k1, %k1
|
|
; KNL_X32-NEXT: vptestmd %zmm0, %zmm1, %k2
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 28(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $2, 32(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $3, 36(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $4, 40(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $5, 44(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $6, 48(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $7, 52(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $8, 56(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $9, 60(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $10, 64(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $11, 68(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $12, 72(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $13, 76(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $14, 80(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $15, 84(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero
|
|
; KNL_X32-NEXT: movl 20(%esp), %eax
|
|
; KNL_X32-NEXT: vptestmd %zmm0, %zmm1, %k0 {%k2}
|
|
; KNL_X32-NEXT: kmovw %k1, %ebx
|
|
; KNL_X32-NEXT: kshiftrw $1, %k0, %k1
|
|
; KNL_X32-NEXT: kmovw %k1, %ebp
|
|
; KNL_X32-NEXT: kshiftrw $2, %k0, %k1
|
|
; KNL_X32-NEXT: kmovw %k1, %esi
|
|
; KNL_X32-NEXT: kshiftrw $3, %k0, %k1
|
|
; KNL_X32-NEXT: kmovw %k1, %edi
|
|
; KNL_X32-NEXT: kshiftrw $4, %k0, %k1
|
|
; KNL_X32-NEXT: kmovw %k1, %edx
|
|
; KNL_X32-NEXT: kshiftrw $5, %k0, %k1
|
|
; KNL_X32-NEXT: kmovw %k1, %ecx
|
|
; KNL_X32-NEXT: kshiftrw $6, %k0, %k1
|
|
; KNL_X32-NEXT: andl $1, %ebx
|
|
; KNL_X32-NEXT: movb %bl, 2(%eax)
|
|
; KNL_X32-NEXT: kmovw %k0, %ebx
|
|
; KNL_X32-NEXT: andl $1, %ebx
|
|
; KNL_X32-NEXT: andl $1, %ebp
|
|
; KNL_X32-NEXT: leal (%ebx,%ebp,2), %ebx
|
|
; KNL_X32-NEXT: kmovw %k1, %ebp
|
|
; KNL_X32-NEXT: kshiftrw $7, %k0, %k1
|
|
; KNL_X32-NEXT: andl $1, %esi
|
|
; KNL_X32-NEXT: leal (%ebx,%esi,4), %ebx
|
|
; KNL_X32-NEXT: kmovw %k1, %esi
|
|
; KNL_X32-NEXT: kshiftrw $8, %k0, %k1
|
|
; KNL_X32-NEXT: andl $1, %edi
|
|
; KNL_X32-NEXT: leal (%ebx,%edi,8), %ebx
|
|
; KNL_X32-NEXT: kmovw %k1, %edi
|
|
; KNL_X32-NEXT: kshiftrw $9, %k0, %k1
|
|
; KNL_X32-NEXT: andl $1, %edx
|
|
; KNL_X32-NEXT: shll $4, %edx
|
|
; KNL_X32-NEXT: orl %ebx, %edx
|
|
; KNL_X32-NEXT: kmovw %k1, %ebx
|
|
; KNL_X32-NEXT: kshiftrw $10, %k0, %k1
|
|
; KNL_X32-NEXT: andl $1, %ecx
|
|
; KNL_X32-NEXT: shll $5, %ecx
|
|
; KNL_X32-NEXT: orl %edx, %ecx
|
|
; KNL_X32-NEXT: kmovw %k1, %edx
|
|
; KNL_X32-NEXT: kshiftrw $11, %k0, %k1
|
|
; KNL_X32-NEXT: andl $1, %ebp
|
|
; KNL_X32-NEXT: shll $6, %ebp
|
|
; KNL_X32-NEXT: andl $1, %esi
|
|
; KNL_X32-NEXT: shll $7, %esi
|
|
; KNL_X32-NEXT: orl %ebp, %esi
|
|
; KNL_X32-NEXT: kmovw %k1, %ebp
|
|
; KNL_X32-NEXT: kshiftrw $12, %k0, %k1
|
|
; KNL_X32-NEXT: andl $1, %edi
|
|
; KNL_X32-NEXT: shll $8, %edi
|
|
; KNL_X32-NEXT: orl %esi, %edi
|
|
; KNL_X32-NEXT: kmovw %k1, %esi
|
|
; KNL_X32-NEXT: kshiftrw $13, %k0, %k1
|
|
; KNL_X32-NEXT: andl $1, %ebx
|
|
; KNL_X32-NEXT: shll $9, %ebx
|
|
; KNL_X32-NEXT: orl %edi, %ebx
|
|
; KNL_X32-NEXT: kmovw %k1, %edi
|
|
; KNL_X32-NEXT: kshiftrw $14, %k0, %k1
|
|
; KNL_X32-NEXT: andl $1, %edx
|
|
; KNL_X32-NEXT: shll $10, %edx
|
|
; KNL_X32-NEXT: orl %ebx, %edx
|
|
; KNL_X32-NEXT: kmovw %k1, %ebx
|
|
; KNL_X32-NEXT: kshiftrw $15, %k0, %k0
|
|
; KNL_X32-NEXT: orl %ecx, %edx
|
|
; KNL_X32-NEXT: kmovw %k0, %ecx
|
|
; KNL_X32-NEXT: andl $1, %ebp
|
|
; KNL_X32-NEXT: shll $11, %ebp
|
|
; KNL_X32-NEXT: andl $1, %esi
|
|
; KNL_X32-NEXT: shll $12, %esi
|
|
; KNL_X32-NEXT: orl %ebp, %esi
|
|
; KNL_X32-NEXT: andl $1, %edi
|
|
; KNL_X32-NEXT: shll $13, %edi
|
|
; KNL_X32-NEXT: orl %esi, %edi
|
|
; KNL_X32-NEXT: andl $1, %ebx
|
|
; KNL_X32-NEXT: shll $14, %ebx
|
|
; KNL_X32-NEXT: orl %edi, %ebx
|
|
; KNL_X32-NEXT: andl $1, %ecx
|
|
; KNL_X32-NEXT: shll $15, %ecx
|
|
; KNL_X32-NEXT: orl %ebx, %ecx
|
|
; KNL_X32-NEXT: orl %edx, %ecx
|
|
; KNL_X32-NEXT: movw %cx, (%eax)
|
|
; KNL_X32-NEXT: popl %esi
|
|
; KNL_X32-NEXT: popl %edi
|
|
; KNL_X32-NEXT: popl %ebx
|
|
; KNL_X32-NEXT: popl %ebp
|
|
; KNL_X32-NEXT: retl $4
|
|
;
|
|
; FASTISEL-LABEL: test16:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: pushq %rbp
|
|
; FASTISEL-NEXT: pushq %r15
|
|
; FASTISEL-NEXT: pushq %r14
|
|
; FASTISEL-NEXT: pushq %r13
|
|
; FASTISEL-NEXT: pushq %r12
|
|
; FASTISEL-NEXT: pushq %rbx
|
|
; FASTISEL-NEXT: movq %rdi, %rax
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 160(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $2, 168(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $3, 176(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $4, 184(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $5, 192(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $6, 200(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $7, 208(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $8, 216(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $9, 224(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $10, 232(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $11, 240(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $12, 248(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $13, 256(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $14, 264(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $15, 272(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpbroadcastb 280(%rsp), %xmm1
|
|
; FASTISEL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
|
|
; FASTISEL-NEXT: vpbroadcastd {{.*#+}} ymm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
|
|
; FASTISEL-NEXT: vmovd %esi, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $1, %edx, %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $2, %ecx, %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $3, %r8d, %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $4, %r9d, %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $5, 56(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $6, 64(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $7, 72(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $8, 80(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $9, 88(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $10, 96(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $11, 104(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $12, 112(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $13, 120(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $14, 128(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $15, 136(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpbroadcastb 144(%rsp), %xmm3
|
|
; FASTISEL-NEXT: vptestmb %ymm1, %ymm0, %k0
|
|
; FASTISEL-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm0
|
|
; FASTISEL-NEXT: vptestmb %ymm1, %ymm0, %k1
|
|
; FASTISEL-NEXT: kandd %k0, %k1, %k0
|
|
; FASTISEL-NEXT: kshiftrd $16, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %edx
|
|
; FASTISEL-NEXT: kshiftrd $1, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %r9d
|
|
; FASTISEL-NEXT: kshiftrd $2, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %r8d
|
|
; FASTISEL-NEXT: kshiftrd $3, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %esi
|
|
; FASTISEL-NEXT: kshiftrd $4, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %edi
|
|
; FASTISEL-NEXT: kshiftrd $5, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %ecx
|
|
; FASTISEL-NEXT: kshiftrd $6, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %r10d
|
|
; FASTISEL-NEXT: kshiftrd $7, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %ebx
|
|
; FASTISEL-NEXT: kshiftrd $8, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %ebp
|
|
; FASTISEL-NEXT: kshiftrd $9, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %r14d
|
|
; FASTISEL-NEXT: kshiftrd $10, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %r11d
|
|
; FASTISEL-NEXT: kshiftrd $11, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %r15d
|
|
; FASTISEL-NEXT: kshiftrd $12, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %r12d
|
|
; FASTISEL-NEXT: kshiftrd $13, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %r13d
|
|
; FASTISEL-NEXT: kshiftrd $14, %k0, %k1
|
|
; FASTISEL-NEXT: andl $1, %edx
|
|
; FASTISEL-NEXT: movb %dl, 2(%rax)
|
|
; FASTISEL-NEXT: kmovd %k0, %edx
|
|
; FASTISEL-NEXT: andl $1, %edx
|
|
; FASTISEL-NEXT: andl $1, %r9d
|
|
; FASTISEL-NEXT: leal (%rdx,%r9,2), %r9d
|
|
; FASTISEL-NEXT: kmovd %k1, %edx
|
|
; FASTISEL-NEXT: kshiftrd $15, %k0, %k0
|
|
; FASTISEL-NEXT: andl $1, %r8d
|
|
; FASTISEL-NEXT: leal (%r9,%r8,4), %r9d
|
|
; FASTISEL-NEXT: kmovd %k0, %r8d
|
|
; FASTISEL-NEXT: andl $1, %esi
|
|
; FASTISEL-NEXT: leal (%r9,%rsi,8), %esi
|
|
; FASTISEL-NEXT: andl $1, %edi
|
|
; FASTISEL-NEXT: shll $4, %edi
|
|
; FASTISEL-NEXT: orl %esi, %edi
|
|
; FASTISEL-NEXT: andl $1, %ecx
|
|
; FASTISEL-NEXT: shll $5, %ecx
|
|
; FASTISEL-NEXT: orl %edi, %ecx
|
|
; FASTISEL-NEXT: andl $1, %r10d
|
|
; FASTISEL-NEXT: shll $6, %r10d
|
|
; FASTISEL-NEXT: andl $1, %ebx
|
|
; FASTISEL-NEXT: shll $7, %ebx
|
|
; FASTISEL-NEXT: orl %r10d, %ebx
|
|
; FASTISEL-NEXT: andl $1, %ebp
|
|
; FASTISEL-NEXT: shll $8, %ebp
|
|
; FASTISEL-NEXT: orl %ebx, %ebp
|
|
; FASTISEL-NEXT: andl $1, %r14d
|
|
; FASTISEL-NEXT: shll $9, %r14d
|
|
; FASTISEL-NEXT: orl %ebp, %r14d
|
|
; FASTISEL-NEXT: andl $1, %r11d
|
|
; FASTISEL-NEXT: shll $10, %r11d
|
|
; FASTISEL-NEXT: orl %r14d, %r11d
|
|
; FASTISEL-NEXT: orl %ecx, %r11d
|
|
; FASTISEL-NEXT: andl $1, %r15d
|
|
; FASTISEL-NEXT: shll $11, %r15d
|
|
; FASTISEL-NEXT: andl $1, %r12d
|
|
; FASTISEL-NEXT: shll $12, %r12d
|
|
; FASTISEL-NEXT: orl %r15d, %r12d
|
|
; FASTISEL-NEXT: andl $1, %r13d
|
|
; FASTISEL-NEXT: shll $13, %r13d
|
|
; FASTISEL-NEXT: orl %r12d, %r13d
|
|
; FASTISEL-NEXT: andl $1, %edx
|
|
; FASTISEL-NEXT: shll $14, %edx
|
|
; FASTISEL-NEXT: orl %r13d, %edx
|
|
; FASTISEL-NEXT: andl $1, %r8d
|
|
; FASTISEL-NEXT: shll $15, %r8d
|
|
; FASTISEL-NEXT: orl %edx, %r8d
|
|
; FASTISEL-NEXT: orl %r11d, %r8d
|
|
; FASTISEL-NEXT: movw %r8w, (%rax)
|
|
; FASTISEL-NEXT: popq %rbx
|
|
; FASTISEL-NEXT: popq %r12
|
|
; FASTISEL-NEXT: popq %r13
|
|
; FASTISEL-NEXT: popq %r14
|
|
; FASTISEL-NEXT: popq %r15
|
|
; FASTISEL-NEXT: popq %rbp
|
|
; FASTISEL-NEXT: vzeroupper
|
|
; FASTISEL-NEXT: retq
|
|
%c = and <17 x i1> %a, %b
|
|
ret <17 x i1> %c
|
|
}
|
|
|
|
define <7 x i1> @test17(<7 x i1> %a, <7 x i1> %b, <7 x i1> %c, <7 x i1> %d, <7 x i1>%e, <7 x i1>%f, <7 x i1> %g, <7 x i1> %h, <7 x i1> %i) nounwind {
|
|
; KNL-LABEL: test17:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: movq %rdi, %rax
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 32(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $2, 40(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $3, 48(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $4, 56(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $5, 64(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $6, 72(%rsp), %xmm0, %xmm1
|
|
; KNL-NEXT: vpbroadcastq {{.*#+}} zmm0 = [1,1,1,1,1,1,1,1]
|
|
; KNL-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero,xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero,xmm1[4],zero,zero,zero,zero,zero,zero,zero,xmm1[5],zero,zero,zero,zero,zero,zero,zero,xmm1[6],zero,zero,zero,zero,zero,zero,zero,xmm1[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL-NEXT: vmovd %esi, %xmm2
|
|
; KNL-NEXT: vpinsrb $1, %edx, %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $2, %ecx, %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $3, %r8d, %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $4, %r9d, %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $5, 8(%rsp), %xmm2, %xmm2
|
|
; KNL-NEXT: vpinsrb $6, 16(%rsp), %xmm2, %xmm2
|
|
; KNL-NEXT: vpmovzxbq {{.*#+}} zmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero,xmm2[2],zero,zero,zero,zero,zero,zero,zero,xmm2[3],zero,zero,zero,zero,zero,zero,zero,xmm2[4],zero,zero,zero,zero,zero,zero,zero,xmm2[5],zero,zero,zero,zero,zero,zero,zero,xmm2[6],zero,zero,zero,zero,zero,zero,zero,xmm2[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm3 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 424(%rsp), %xmm3, %xmm3
|
|
; KNL-NEXT: vpinsrb $2, 432(%rsp), %xmm3, %xmm3
|
|
; KNL-NEXT: vpinsrb $3, 440(%rsp), %xmm3, %xmm3
|
|
; KNL-NEXT: vpinsrb $4, 448(%rsp), %xmm3, %xmm3
|
|
; KNL-NEXT: vpinsrb $5, 456(%rsp), %xmm3, %xmm3
|
|
; KNL-NEXT: vpinsrb $6, 464(%rsp), %xmm3, %xmm3
|
|
; KNL-NEXT: vpmovzxbq {{.*#+}} zmm3 = xmm3[0],zero,zero,zero,zero,zero,zero,zero,xmm3[1],zero,zero,zero,zero,zero,zero,zero,xmm3[2],zero,zero,zero,zero,zero,zero,zero,xmm3[3],zero,zero,zero,zero,zero,zero,zero,xmm3[4],zero,zero,zero,zero,zero,zero,zero,xmm3[5],zero,zero,zero,zero,zero,zero,zero,xmm3[6],zero,zero,zero,zero,zero,zero,zero,xmm3[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm4 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 368(%rsp), %xmm4, %xmm4
|
|
; KNL-NEXT: vpinsrb $2, 376(%rsp), %xmm4, %xmm4
|
|
; KNL-NEXT: vpinsrb $3, 384(%rsp), %xmm4, %xmm4
|
|
; KNL-NEXT: vpinsrb $4, 392(%rsp), %xmm4, %xmm4
|
|
; KNL-NEXT: vpinsrb $5, 400(%rsp), %xmm4, %xmm4
|
|
; KNL-NEXT: vpinsrb $6, 408(%rsp), %xmm4, %xmm4
|
|
; KNL-NEXT: vpmovzxbq {{.*#+}} zmm4 = xmm4[0],zero,zero,zero,zero,zero,zero,zero,xmm4[1],zero,zero,zero,zero,zero,zero,zero,xmm4[2],zero,zero,zero,zero,zero,zero,zero,xmm4[3],zero,zero,zero,zero,zero,zero,zero,xmm4[4],zero,zero,zero,zero,zero,zero,zero,xmm4[5],zero,zero,zero,zero,zero,zero,zero,xmm4[6],zero,zero,zero,zero,zero,zero,zero,xmm4[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm5 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 312(%rsp), %xmm5, %xmm5
|
|
; KNL-NEXT: vpinsrb $2, 320(%rsp), %xmm5, %xmm5
|
|
; KNL-NEXT: vpinsrb $3, 328(%rsp), %xmm5, %xmm5
|
|
; KNL-NEXT: vpinsrb $4, 336(%rsp), %xmm5, %xmm5
|
|
; KNL-NEXT: vpinsrb $5, 344(%rsp), %xmm5, %xmm5
|
|
; KNL-NEXT: vpinsrb $6, 352(%rsp), %xmm5, %xmm5
|
|
; KNL-NEXT: vpmovzxbq {{.*#+}} zmm5 = xmm5[0],zero,zero,zero,zero,zero,zero,zero,xmm5[1],zero,zero,zero,zero,zero,zero,zero,xmm5[2],zero,zero,zero,zero,zero,zero,zero,xmm5[3],zero,zero,zero,zero,zero,zero,zero,xmm5[4],zero,zero,zero,zero,zero,zero,zero,xmm5[5],zero,zero,zero,zero,zero,zero,zero,xmm5[6],zero,zero,zero,zero,zero,zero,zero,xmm5[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm6 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 256(%rsp), %xmm6, %xmm6
|
|
; KNL-NEXT: vpinsrb $2, 264(%rsp), %xmm6, %xmm6
|
|
; KNL-NEXT: vpinsrb $3, 272(%rsp), %xmm6, %xmm6
|
|
; KNL-NEXT: vpinsrb $4, 280(%rsp), %xmm6, %xmm6
|
|
; KNL-NEXT: vpinsrb $5, 288(%rsp), %xmm6, %xmm6
|
|
; KNL-NEXT: vpinsrb $6, 296(%rsp), %xmm6, %xmm6
|
|
; KNL-NEXT: vpmovzxbq {{.*#+}} zmm6 = xmm6[0],zero,zero,zero,zero,zero,zero,zero,xmm6[1],zero,zero,zero,zero,zero,zero,zero,xmm6[2],zero,zero,zero,zero,zero,zero,zero,xmm6[3],zero,zero,zero,zero,zero,zero,zero,xmm6[4],zero,zero,zero,zero,zero,zero,zero,xmm6[5],zero,zero,zero,zero,zero,zero,zero,xmm6[6],zero,zero,zero,zero,zero,zero,zero,xmm6[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm7 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 200(%rsp), %xmm7, %xmm7
|
|
; KNL-NEXT: vpinsrb $2, 208(%rsp), %xmm7, %xmm7
|
|
; KNL-NEXT: vpinsrb $3, 216(%rsp), %xmm7, %xmm7
|
|
; KNL-NEXT: vpinsrb $4, 224(%rsp), %xmm7, %xmm7
|
|
; KNL-NEXT: vpinsrb $5, 232(%rsp), %xmm7, %xmm7
|
|
; KNL-NEXT: vpinsrb $6, 240(%rsp), %xmm7, %xmm7
|
|
; KNL-NEXT: vpmovzxbq {{.*#+}} zmm7 = xmm7[0],zero,zero,zero,zero,zero,zero,zero,xmm7[1],zero,zero,zero,zero,zero,zero,zero,xmm7[2],zero,zero,zero,zero,zero,zero,zero,xmm7[3],zero,zero,zero,zero,zero,zero,zero,xmm7[4],zero,zero,zero,zero,zero,zero,zero,xmm7[5],zero,zero,zero,zero,zero,zero,zero,xmm7[6],zero,zero,zero,zero,zero,zero,zero,xmm7[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm8 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 144(%rsp), %xmm8, %xmm8
|
|
; KNL-NEXT: vpinsrb $2, 152(%rsp), %xmm8, %xmm8
|
|
; KNL-NEXT: vpinsrb $3, 160(%rsp), %xmm8, %xmm8
|
|
; KNL-NEXT: vpinsrb $4, 168(%rsp), %xmm8, %xmm8
|
|
; KNL-NEXT: vpinsrb $5, 176(%rsp), %xmm8, %xmm8
|
|
; KNL-NEXT: vpinsrb $6, 184(%rsp), %xmm8, %xmm8
|
|
; KNL-NEXT: vpmovzxbq {{.*#+}} zmm8 = xmm8[0],zero,zero,zero,zero,zero,zero,zero,xmm8[1],zero,zero,zero,zero,zero,zero,zero,xmm8[2],zero,zero,zero,zero,zero,zero,zero,xmm8[3],zero,zero,zero,zero,zero,zero,zero,xmm8[4],zero,zero,zero,zero,zero,zero,zero,xmm8[5],zero,zero,zero,zero,zero,zero,zero,xmm8[6],zero,zero,zero,zero,zero,zero,zero,xmm8[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm9 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 88(%rsp), %xmm9, %xmm9
|
|
; KNL-NEXT: vpinsrb $2, 96(%rsp), %xmm9, %xmm9
|
|
; KNL-NEXT: vpinsrb $3, 104(%rsp), %xmm9, %xmm9
|
|
; KNL-NEXT: vpinsrb $4, 112(%rsp), %xmm9, %xmm9
|
|
; KNL-NEXT: vpinsrb $5, 120(%rsp), %xmm9, %xmm9
|
|
; KNL-NEXT: vpinsrb $6, 128(%rsp), %xmm9, %xmm9
|
|
; KNL-NEXT: vptestmq %zmm0, %zmm1, %k1
|
|
; KNL-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm9[0],zero,zero,zero,zero,zero,zero,zero,xmm9[1],zero,zero,zero,zero,zero,zero,zero,xmm9[2],zero,zero,zero,zero,zero,zero,zero,xmm9[3],zero,zero,zero,zero,zero,zero,zero,xmm9[4],zero,zero,zero,zero,zero,zero,zero,xmm9[5],zero,zero,zero,zero,zero,zero,zero,xmm9[6],zero,zero,zero,zero,zero,zero,zero,xmm9[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL-NEXT: vptestmq %zmm0, %zmm2, %k1 {%k1}
|
|
; KNL-NEXT: vptestmq %zmm0, %zmm1, %k1 {%k1}
|
|
; KNL-NEXT: vptestmq %zmm0, %zmm8, %k1 {%k1}
|
|
; KNL-NEXT: vptestmq %zmm0, %zmm7, %k1 {%k1}
|
|
; KNL-NEXT: vptestmq %zmm0, %zmm6, %k1 {%k1}
|
|
; KNL-NEXT: vptestmq %zmm0, %zmm5, %k1 {%k1}
|
|
; KNL-NEXT: vptestmq %zmm0, %zmm4, %k1 {%k1}
|
|
; KNL-NEXT: vptestmq %zmm0, %zmm3, %k0 {%k1}
|
|
; KNL-NEXT: kshiftrw $6, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %ecx
|
|
; KNL-NEXT: kshiftrw $5, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %edx
|
|
; KNL-NEXT: kshiftrw $4, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %esi
|
|
; KNL-NEXT: kshiftrw $3, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %edi
|
|
; KNL-NEXT: kshiftrw $2, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %r8d
|
|
; KNL-NEXT: kshiftrw $1, %k0, %k1
|
|
; KNL-NEXT: kmovw %k1, %r9d
|
|
; KNL-NEXT: kmovw %k0, %r10d
|
|
; KNL-NEXT: andb $1, %r10b
|
|
; KNL-NEXT: andb $1, %r9b
|
|
; KNL-NEXT: addb %r9b, %r9b
|
|
; KNL-NEXT: orb %r10b, %r9b
|
|
; KNL-NEXT: andb $1, %r8b
|
|
; KNL-NEXT: shlb $2, %r8b
|
|
; KNL-NEXT: orb %r9b, %r8b
|
|
; KNL-NEXT: andb $1, %dil
|
|
; KNL-NEXT: shlb $3, %dil
|
|
; KNL-NEXT: orb %r8b, %dil
|
|
; KNL-NEXT: andb $1, %sil
|
|
; KNL-NEXT: shlb $4, %sil
|
|
; KNL-NEXT: orb %dil, %sil
|
|
; KNL-NEXT: andb $1, %dl
|
|
; KNL-NEXT: shlb $5, %dl
|
|
; KNL-NEXT: orb %sil, %dl
|
|
; KNL-NEXT: shlb $6, %cl
|
|
; KNL-NEXT: orb %dl, %cl
|
|
; KNL-NEXT: andb $127, %cl
|
|
; KNL-NEXT: movb %cl, (%rax)
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: test17:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 32(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $2, 40(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $3, 48(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $4, 56(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: movq %rdi, %rax
|
|
; SKX-NEXT: vpinsrb $5, 64(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $6, 72(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero,xmm0[2],zero,zero,zero,zero,zero,zero,zero,xmm0[3],zero,zero,zero,zero,zero,zero,zero,xmm0[4],zero,zero,zero,zero,zero,zero,zero,xmm0[5],zero,zero,zero,zero,zero,zero,zero,xmm0[6],zero,zero,zero,zero,zero,zero,zero,xmm0[7],zero,zero,zero,zero,zero,zero,zero
|
|
; SKX-NEXT: vpbroadcastq {{.*#+}} zmm0 = [1,1,1,1,1,1,1,1]
|
|
; SKX-NEXT: vptestmq %zmm0, %zmm1, %k1
|
|
; SKX-NEXT: vmovd %esi, %xmm1
|
|
; SKX-NEXT: vpinsrb $1, %edx, %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $2, %ecx, %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $3, %r8d, %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $4, %r9d, %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $5, 8(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $6, 16(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 424(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $2, 432(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $3, 440(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $4, 448(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $5, 456(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $6, 464(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero,xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero,xmm1[4],zero,zero,zero,zero,zero,zero,zero,xmm1[5],zero,zero,zero,zero,zero,zero,zero,xmm1[6],zero,zero,zero,zero,zero,zero,zero,xmm1[7],zero,zero,zero,zero,zero,zero,zero
|
|
; SKX-NEXT: vpmovzxbq {{.*#+}} zmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero,xmm2[2],zero,zero,zero,zero,zero,zero,zero,xmm2[3],zero,zero,zero,zero,zero,zero,zero,xmm2[4],zero,zero,zero,zero,zero,zero,zero,xmm2[5],zero,zero,zero,zero,zero,zero,zero,xmm2[6],zero,zero,zero,zero,zero,zero,zero,xmm2[7],zero,zero,zero,zero,zero,zero,zero
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm3 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 368(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $2, 376(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $3, 384(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $4, 392(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $5, 400(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $6, 408(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm4 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 312(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $2, 320(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $3, 328(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $4, 336(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $5, 344(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $6, 352(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpmovzxbq {{.*#+}} zmm3 = xmm3[0],zero,zero,zero,zero,zero,zero,zero,xmm3[1],zero,zero,zero,zero,zero,zero,zero,xmm3[2],zero,zero,zero,zero,zero,zero,zero,xmm3[3],zero,zero,zero,zero,zero,zero,zero,xmm3[4],zero,zero,zero,zero,zero,zero,zero,xmm3[5],zero,zero,zero,zero,zero,zero,zero,xmm3[6],zero,zero,zero,zero,zero,zero,zero,xmm3[7],zero,zero,zero,zero,zero,zero,zero
|
|
; SKX-NEXT: vpmovzxbq {{.*#+}} zmm4 = xmm4[0],zero,zero,zero,zero,zero,zero,zero,xmm4[1],zero,zero,zero,zero,zero,zero,zero,xmm4[2],zero,zero,zero,zero,zero,zero,zero,xmm4[3],zero,zero,zero,zero,zero,zero,zero,xmm4[4],zero,zero,zero,zero,zero,zero,zero,xmm4[5],zero,zero,zero,zero,zero,zero,zero,xmm4[6],zero,zero,zero,zero,zero,zero,zero,xmm4[7],zero,zero,zero,zero,zero,zero,zero
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm5 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 256(%rsp), %xmm5, %xmm5
|
|
; SKX-NEXT: vpinsrb $2, 264(%rsp), %xmm5, %xmm5
|
|
; SKX-NEXT: vpinsrb $3, 272(%rsp), %xmm5, %xmm5
|
|
; SKX-NEXT: vpinsrb $4, 280(%rsp), %xmm5, %xmm5
|
|
; SKX-NEXT: vpinsrb $5, 288(%rsp), %xmm5, %xmm5
|
|
; SKX-NEXT: vpinsrb $6, 296(%rsp), %xmm5, %xmm5
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm6 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 200(%rsp), %xmm6, %xmm6
|
|
; SKX-NEXT: vpinsrb $2, 208(%rsp), %xmm6, %xmm6
|
|
; SKX-NEXT: vpinsrb $3, 216(%rsp), %xmm6, %xmm6
|
|
; SKX-NEXT: vpinsrb $4, 224(%rsp), %xmm6, %xmm6
|
|
; SKX-NEXT: vpinsrb $5, 232(%rsp), %xmm6, %xmm6
|
|
; SKX-NEXT: vpinsrb $6, 240(%rsp), %xmm6, %xmm6
|
|
; SKX-NEXT: vpmovzxbq {{.*#+}} zmm5 = xmm5[0],zero,zero,zero,zero,zero,zero,zero,xmm5[1],zero,zero,zero,zero,zero,zero,zero,xmm5[2],zero,zero,zero,zero,zero,zero,zero,xmm5[3],zero,zero,zero,zero,zero,zero,zero,xmm5[4],zero,zero,zero,zero,zero,zero,zero,xmm5[5],zero,zero,zero,zero,zero,zero,zero,xmm5[6],zero,zero,zero,zero,zero,zero,zero,xmm5[7],zero,zero,zero,zero,zero,zero,zero
|
|
; SKX-NEXT: vpmovzxbq {{.*#+}} zmm6 = xmm6[0],zero,zero,zero,zero,zero,zero,zero,xmm6[1],zero,zero,zero,zero,zero,zero,zero,xmm6[2],zero,zero,zero,zero,zero,zero,zero,xmm6[3],zero,zero,zero,zero,zero,zero,zero,xmm6[4],zero,zero,zero,zero,zero,zero,zero,xmm6[5],zero,zero,zero,zero,zero,zero,zero,xmm6[6],zero,zero,zero,zero,zero,zero,zero,xmm6[7],zero,zero,zero,zero,zero,zero,zero
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm7 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 144(%rsp), %xmm7, %xmm7
|
|
; SKX-NEXT: vpinsrb $2, 152(%rsp), %xmm7, %xmm7
|
|
; SKX-NEXT: vpinsrb $3, 160(%rsp), %xmm7, %xmm7
|
|
; SKX-NEXT: vpinsrb $4, 168(%rsp), %xmm7, %xmm7
|
|
; SKX-NEXT: vpinsrb $5, 176(%rsp), %xmm7, %xmm7
|
|
; SKX-NEXT: vpinsrb $6, 184(%rsp), %xmm7, %xmm7
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm8 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 88(%rsp), %xmm8, %xmm8
|
|
; SKX-NEXT: vpinsrb $2, 96(%rsp), %xmm8, %xmm8
|
|
; SKX-NEXT: vpinsrb $3, 104(%rsp), %xmm8, %xmm8
|
|
; SKX-NEXT: vpinsrb $4, 112(%rsp), %xmm8, %xmm8
|
|
; SKX-NEXT: vpinsrb $5, 120(%rsp), %xmm8, %xmm8
|
|
; SKX-NEXT: vpinsrb $6, 128(%rsp), %xmm8, %xmm8
|
|
; SKX-NEXT: vpmovzxbq {{.*#+}} zmm7 = xmm7[0],zero,zero,zero,zero,zero,zero,zero,xmm7[1],zero,zero,zero,zero,zero,zero,zero,xmm7[2],zero,zero,zero,zero,zero,zero,zero,xmm7[3],zero,zero,zero,zero,zero,zero,zero,xmm7[4],zero,zero,zero,zero,zero,zero,zero,xmm7[5],zero,zero,zero,zero,zero,zero,zero,xmm7[6],zero,zero,zero,zero,zero,zero,zero,xmm7[7],zero,zero,zero,zero,zero,zero,zero
|
|
; SKX-NEXT: vpmovzxbq {{.*#+}} zmm8 = xmm8[0],zero,zero,zero,zero,zero,zero,zero,xmm8[1],zero,zero,zero,zero,zero,zero,zero,xmm8[2],zero,zero,zero,zero,zero,zero,zero,xmm8[3],zero,zero,zero,zero,zero,zero,zero,xmm8[4],zero,zero,zero,zero,zero,zero,zero,xmm8[5],zero,zero,zero,zero,zero,zero,zero,xmm8[6],zero,zero,zero,zero,zero,zero,zero,xmm8[7],zero,zero,zero,zero,zero,zero,zero
|
|
; SKX-NEXT: vptestmq %zmm0, %zmm1, %k1 {%k1}
|
|
; SKX-NEXT: vptestmq %zmm0, %zmm8, %k1 {%k1}
|
|
; SKX-NEXT: vptestmq %zmm0, %zmm7, %k1 {%k1}
|
|
; SKX-NEXT: vptestmq %zmm0, %zmm6, %k1 {%k1}
|
|
; SKX-NEXT: vptestmq %zmm0, %zmm5, %k1 {%k1}
|
|
; SKX-NEXT: vptestmq %zmm0, %zmm4, %k1 {%k1}
|
|
; SKX-NEXT: vptestmq %zmm0, %zmm3, %k1 {%k1}
|
|
; SKX-NEXT: vptestmq %zmm0, %zmm2, %k0 {%k1}
|
|
; SKX-NEXT: kshiftrb $6, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %ecx
|
|
; SKX-NEXT: kshiftrb $5, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %edx
|
|
; SKX-NEXT: kshiftrb $4, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %esi
|
|
; SKX-NEXT: kshiftrb $3, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %edi
|
|
; SKX-NEXT: kshiftrb $2, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %r8d
|
|
; SKX-NEXT: kshiftrb $1, %k0, %k1
|
|
; SKX-NEXT: kmovd %k1, %r9d
|
|
; SKX-NEXT: kmovd %k0, %r10d
|
|
; SKX-NEXT: andb $1, %r10b
|
|
; SKX-NEXT: andb $1, %r9b
|
|
; SKX-NEXT: addb %r9b, %r9b
|
|
; SKX-NEXT: orb %r10b, %r9b
|
|
; SKX-NEXT: andb $1, %r8b
|
|
; SKX-NEXT: shlb $2, %r8b
|
|
; SKX-NEXT: orb %r9b, %r8b
|
|
; SKX-NEXT: andb $1, %dil
|
|
; SKX-NEXT: shlb $3, %dil
|
|
; SKX-NEXT: orb %r8b, %dil
|
|
; SKX-NEXT: andb $1, %sil
|
|
; SKX-NEXT: shlb $4, %sil
|
|
; SKX-NEXT: orb %dil, %sil
|
|
; SKX-NEXT: andb $1, %dl
|
|
; SKX-NEXT: shlb $5, %dl
|
|
; SKX-NEXT: orb %sil, %dl
|
|
; SKX-NEXT: shlb $6, %cl
|
|
; SKX-NEXT: orb %dl, %cl
|
|
; SKX-NEXT: andb $127, %cl
|
|
; SKX-NEXT: movb %cl, (%rax)
|
|
; SKX-NEXT: vzeroupper
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: test17:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 40(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $2, 44(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $3, 48(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $4, 52(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $5, 56(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $6, 60(%esp), %xmm0, %xmm2
|
|
; KNL_X32-NEXT: vpbroadcastq {{.*#+}} zmm0 = [1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0]
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 208(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $2, 212(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $3, 216(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $4, 220(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $5, 224(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $6, 228(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpmovzxbq {{.*#+}} zmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero,xmm2[2],zero,zero,zero,zero,zero,zero,zero,xmm2[3],zero,zero,zero,zero,zero,zero,zero,xmm2[4],zero,zero,zero,zero,zero,zero,zero,xmm2[5],zero,zero,zero,zero,zero,zero,zero,xmm2[6],zero,zero,zero,zero,zero,zero,zero,xmm2[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm3 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 124(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $2, 128(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $3, 132(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $4, 136(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $5, 140(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vptestmq %zmm0, %zmm2, %k1
|
|
; KNL_X32-NEXT: vpinsrb $6, 144(%esp), %xmm3, %xmm2
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm3 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 12(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $2, 16(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $3, 20(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $4, 24(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $5, 28(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $6, 32(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpmovzxbq {{.*#+}} zmm3 = xmm3[0],zero,zero,zero,zero,zero,zero,zero,xmm3[1],zero,zero,zero,zero,zero,zero,zero,xmm3[2],zero,zero,zero,zero,zero,zero,zero,xmm3[3],zero,zero,zero,zero,zero,zero,zero,xmm3[4],zero,zero,zero,zero,zero,zero,zero,xmm3[5],zero,zero,zero,zero,zero,zero,zero,xmm3[6],zero,zero,zero,zero,zero,zero,zero,xmm3[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm4 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 68(%esp), %xmm4, %xmm4
|
|
; KNL_X32-NEXT: vpinsrb $2, 72(%esp), %xmm4, %xmm4
|
|
; KNL_X32-NEXT: vpinsrb $3, 76(%esp), %xmm4, %xmm4
|
|
; KNL_X32-NEXT: vpinsrb $4, 80(%esp), %xmm4, %xmm4
|
|
; KNL_X32-NEXT: vpinsrb $5, 84(%esp), %xmm4, %xmm4
|
|
; KNL_X32-NEXT: vptestmq %zmm0, %zmm3, %k1 {%k1}
|
|
; KNL_X32-NEXT: vpinsrb $6, 88(%esp), %xmm4, %xmm3
|
|
; KNL_X32-NEXT: vpmovzxbq {{.*#+}} zmm3 = xmm3[0],zero,zero,zero,zero,zero,zero,zero,xmm3[1],zero,zero,zero,zero,zero,zero,zero,xmm3[2],zero,zero,zero,zero,zero,zero,zero,xmm3[3],zero,zero,zero,zero,zero,zero,zero,xmm3[4],zero,zero,zero,zero,zero,zero,zero,xmm3[5],zero,zero,zero,zero,zero,zero,zero,xmm3[6],zero,zero,zero,zero,zero,zero,zero,xmm3[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL_X32-NEXT: vptestmq %zmm0, %zmm3, %k1 {%k1}
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm3 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 96(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $2, 100(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $3, 104(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $4, 108(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $5, 112(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpmovzxbq {{.*#+}} zmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero,xmm2[2],zero,zero,zero,zero,zero,zero,zero,xmm2[3],zero,zero,zero,zero,zero,zero,zero,xmm2[4],zero,zero,zero,zero,zero,zero,zero,xmm2[5],zero,zero,zero,zero,zero,zero,zero,xmm2[6],zero,zero,zero,zero,zero,zero,zero,xmm2[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $6, 116(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpmovzxbq {{.*#+}} zmm3 = xmm3[0],zero,zero,zero,zero,zero,zero,zero,xmm3[1],zero,zero,zero,zero,zero,zero,zero,xmm3[2],zero,zero,zero,zero,zero,zero,zero,xmm3[3],zero,zero,zero,zero,zero,zero,zero,xmm3[4],zero,zero,zero,zero,zero,zero,zero,xmm3[5],zero,zero,zero,zero,zero,zero,zero,xmm3[6],zero,zero,zero,zero,zero,zero,zero,xmm3[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL_X32-NEXT: vptestmq %zmm0, %zmm3, %k1 {%k1}
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm3 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 152(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $2, 156(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $3, 160(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $4, 164(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vpinsrb $5, 168(%esp), %xmm3, %xmm3
|
|
; KNL_X32-NEXT: vptestmq %zmm0, %zmm2, %k1 {%k1}
|
|
; KNL_X32-NEXT: vpinsrb $6, 172(%esp), %xmm3, %xmm2
|
|
; KNL_X32-NEXT: vpmovzxbq {{.*#+}} zmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero,xmm2[2],zero,zero,zero,zero,zero,zero,zero,xmm2[3],zero,zero,zero,zero,zero,zero,zero,xmm2[4],zero,zero,zero,zero,zero,zero,zero,xmm2[5],zero,zero,zero,zero,zero,zero,zero,xmm2[6],zero,zero,zero,zero,zero,zero,zero,xmm2[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL_X32-NEXT: vptestmq %zmm0, %zmm2, %k1 {%k1}
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 180(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $2, 184(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $3, 188(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $4, 192(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $5, 196(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero,xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero,xmm1[4],zero,zero,zero,zero,zero,zero,zero,xmm1[5],zero,zero,zero,zero,zero,zero,zero,xmm1[6],zero,zero,zero,zero,zero,zero,zero,xmm1[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $6, 200(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpmovzxbq {{.*#+}} zmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero,xmm2[2],zero,zero,zero,zero,zero,zero,zero,xmm2[3],zero,zero,zero,zero,zero,zero,zero,xmm2[4],zero,zero,zero,zero,zero,zero,zero,xmm2[5],zero,zero,zero,zero,zero,zero,zero,xmm2[6],zero,zero,zero,zero,zero,zero,zero,xmm2[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL_X32-NEXT: vptestmq %zmm0, %zmm2, %k1 {%k1}
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 236(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $2, 240(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $3, 244(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $4, 248(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $5, 252(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vptestmq %zmm0, %zmm1, %k1 {%k1}
|
|
; KNL_X32-NEXT: vpinsrb $6, 256(%esp), %xmm2, %xmm1
|
|
; KNL_X32-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero,xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero,xmm1[4],zero,zero,zero,zero,zero,zero,zero,xmm1[5],zero,zero,zero,zero,zero,zero,zero,xmm1[6],zero,zero,zero,zero,zero,zero,zero,xmm1[7],zero,zero,zero,zero,zero,zero,zero
|
|
; KNL_X32-NEXT: vptestmq %zmm0, %zmm1, %k4 {%k1}
|
|
; KNL_X32-NEXT: kshiftrw $6, %k4, %k0
|
|
; KNL_X32-NEXT: kshiftrw $5, %k4, %k1
|
|
; KNL_X32-NEXT: kshiftrw $4, %k4, %k2
|
|
; KNL_X32-NEXT: kshiftrw $3, %k4, %k3
|
|
; KNL_X32-NEXT: kshiftrw $1, %k4, %k5
|
|
; KNL_X32-NEXT: kmovw %k5, %eax
|
|
; KNL_X32-NEXT: kshiftrw $2, %k4, %k5
|
|
; KNL_X32-NEXT: kmovw %k4, %ecx
|
|
; KNL_X32-NEXT: andb $1, %cl
|
|
; KNL_X32-NEXT: andb $1, %al
|
|
; KNL_X32-NEXT: addb %al, %al
|
|
; KNL_X32-NEXT: orb %cl, %al
|
|
; KNL_X32-NEXT: kmovw %k5, %edx
|
|
; KNL_X32-NEXT: andb $1, %dl
|
|
; KNL_X32-NEXT: shlb $2, %dl
|
|
; KNL_X32-NEXT: orb %al, %dl
|
|
; KNL_X32-NEXT: kmovw %k3, %ecx
|
|
; KNL_X32-NEXT: andb $1, %cl
|
|
; KNL_X32-NEXT: shlb $3, %cl
|
|
; KNL_X32-NEXT: orb %dl, %cl
|
|
; KNL_X32-NEXT: kmovw %k2, %eax
|
|
; KNL_X32-NEXT: andb $1, %al
|
|
; KNL_X32-NEXT: shlb $4, %al
|
|
; KNL_X32-NEXT: orb %cl, %al
|
|
; KNL_X32-NEXT: kmovw %k1, %ecx
|
|
; KNL_X32-NEXT: andb $1, %cl
|
|
; KNL_X32-NEXT: shlb $5, %cl
|
|
; KNL_X32-NEXT: orb %al, %cl
|
|
; KNL_X32-NEXT: kmovw %k0, %edx
|
|
; KNL_X32-NEXT: shlb $6, %dl
|
|
; KNL_X32-NEXT: orb %cl, %dl
|
|
; KNL_X32-NEXT: movl 4(%esp), %eax
|
|
; KNL_X32-NEXT: andb $127, %dl
|
|
; KNL_X32-NEXT: movb %dl, (%eax)
|
|
; KNL_X32-NEXT: retl $4
|
|
;
|
|
; FASTISEL-LABEL: test17:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 424(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $2, 432(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $3, 440(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $4, 448(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $5, 456(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: movq %rdi, %rax
|
|
; FASTISEL-NEXT: vpinsrb $6, 464(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero,xmm0[2],zero,zero,zero,zero,zero,zero,zero,xmm0[3],zero,zero,zero,zero,zero,zero,zero,xmm0[4],zero,zero,zero,zero,zero,zero,zero,xmm0[5],zero,zero,zero,zero,zero,zero,zero,xmm0[6],zero,zero,zero,zero,zero,zero,zero,xmm0[7],zero,zero,zero,zero,zero,zero,zero
|
|
; FASTISEL-NEXT: vpbroadcastq {{.*#+}} zmm0 = [1,1,1,1,1,1,1,1]
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 368(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $2, 376(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $3, 384(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $4, 392(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $5, 400(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vptestmq %zmm0, %zmm1, %k0
|
|
; FASTISEL-NEXT: vpinsrb $6, 408(%rsp), %xmm2, %xmm1
|
|
; FASTISEL-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero,xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero,xmm1[4],zero,zero,zero,zero,zero,zero,zero,xmm1[5],zero,zero,zero,zero,zero,zero,zero,xmm1[6],zero,zero,zero,zero,zero,zero,zero,xmm1[7],zero,zero,zero,zero,zero,zero,zero
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 312(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $2, 320(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $3, 328(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $4, 336(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $5, 344(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $6, 352(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vptestmq %zmm0, %zmm1, %k1
|
|
; FASTISEL-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero,xmm2[2],zero,zero,zero,zero,zero,zero,zero,xmm2[3],zero,zero,zero,zero,zero,zero,zero,xmm2[4],zero,zero,zero,zero,zero,zero,zero,xmm2[5],zero,zero,zero,zero,zero,zero,zero,xmm2[6],zero,zero,zero,zero,zero,zero,zero,xmm2[7],zero,zero,zero,zero,zero,zero,zero
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 256(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $2, 264(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $3, 272(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $4, 280(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vptestmq %zmm0, %zmm1, %k2
|
|
; FASTISEL-NEXT: vpinsrb $5, 288(%rsp), %xmm2, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $6, 296(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero,xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero,xmm1[4],zero,zero,zero,zero,zero,zero,zero,xmm1[5],zero,zero,zero,zero,zero,zero,zero,xmm1[6],zero,zero,zero,zero,zero,zero,zero,xmm1[7],zero,zero,zero,zero,zero,zero,zero
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 200(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $2, 208(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $3, 216(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $4, 224(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $5, 232(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vptestmq %zmm0, %zmm1, %k3
|
|
; FASTISEL-NEXT: vpinsrb $6, 240(%rsp), %xmm2, %xmm1
|
|
; FASTISEL-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero,xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero,xmm1[4],zero,zero,zero,zero,zero,zero,zero,xmm1[5],zero,zero,zero,zero,zero,zero,zero,xmm1[6],zero,zero,zero,zero,zero,zero,zero,xmm1[7],zero,zero,zero,zero,zero,zero,zero
|
|
; FASTISEL-NEXT: vptestmq %zmm0, %zmm1, %k4
|
|
; FASTISEL-NEXT: kandb %k3, %k4, %k3
|
|
; FASTISEL-NEXT: kandb %k2, %k3, %k2
|
|
; FASTISEL-NEXT: kandb %k1, %k2, %k1
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 144(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $2, 152(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $3, 160(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $4, 168(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $5, 176(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $6, 184(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero,xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero,xmm1[4],zero,zero,zero,zero,zero,zero,zero,xmm1[5],zero,zero,zero,zero,zero,zero,zero,xmm1[6],zero,zero,zero,zero,zero,zero,zero,xmm1[7],zero,zero,zero,zero,zero,zero,zero
|
|
; FASTISEL-NEXT: vptestmq %zmm0, %zmm1, %k2
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 88(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $2, 96(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $3, 104(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $4, 112(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $5, 120(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $6, 128(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero,xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero,xmm1[4],zero,zero,zero,zero,zero,zero,zero,xmm1[5],zero,zero,zero,zero,zero,zero,zero,xmm1[6],zero,zero,zero,zero,zero,zero,zero,xmm1[7],zero,zero,zero,zero,zero,zero,zero
|
|
; FASTISEL-NEXT: vptestmq %zmm0, %zmm1, %k3
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 32(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $2, 40(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $3, 48(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $4, 56(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $5, 64(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $6, 72(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero,xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero,xmm1[4],zero,zero,zero,zero,zero,zero,zero,xmm1[5],zero,zero,zero,zero,zero,zero,zero,xmm1[6],zero,zero,zero,zero,zero,zero,zero,xmm1[7],zero,zero,zero,zero,zero,zero,zero
|
|
; FASTISEL-NEXT: vptestmq %zmm0, %zmm1, %k4
|
|
; FASTISEL-NEXT: kandb %k3, %k4, %k3
|
|
; FASTISEL-NEXT: vmovd %esi, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $1, %edx, %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $2, %ecx, %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $3, %r8d, %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $4, %r9d, %xmm1, %xmm1
|
|
; FASTISEL-NEXT: kandb %k2, %k3, %k2
|
|
; FASTISEL-NEXT: vpinsrb $5, 8(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $6, 16(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpmovzxbq {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero,xmm1[2],zero,zero,zero,zero,zero,zero,zero,xmm1[3],zero,zero,zero,zero,zero,zero,zero,xmm1[4],zero,zero,zero,zero,zero,zero,zero,xmm1[5],zero,zero,zero,zero,zero,zero,zero,xmm1[6],zero,zero,zero,zero,zero,zero,zero,xmm1[7],zero,zero,zero,zero,zero,zero,zero
|
|
; FASTISEL-NEXT: vptestmq %zmm0, %zmm1, %k3
|
|
; FASTISEL-NEXT: kandb %k2, %k3, %k2
|
|
; FASTISEL-NEXT: kandb %k1, %k2, %k1
|
|
; FASTISEL-NEXT: kandb %k0, %k1, %k0
|
|
; FASTISEL-NEXT: kshiftrb $6, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %ecx
|
|
; FASTISEL-NEXT: kshiftrb $5, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %edx
|
|
; FASTISEL-NEXT: kshiftrb $4, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %esi
|
|
; FASTISEL-NEXT: kshiftrb $3, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %edi
|
|
; FASTISEL-NEXT: kshiftrb $2, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %r8d
|
|
; FASTISEL-NEXT: kshiftrb $1, %k0, %k1
|
|
; FASTISEL-NEXT: kmovd %k1, %r9d
|
|
; FASTISEL-NEXT: kmovd %k0, %r10d
|
|
; FASTISEL-NEXT: andb $1, %r10b
|
|
; FASTISEL-NEXT: andb $1, %r9b
|
|
; FASTISEL-NEXT: addb %r9b, %r9b
|
|
; FASTISEL-NEXT: orb %r10b, %r9b
|
|
; FASTISEL-NEXT: andb $1, %r8b
|
|
; FASTISEL-NEXT: shlb $2, %r8b
|
|
; FASTISEL-NEXT: orb %r9b, %r8b
|
|
; FASTISEL-NEXT: andb $1, %dil
|
|
; FASTISEL-NEXT: shlb $3, %dil
|
|
; FASTISEL-NEXT: orb %r8b, %dil
|
|
; FASTISEL-NEXT: andb $1, %sil
|
|
; FASTISEL-NEXT: shlb $4, %sil
|
|
; FASTISEL-NEXT: orb %dil, %sil
|
|
; FASTISEL-NEXT: andb $1, %dl
|
|
; FASTISEL-NEXT: shlb $5, %dl
|
|
; FASTISEL-NEXT: orb %sil, %dl
|
|
; FASTISEL-NEXT: shlb $6, %cl
|
|
; FASTISEL-NEXT: orb %dl, %cl
|
|
; FASTISEL-NEXT: andb $127, %cl
|
|
; FASTISEL-NEXT: movb %cl, (%rax)
|
|
; FASTISEL-NEXT: vzeroupper
|
|
; FASTISEL-NEXT: retq
|
|
%j = and <7 x i1> %a, %b
|
|
%k = and <7 x i1> %j, %c
|
|
%l = and <7 x i1> %k, %d
|
|
%m = and <7 x i1> %l, %e
|
|
%n = and <7 x i1> %m, %f
|
|
%o = and <7 x i1> %n, %g
|
|
%p = and <7 x i1> %o, %h
|
|
%q = and <7 x i1> %p, %i
|
|
ret <7 x i1> %q
|
|
}
|
|
|
|
declare void @v2i1_mem_callee(<128 x i32> %x, <2 x i1> %y)
|
|
define void @v2i1_mem(<128 x i32> %x, <2 x i1> %y) {
|
|
; KNL-LABEL: v2i1_mem:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: subq $24, %rsp
|
|
; KNL-NEXT: .cfi_def_cfa_offset 32
|
|
; KNL-NEXT: vmovaps 32(%rsp), %xmm8
|
|
; KNL-NEXT: vmovaps %xmm8, (%rsp)
|
|
; KNL-NEXT: callq _v2i1_mem_callee
|
|
; KNL-NEXT: addq $24, %rsp
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: v2i1_mem:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: subq $24, %rsp
|
|
; SKX-NEXT: .cfi_def_cfa_offset 32
|
|
; SKX-NEXT: vmovaps 32(%rsp), %xmm8
|
|
; SKX-NEXT: vmovaps %xmm8, (%rsp)
|
|
; SKX-NEXT: callq _v2i1_mem_callee
|
|
; SKX-NEXT: addq $24, %rsp
|
|
; SKX-NEXT: vzeroupper
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: v2i1_mem:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: pushl %ebp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 8
|
|
; KNL_X32-NEXT: .cfi_offset %ebp, -8
|
|
; KNL_X32-NEXT: movl %esp, %ebp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_register %ebp
|
|
; KNL_X32-NEXT: andl $-64, %esp
|
|
; KNL_X32-NEXT: subl $384, %esp ## imm = 0x180
|
|
; KNL_X32-NEXT: vmovaps 72(%ebp), %zmm5
|
|
; KNL_X32-NEXT: vmovaps 136(%ebp), %zmm6
|
|
; KNL_X32-NEXT: vmovaps 200(%ebp), %zmm7
|
|
; KNL_X32-NEXT: vmovaps 264(%ebp), %xmm4
|
|
; KNL_X32-NEXT: vmovaps %xmm4, 256(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm7, 192(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm6, 128(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm5, 64(%esp)
|
|
; KNL_X32-NEXT: vmovaps 8(%ebp), %zmm4
|
|
; KNL_X32-NEXT: vmovaps %zmm4, (%esp)
|
|
; KNL_X32-NEXT: calll _v2i1_mem_callee
|
|
; KNL_X32-NEXT: movl %ebp, %esp
|
|
; KNL_X32-NEXT: popl %ebp
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: v2i1_mem:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: subq $24, %rsp
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 32
|
|
; FASTISEL-NEXT: vpsllq $63, 32(%rsp), %xmm8
|
|
; FASTISEL-NEXT: vpmovq2m %xmm8, %k0
|
|
; FASTISEL-NEXT: vpmovm2q %k0, %xmm8
|
|
; FASTISEL-NEXT: vmovdqa %xmm8, (%rsp)
|
|
; FASTISEL-NEXT: callq _v2i1_mem_callee
|
|
; FASTISEL-NEXT: addq $24, %rsp
|
|
; FASTISEL-NEXT: vzeroupper
|
|
; FASTISEL-NEXT: retq
|
|
call void @v2i1_mem_callee(<128 x i32> %x, <2 x i1> %y)
|
|
ret void
|
|
}
|
|
|
|
declare void @v4i1_mem_callee(<128 x i32> %x, <4 x i1> %y)
|
|
define void @v4i1_mem(<128 x i32> %x, <4 x i1> %y) {
|
|
; KNL-LABEL: v4i1_mem:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: subq $24, %rsp
|
|
; KNL-NEXT: .cfi_def_cfa_offset 32
|
|
; KNL-NEXT: vmovaps 32(%rsp), %xmm8
|
|
; KNL-NEXT: vmovaps %xmm8, (%rsp)
|
|
; KNL-NEXT: callq _v4i1_mem_callee
|
|
; KNL-NEXT: addq $24, %rsp
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: v4i1_mem:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: subq $24, %rsp
|
|
; SKX-NEXT: .cfi_def_cfa_offset 32
|
|
; SKX-NEXT: vmovaps 32(%rsp), %xmm8
|
|
; SKX-NEXT: vmovaps %xmm8, (%rsp)
|
|
; SKX-NEXT: callq _v4i1_mem_callee
|
|
; SKX-NEXT: addq $24, %rsp
|
|
; SKX-NEXT: vzeroupper
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: v4i1_mem:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: pushl %ebp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 8
|
|
; KNL_X32-NEXT: .cfi_offset %ebp, -8
|
|
; KNL_X32-NEXT: movl %esp, %ebp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_register %ebp
|
|
; KNL_X32-NEXT: andl $-64, %esp
|
|
; KNL_X32-NEXT: subl $384, %esp ## imm = 0x180
|
|
; KNL_X32-NEXT: vmovaps 72(%ebp), %zmm5
|
|
; KNL_X32-NEXT: vmovaps 136(%ebp), %zmm6
|
|
; KNL_X32-NEXT: vmovaps 200(%ebp), %zmm7
|
|
; KNL_X32-NEXT: vmovaps 264(%ebp), %xmm4
|
|
; KNL_X32-NEXT: vmovaps %xmm4, 256(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm7, 192(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm6, 128(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm5, 64(%esp)
|
|
; KNL_X32-NEXT: vmovaps 8(%ebp), %zmm4
|
|
; KNL_X32-NEXT: vmovaps %zmm4, (%esp)
|
|
; KNL_X32-NEXT: calll _v4i1_mem_callee
|
|
; KNL_X32-NEXT: movl %ebp, %esp
|
|
; KNL_X32-NEXT: popl %ebp
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: v4i1_mem:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: subq $24, %rsp
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 32
|
|
; FASTISEL-NEXT: vpslld $31, 32(%rsp), %xmm8
|
|
; FASTISEL-NEXT: vpmovd2m %xmm8, %k0
|
|
; FASTISEL-NEXT: vpmovm2d %k0, %xmm8
|
|
; FASTISEL-NEXT: vmovdqa %xmm8, (%rsp)
|
|
; FASTISEL-NEXT: callq _v4i1_mem_callee
|
|
; FASTISEL-NEXT: addq $24, %rsp
|
|
; FASTISEL-NEXT: vzeroupper
|
|
; FASTISEL-NEXT: retq
|
|
call void @v4i1_mem_callee(<128 x i32> %x, <4 x i1> %y)
|
|
ret void
|
|
}
|
|
|
|
declare void @v8i1_mem_callee(<128 x i32> %x, <8 x i1> %y)
|
|
define void @v8i1_mem(<128 x i32> %x, <8 x i1> %y) {
|
|
; KNL-LABEL: v8i1_mem:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: subq $24, %rsp
|
|
; KNL-NEXT: .cfi_def_cfa_offset 32
|
|
; KNL-NEXT: vmovaps 32(%rsp), %xmm8
|
|
; KNL-NEXT: vmovaps %xmm8, (%rsp)
|
|
; KNL-NEXT: callq _v8i1_mem_callee
|
|
; KNL-NEXT: addq $24, %rsp
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: v8i1_mem:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: subq $24, %rsp
|
|
; SKX-NEXT: .cfi_def_cfa_offset 32
|
|
; SKX-NEXT: vmovaps 32(%rsp), %xmm8
|
|
; SKX-NEXT: vmovaps %xmm8, (%rsp)
|
|
; SKX-NEXT: callq _v8i1_mem_callee
|
|
; SKX-NEXT: addq $24, %rsp
|
|
; SKX-NEXT: vzeroupper
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: v8i1_mem:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: pushl %ebp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 8
|
|
; KNL_X32-NEXT: .cfi_offset %ebp, -8
|
|
; KNL_X32-NEXT: movl %esp, %ebp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_register %ebp
|
|
; KNL_X32-NEXT: andl $-64, %esp
|
|
; KNL_X32-NEXT: subl $384, %esp ## imm = 0x180
|
|
; KNL_X32-NEXT: vmovaps 72(%ebp), %zmm5
|
|
; KNL_X32-NEXT: vmovaps 136(%ebp), %zmm6
|
|
; KNL_X32-NEXT: vmovaps 200(%ebp), %zmm7
|
|
; KNL_X32-NEXT: vmovaps 264(%ebp), %xmm4
|
|
; KNL_X32-NEXT: vmovaps %xmm4, 256(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm7, 192(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm6, 128(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm5, 64(%esp)
|
|
; KNL_X32-NEXT: vmovaps 8(%ebp), %zmm4
|
|
; KNL_X32-NEXT: vmovaps %zmm4, (%esp)
|
|
; KNL_X32-NEXT: calll _v8i1_mem_callee
|
|
; KNL_X32-NEXT: movl %ebp, %esp
|
|
; KNL_X32-NEXT: popl %ebp
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: v8i1_mem:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: subq $24, %rsp
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 32
|
|
; FASTISEL-NEXT: vpsllw $15, 32(%rsp), %xmm8
|
|
; FASTISEL-NEXT: vpmovw2m %xmm8, %k0
|
|
; FASTISEL-NEXT: vpmovm2w %k0, %xmm8
|
|
; FASTISEL-NEXT: vmovdqa %xmm8, (%rsp)
|
|
; FASTISEL-NEXT: callq _v8i1_mem_callee
|
|
; FASTISEL-NEXT: addq $24, %rsp
|
|
; FASTISEL-NEXT: vzeroupper
|
|
; FASTISEL-NEXT: retq
|
|
call void @v8i1_mem_callee(<128 x i32> %x, <8 x i1> %y)
|
|
ret void
|
|
}
|
|
|
|
declare void @v16i1_mem_callee(<128 x i32> %x, <16 x i1> %y)
|
|
define void @v16i1_mem(<128 x i32> %x, <16 x i1> %y) {
|
|
; KNL-LABEL: v16i1_mem:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: subq $24, %rsp
|
|
; KNL-NEXT: .cfi_def_cfa_offset 32
|
|
; KNL-NEXT: vmovaps 32(%rsp), %xmm8
|
|
; KNL-NEXT: vmovaps %xmm8, (%rsp)
|
|
; KNL-NEXT: callq _v16i1_mem_callee
|
|
; KNL-NEXT: addq $24, %rsp
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: v16i1_mem:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: subq $24, %rsp
|
|
; SKX-NEXT: .cfi_def_cfa_offset 32
|
|
; SKX-NEXT: vmovaps 32(%rsp), %xmm8
|
|
; SKX-NEXT: vmovaps %xmm8, (%rsp)
|
|
; SKX-NEXT: callq _v16i1_mem_callee
|
|
; SKX-NEXT: addq $24, %rsp
|
|
; SKX-NEXT: vzeroupper
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: v16i1_mem:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: pushl %ebp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 8
|
|
; KNL_X32-NEXT: .cfi_offset %ebp, -8
|
|
; KNL_X32-NEXT: movl %esp, %ebp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_register %ebp
|
|
; KNL_X32-NEXT: andl $-64, %esp
|
|
; KNL_X32-NEXT: subl $384, %esp ## imm = 0x180
|
|
; KNL_X32-NEXT: vmovaps 72(%ebp), %zmm5
|
|
; KNL_X32-NEXT: vmovaps 136(%ebp), %zmm6
|
|
; KNL_X32-NEXT: vmovaps 200(%ebp), %zmm7
|
|
; KNL_X32-NEXT: vmovaps 264(%ebp), %xmm4
|
|
; KNL_X32-NEXT: vmovaps %xmm4, 256(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm7, 192(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm6, 128(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm5, 64(%esp)
|
|
; KNL_X32-NEXT: vmovaps 8(%ebp), %zmm4
|
|
; KNL_X32-NEXT: vmovaps %zmm4, (%esp)
|
|
; KNL_X32-NEXT: calll _v16i1_mem_callee
|
|
; KNL_X32-NEXT: movl %ebp, %esp
|
|
; KNL_X32-NEXT: popl %ebp
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: v16i1_mem:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: subq $24, %rsp
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 32
|
|
; FASTISEL-NEXT: vpsllw $7, 32(%rsp), %xmm8
|
|
; FASTISEL-NEXT: vpmovb2m %xmm8, %k0
|
|
; FASTISEL-NEXT: vpmovm2b %k0, %xmm8
|
|
; FASTISEL-NEXT: vmovdqa %xmm8, (%rsp)
|
|
; FASTISEL-NEXT: callq _v16i1_mem_callee
|
|
; FASTISEL-NEXT: addq $24, %rsp
|
|
; FASTISEL-NEXT: vzeroupper
|
|
; FASTISEL-NEXT: retq
|
|
call void @v16i1_mem_callee(<128 x i32> %x, <16 x i1> %y)
|
|
ret void
|
|
}
|
|
|
|
declare void @v32i1_mem_callee(<128 x i32> %x, <32 x i1> %y)
|
|
define void @v32i1_mem(<128 x i32> %x, <32 x i1> %y) {
|
|
; KNL-LABEL: v32i1_mem:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: pushq %rbp
|
|
; KNL-NEXT: .cfi_def_cfa_offset 16
|
|
; KNL-NEXT: .cfi_offset %rbp, -16
|
|
; KNL-NEXT: movq %rsp, %rbp
|
|
; KNL-NEXT: .cfi_def_cfa_register %rbp
|
|
; KNL-NEXT: andq $-32, %rsp
|
|
; KNL-NEXT: subq $64, %rsp
|
|
; KNL-NEXT: vmovaps 16(%rbp), %ymm8
|
|
; KNL-NEXT: vmovaps %ymm8, (%rsp)
|
|
; KNL-NEXT: callq _v32i1_mem_callee
|
|
; KNL-NEXT: movq %rbp, %rsp
|
|
; KNL-NEXT: popq %rbp
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: v32i1_mem:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: pushq %rbp
|
|
; SKX-NEXT: .cfi_def_cfa_offset 16
|
|
; SKX-NEXT: .cfi_offset %rbp, -16
|
|
; SKX-NEXT: movq %rsp, %rbp
|
|
; SKX-NEXT: .cfi_def_cfa_register %rbp
|
|
; SKX-NEXT: andq $-32, %rsp
|
|
; SKX-NEXT: subq $64, %rsp
|
|
; SKX-NEXT: vmovaps 16(%rbp), %ymm8
|
|
; SKX-NEXT: vmovaps %ymm8, (%rsp)
|
|
; SKX-NEXT: callq _v32i1_mem_callee
|
|
; SKX-NEXT: movq %rbp, %rsp
|
|
; SKX-NEXT: popq %rbp
|
|
; SKX-NEXT: vzeroupper
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: v32i1_mem:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: pushl %ebp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 8
|
|
; KNL_X32-NEXT: .cfi_offset %ebp, -8
|
|
; KNL_X32-NEXT: movl %esp, %ebp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_register %ebp
|
|
; KNL_X32-NEXT: andl $-64, %esp
|
|
; KNL_X32-NEXT: subl $384, %esp ## imm = 0x180
|
|
; KNL_X32-NEXT: vmovaps 72(%ebp), %zmm5
|
|
; KNL_X32-NEXT: vmovaps 136(%ebp), %zmm6
|
|
; KNL_X32-NEXT: vmovaps 200(%ebp), %zmm7
|
|
; KNL_X32-NEXT: vmovaps 264(%ebp), %ymm4
|
|
; KNL_X32-NEXT: vmovaps %ymm4, 256(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm7, 192(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm6, 128(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm5, 64(%esp)
|
|
; KNL_X32-NEXT: vmovaps 8(%ebp), %zmm4
|
|
; KNL_X32-NEXT: vmovaps %zmm4, (%esp)
|
|
; KNL_X32-NEXT: calll _v32i1_mem_callee
|
|
; KNL_X32-NEXT: movl %ebp, %esp
|
|
; KNL_X32-NEXT: popl %ebp
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: v32i1_mem:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: pushq %rbp
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 16
|
|
; FASTISEL-NEXT: .cfi_offset %rbp, -16
|
|
; FASTISEL-NEXT: movq %rsp, %rbp
|
|
; FASTISEL-NEXT: .cfi_def_cfa_register %rbp
|
|
; FASTISEL-NEXT: andq $-32, %rsp
|
|
; FASTISEL-NEXT: subq $64, %rsp
|
|
; FASTISEL-NEXT: vpsllw $7, 16(%rbp), %ymm8
|
|
; FASTISEL-NEXT: vpmovb2m %ymm8, %k0
|
|
; FASTISEL-NEXT: vpmovm2b %k0, %ymm8
|
|
; FASTISEL-NEXT: vmovdqa %ymm8, (%rsp)
|
|
; FASTISEL-NEXT: callq _v32i1_mem_callee
|
|
; FASTISEL-NEXT: movq %rbp, %rsp
|
|
; FASTISEL-NEXT: popq %rbp
|
|
; FASTISEL-NEXT: vzeroupper
|
|
; FASTISEL-NEXT: retq
|
|
call void @v32i1_mem_callee(<128 x i32> %x, <32 x i1> %y)
|
|
ret void
|
|
}
|
|
|
|
declare void @v64i1_mem_callee(<128 x i32> %x, <64 x i1> %y)
|
|
define void @v64i1_mem(<128 x i32> %x, <64 x i1> %y) {
|
|
; KNL-LABEL: v64i1_mem:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: subq $472, %rsp ## imm = 0x1D8
|
|
; KNL-NEXT: .cfi_def_cfa_offset 480
|
|
; KNL-NEXT: movl 936(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 456(%rsp)
|
|
; KNL-NEXT: movl 928(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 448(%rsp)
|
|
; KNL-NEXT: movl 920(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 440(%rsp)
|
|
; KNL-NEXT: movl 912(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 432(%rsp)
|
|
; KNL-NEXT: movl 904(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 424(%rsp)
|
|
; KNL-NEXT: movl 896(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 416(%rsp)
|
|
; KNL-NEXT: movl 888(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 408(%rsp)
|
|
; KNL-NEXT: movl 880(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 400(%rsp)
|
|
; KNL-NEXT: movl 872(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 392(%rsp)
|
|
; KNL-NEXT: movl 864(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 384(%rsp)
|
|
; KNL-NEXT: movl 856(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 376(%rsp)
|
|
; KNL-NEXT: movl 848(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 368(%rsp)
|
|
; KNL-NEXT: movl 840(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 360(%rsp)
|
|
; KNL-NEXT: movl 832(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 352(%rsp)
|
|
; KNL-NEXT: movl 824(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 344(%rsp)
|
|
; KNL-NEXT: movl 816(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 336(%rsp)
|
|
; KNL-NEXT: movl 808(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 328(%rsp)
|
|
; KNL-NEXT: movl 800(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 320(%rsp)
|
|
; KNL-NEXT: movl 792(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 312(%rsp)
|
|
; KNL-NEXT: movl 784(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 304(%rsp)
|
|
; KNL-NEXT: movl 776(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 296(%rsp)
|
|
; KNL-NEXT: movl 768(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 288(%rsp)
|
|
; KNL-NEXT: movl 760(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 280(%rsp)
|
|
; KNL-NEXT: movl 752(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 272(%rsp)
|
|
; KNL-NEXT: movl 744(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 264(%rsp)
|
|
; KNL-NEXT: movl 736(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 256(%rsp)
|
|
; KNL-NEXT: movl 728(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 248(%rsp)
|
|
; KNL-NEXT: movl 720(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 240(%rsp)
|
|
; KNL-NEXT: movl 712(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 232(%rsp)
|
|
; KNL-NEXT: movl 704(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 224(%rsp)
|
|
; KNL-NEXT: movl 696(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 216(%rsp)
|
|
; KNL-NEXT: movl 688(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 208(%rsp)
|
|
; KNL-NEXT: movl 680(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 200(%rsp)
|
|
; KNL-NEXT: movl 672(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 192(%rsp)
|
|
; KNL-NEXT: movl 664(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 184(%rsp)
|
|
; KNL-NEXT: movl 656(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 176(%rsp)
|
|
; KNL-NEXT: movl 648(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 168(%rsp)
|
|
; KNL-NEXT: movl 640(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 160(%rsp)
|
|
; KNL-NEXT: movl 632(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 152(%rsp)
|
|
; KNL-NEXT: movl 624(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 144(%rsp)
|
|
; KNL-NEXT: movl 616(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 136(%rsp)
|
|
; KNL-NEXT: movl 608(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 128(%rsp)
|
|
; KNL-NEXT: movl 600(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 120(%rsp)
|
|
; KNL-NEXT: movl 592(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 112(%rsp)
|
|
; KNL-NEXT: movl 584(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 104(%rsp)
|
|
; KNL-NEXT: movl 576(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 96(%rsp)
|
|
; KNL-NEXT: movl 568(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 88(%rsp)
|
|
; KNL-NEXT: movl 560(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 80(%rsp)
|
|
; KNL-NEXT: movl 552(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 72(%rsp)
|
|
; KNL-NEXT: movl 544(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 64(%rsp)
|
|
; KNL-NEXT: movl 536(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 56(%rsp)
|
|
; KNL-NEXT: movl 528(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 48(%rsp)
|
|
; KNL-NEXT: movl 520(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 40(%rsp)
|
|
; KNL-NEXT: movl 512(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 32(%rsp)
|
|
; KNL-NEXT: movl 504(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 24(%rsp)
|
|
; KNL-NEXT: movl 496(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 16(%rsp)
|
|
; KNL-NEXT: movl 488(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, 8(%rsp)
|
|
; KNL-NEXT: movl 480(%rsp), %eax
|
|
; KNL-NEXT: movl %eax, (%rsp)
|
|
; KNL-NEXT: callq _v64i1_mem_callee
|
|
; KNL-NEXT: addq $472, %rsp ## imm = 0x1D8
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: v64i1_mem:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: pushq %rbp
|
|
; SKX-NEXT: .cfi_def_cfa_offset 16
|
|
; SKX-NEXT: .cfi_offset %rbp, -16
|
|
; SKX-NEXT: movq %rsp, %rbp
|
|
; SKX-NEXT: .cfi_def_cfa_register %rbp
|
|
; SKX-NEXT: andq $-64, %rsp
|
|
; SKX-NEXT: subq $128, %rsp
|
|
; SKX-NEXT: vmovaps 16(%rbp), %zmm8
|
|
; SKX-NEXT: vmovaps %zmm8, (%rsp)
|
|
; SKX-NEXT: callq _v64i1_mem_callee
|
|
; SKX-NEXT: movq %rbp, %rsp
|
|
; SKX-NEXT: popq %rbp
|
|
; SKX-NEXT: vzeroupper
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: v64i1_mem:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: pushl %ebp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_offset 8
|
|
; KNL_X32-NEXT: .cfi_offset %ebp, -8
|
|
; KNL_X32-NEXT: movl %esp, %ebp
|
|
; KNL_X32-NEXT: .cfi_def_cfa_register %ebp
|
|
; KNL_X32-NEXT: andl $-64, %esp
|
|
; KNL_X32-NEXT: subl $576, %esp ## imm = 0x240
|
|
; KNL_X32-NEXT: vmovaps 8(%ebp), %zmm4
|
|
; KNL_X32-NEXT: vmovaps 72(%ebp), %zmm5
|
|
; KNL_X32-NEXT: vmovaps 136(%ebp), %zmm6
|
|
; KNL_X32-NEXT: vmovaps 200(%ebp), %zmm7
|
|
; KNL_X32-NEXT: movl 516(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 508(%esp)
|
|
; KNL_X32-NEXT: movl 512(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 504(%esp)
|
|
; KNL_X32-NEXT: movl 508(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 500(%esp)
|
|
; KNL_X32-NEXT: movl 504(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 496(%esp)
|
|
; KNL_X32-NEXT: movl 500(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 492(%esp)
|
|
; KNL_X32-NEXT: movl 496(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 488(%esp)
|
|
; KNL_X32-NEXT: movl 492(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 484(%esp)
|
|
; KNL_X32-NEXT: movl 488(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 480(%esp)
|
|
; KNL_X32-NEXT: movl 484(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 476(%esp)
|
|
; KNL_X32-NEXT: movl 480(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 472(%esp)
|
|
; KNL_X32-NEXT: movl 476(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 468(%esp)
|
|
; KNL_X32-NEXT: movl 472(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 464(%esp)
|
|
; KNL_X32-NEXT: movl 468(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 460(%esp)
|
|
; KNL_X32-NEXT: movl 464(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 456(%esp)
|
|
; KNL_X32-NEXT: movl 460(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 452(%esp)
|
|
; KNL_X32-NEXT: movl 456(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 448(%esp)
|
|
; KNL_X32-NEXT: movl 452(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 444(%esp)
|
|
; KNL_X32-NEXT: movl 448(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 440(%esp)
|
|
; KNL_X32-NEXT: movl 444(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 436(%esp)
|
|
; KNL_X32-NEXT: movl 440(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 432(%esp)
|
|
; KNL_X32-NEXT: movl 436(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 428(%esp)
|
|
; KNL_X32-NEXT: movl 432(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 424(%esp)
|
|
; KNL_X32-NEXT: movl 428(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 420(%esp)
|
|
; KNL_X32-NEXT: movl 424(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 416(%esp)
|
|
; KNL_X32-NEXT: movl 420(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 412(%esp)
|
|
; KNL_X32-NEXT: movl 416(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 408(%esp)
|
|
; KNL_X32-NEXT: movl 412(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 404(%esp)
|
|
; KNL_X32-NEXT: movl 408(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 400(%esp)
|
|
; KNL_X32-NEXT: movl 404(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 396(%esp)
|
|
; KNL_X32-NEXT: movl 400(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 392(%esp)
|
|
; KNL_X32-NEXT: movl 396(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 388(%esp)
|
|
; KNL_X32-NEXT: movl 392(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 384(%esp)
|
|
; KNL_X32-NEXT: movl 388(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 380(%esp)
|
|
; KNL_X32-NEXT: movl 384(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 376(%esp)
|
|
; KNL_X32-NEXT: movl 380(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 372(%esp)
|
|
; KNL_X32-NEXT: movl 376(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 368(%esp)
|
|
; KNL_X32-NEXT: movl 372(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 364(%esp)
|
|
; KNL_X32-NEXT: movl 368(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 360(%esp)
|
|
; KNL_X32-NEXT: movl 364(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 356(%esp)
|
|
; KNL_X32-NEXT: movl 360(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 352(%esp)
|
|
; KNL_X32-NEXT: movl 356(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 348(%esp)
|
|
; KNL_X32-NEXT: movl 352(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 344(%esp)
|
|
; KNL_X32-NEXT: movl 348(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 340(%esp)
|
|
; KNL_X32-NEXT: movl 344(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 336(%esp)
|
|
; KNL_X32-NEXT: movl 340(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 332(%esp)
|
|
; KNL_X32-NEXT: movl 336(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 328(%esp)
|
|
; KNL_X32-NEXT: movl 332(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 324(%esp)
|
|
; KNL_X32-NEXT: movl 328(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 320(%esp)
|
|
; KNL_X32-NEXT: movl 324(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 316(%esp)
|
|
; KNL_X32-NEXT: movl 320(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 312(%esp)
|
|
; KNL_X32-NEXT: movl 316(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 308(%esp)
|
|
; KNL_X32-NEXT: movl 312(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 304(%esp)
|
|
; KNL_X32-NEXT: movl 308(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 300(%esp)
|
|
; KNL_X32-NEXT: movl 304(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 296(%esp)
|
|
; KNL_X32-NEXT: movl 300(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 292(%esp)
|
|
; KNL_X32-NEXT: movl 296(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 288(%esp)
|
|
; KNL_X32-NEXT: movl 292(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 284(%esp)
|
|
; KNL_X32-NEXT: movl 288(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 280(%esp)
|
|
; KNL_X32-NEXT: movl 284(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 276(%esp)
|
|
; KNL_X32-NEXT: movl 280(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 272(%esp)
|
|
; KNL_X32-NEXT: movl 276(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 268(%esp)
|
|
; KNL_X32-NEXT: movl 272(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 264(%esp)
|
|
; KNL_X32-NEXT: movl 268(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 260(%esp)
|
|
; KNL_X32-NEXT: movl 264(%ebp), %eax
|
|
; KNL_X32-NEXT: movl %eax, 256(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm7, 192(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm6, 128(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm5, 64(%esp)
|
|
; KNL_X32-NEXT: vmovaps %zmm4, (%esp)
|
|
; KNL_X32-NEXT: calll _v64i1_mem_callee
|
|
; KNL_X32-NEXT: movl %ebp, %esp
|
|
; KNL_X32-NEXT: popl %ebp
|
|
; KNL_X32-NEXT: retl
|
|
;
|
|
; FASTISEL-LABEL: v64i1_mem:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: pushq %rbp
|
|
; FASTISEL-NEXT: .cfi_def_cfa_offset 16
|
|
; FASTISEL-NEXT: .cfi_offset %rbp, -16
|
|
; FASTISEL-NEXT: movq %rsp, %rbp
|
|
; FASTISEL-NEXT: .cfi_def_cfa_register %rbp
|
|
; FASTISEL-NEXT: andq $-64, %rsp
|
|
; FASTISEL-NEXT: subq $128, %rsp
|
|
; FASTISEL-NEXT: vpsllw $7, 16(%rbp), %zmm8
|
|
; FASTISEL-NEXT: vpmovb2m %zmm8, %k0
|
|
; FASTISEL-NEXT: vpmovm2b %k0, %zmm8
|
|
; FASTISEL-NEXT: vmovdqa64 %zmm8, (%rsp)
|
|
; FASTISEL-NEXT: callq _v64i1_mem_callee
|
|
; FASTISEL-NEXT: movq %rbp, %rsp
|
|
; FASTISEL-NEXT: popq %rbp
|
|
; FASTISEL-NEXT: vzeroupper
|
|
; FASTISEL-NEXT: retq
|
|
call void @v64i1_mem_callee(<128 x i32> %x, <64 x i1> %y)
|
|
ret void
|
|
}
|
|
|
|
define i128 @PR179334(<128 x i1> %m) nounwind {
|
|
; KNL-LABEL: PR179334:
|
|
; KNL: ## %bb.0:
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 96(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $2, 104(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $3, 112(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $4, 120(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $5, 128(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $6, 136(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $7, 144(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $8, 152(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $9, 160(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $10, 168(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $11, 176(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $12, 184(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $13, 192(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $14, 200(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpinsrb $15, 208(%rsp), %xmm0, %xmm0
|
|
; KNL-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
|
|
; KNL-NEXT: vpbroadcastd {{.*#+}} zmm0 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
|
|
; KNL-NEXT: vptestmd %zmm0, %zmm1, %k0
|
|
; KNL-NEXT: kmovw %k0, %eax
|
|
; KNL-NEXT: vmovd %edi, %xmm1
|
|
; KNL-NEXT: vpinsrb $1, %esi, %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $2, %edx, %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $3, %ecx, %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $4, %r8d, %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $5, %r9d, %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $6, 8(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $7, 16(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $8, 24(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $9, 32(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $10, 40(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $11, 48(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $12, 56(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $13, 64(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $14, 72(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $15, 80(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: shll $16, %eax
|
|
; KNL-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero
|
|
; KNL-NEXT: vptestmd %zmm0, %zmm1, %k0
|
|
; KNL-NEXT: kmovw %k0, %ecx
|
|
; KNL-NEXT: orl %eax, %ecx
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 224(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $2, 232(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $3, 240(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $4, 248(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $5, 256(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $6, 264(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $7, 272(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $8, 280(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $9, 288(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $10, 296(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $11, 304(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $12, 312(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $13, 320(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $14, 328(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $15, 336(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero
|
|
; KNL-NEXT: vptestmd %zmm0, %zmm1, %k0
|
|
; KNL-NEXT: kmovw %k0, %edx
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 352(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $2, 360(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $3, 368(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $4, 376(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $5, 384(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $6, 392(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $7, 400(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $8, 408(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $9, 416(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $10, 424(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $11, 432(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $12, 440(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $13, 448(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $14, 456(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $15, 464(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero
|
|
; KNL-NEXT: vptestmd %zmm0, %zmm1, %k0
|
|
; KNL-NEXT: kmovw %k0, %eax
|
|
; KNL-NEXT: shll $16, %eax
|
|
; KNL-NEXT: orl %edx, %eax
|
|
; KNL-NEXT: shlq $32, %rax
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 480(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $2, 488(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $3, 496(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $4, 504(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $5, 512(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $6, 520(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $7, 528(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $8, 536(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $9, 544(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $10, 552(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $11, 560(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $12, 568(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $13, 576(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $14, 584(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: orq %rcx, %rax
|
|
; KNL-NEXT: vpinsrb $15, 592(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero
|
|
; KNL-NEXT: vptestmd %zmm0, %zmm1, %k0
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 608(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $2, 616(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $3, 624(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $4, 632(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $5, 640(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $6, 648(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $7, 656(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $8, 664(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $9, 672(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $10, 680(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $11, 688(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $12, 696(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $13, 704(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $14, 712(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $15, 720(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: kmovw %k0, %edx
|
|
; KNL-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero
|
|
; KNL-NEXT: vptestmd %zmm0, %zmm1, %k0
|
|
; KNL-NEXT: kmovw %k0, %ecx
|
|
; KNL-NEXT: shll $16, %ecx
|
|
; KNL-NEXT: orl %edx, %ecx
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 736(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $2, 744(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $3, 752(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $4, 760(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $5, 768(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $6, 776(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $7, 784(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $8, 792(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $9, 800(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $10, 808(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $11, 816(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $12, 824(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $13, 832(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $14, 840(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $15, 848(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero
|
|
; KNL-NEXT: vptestmd %zmm0, %zmm1, %k0
|
|
; KNL-NEXT: kmovw %k0, %esi
|
|
; KNL-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; KNL-NEXT: vpinsrb $1, 864(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $2, 872(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $3, 880(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $4, 888(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $5, 896(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $6, 904(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $7, 912(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $8, 920(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $9, 928(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $10, 936(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $11, 944(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $12, 952(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $13, 960(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $14, 968(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpinsrb $15, 976(%rsp), %xmm1, %xmm1
|
|
; KNL-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero
|
|
; KNL-NEXT: vptestmd %zmm0, %zmm1, %k0
|
|
; KNL-NEXT: kmovw %k0, %edx
|
|
; KNL-NEXT: shll $16, %edx
|
|
; KNL-NEXT: orl %esi, %edx
|
|
; KNL-NEXT: shlq $32, %rdx
|
|
; KNL-NEXT: orq %rcx, %rdx
|
|
; KNL-NEXT: retq
|
|
;
|
|
; SKX-LABEL: PR179334:
|
|
; SKX: ## %bb.0:
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 224(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $2, 232(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $3, 240(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $4, 248(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $5, 256(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $6, 264(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $7, 272(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $8, 280(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $9, 288(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $10, 296(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $11, 304(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $12, 312(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $13, 320(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $14, 328(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vpinsrb $15, 336(%rsp), %xmm0, %xmm0
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 352(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $2, 360(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $3, 368(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $4, 376(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $5, 384(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $6, 392(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $7, 400(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $8, 408(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $9, 416(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $10, 424(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $11, 432(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $12, 440(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $13, 448(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $14, 456(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $15, 464(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vmovd %edi, %xmm2
|
|
; SKX-NEXT: vpinsrb $1, %esi, %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $2, %edx, %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $3, %ecx, %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $4, %r8d, %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $5, %r9d, %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $6, 8(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $7, 16(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $8, 24(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $9, 32(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $10, 40(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $11, 48(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $12, 56(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $13, 64(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $14, 72(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $15, 80(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm3 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 96(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $2, 104(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $3, 112(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $4, 120(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $5, 128(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $6, 136(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $7, 144(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $8, 152(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $9, 160(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $10, 168(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $11, 176(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $12, 184(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $13, 192(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $14, 200(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $15, 208(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
|
|
; SKX-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm1
|
|
; SKX-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm1
|
|
; SKX-NEXT: vpbroadcastd {{.*#+}} zmm0 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
|
|
; SKX-NEXT: vptestmb %zmm0, %zmm1, %k0
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 736(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $2, 744(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $3, 752(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $4, 760(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $5, 768(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $6, 776(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $7, 784(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $8, 792(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $9, 800(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $10, 808(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $11, 816(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $12, 824(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $13, 832(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $14, 840(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vpinsrb $15, 848(%rsp), %xmm1, %xmm1
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 864(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $2, 872(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $3, 880(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $4, 888(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $5, 896(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $6, 904(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $7, 912(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $8, 920(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $9, 928(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $10, 936(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $11, 944(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $12, 952(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $13, 960(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $14, 968(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vpinsrb $15, 976(%rsp), %xmm2, %xmm2
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm3 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 480(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $2, 488(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $3, 496(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $4, 504(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $5, 512(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $6, 520(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $7, 528(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $8, 536(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $9, 544(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $10, 552(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $11, 560(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $12, 568(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $13, 576(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $14, 584(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vpinsrb $15, 592(%rsp), %xmm3, %xmm3
|
|
; SKX-NEXT: vmovd {{.*#+}} xmm4 = mem[0],zero,zero,zero
|
|
; SKX-NEXT: vpinsrb $1, 608(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $2, 616(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $3, 624(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $4, 632(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $5, 640(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $6, 648(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $7, 656(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $8, 664(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $9, 672(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $10, 680(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $11, 688(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $12, 696(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $13, 704(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vpinsrb $14, 712(%rsp), %xmm4, %xmm4
|
|
; SKX-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm1
|
|
; SKX-NEXT: vpinsrb $15, 720(%rsp), %xmm4, %xmm2
|
|
; SKX-NEXT: vinserti128 $1, %xmm2, %ymm3, %ymm2
|
|
; SKX-NEXT: vinserti64x4 $1, %ymm1, %zmm2, %zmm1
|
|
; SKX-NEXT: vptestmb %zmm0, %zmm1, %k1
|
|
; SKX-NEXT: kmovq %k1, %rdx
|
|
; SKX-NEXT: kmovq %k0, %rax
|
|
; SKX-NEXT: vzeroupper
|
|
; SKX-NEXT: retq
|
|
;
|
|
; KNL_X32-LABEL: PR179334:
|
|
; KNL_X32: ## %bb.0:
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 12(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $2, 16(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $3, 20(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $4, 24(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $5, 28(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $6, 32(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $7, 36(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $8, 40(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $9, 44(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $10, 48(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $11, 52(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $12, 56(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $13, 60(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $14, 64(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpinsrb $15, 68(%esp), %xmm0, %xmm0
|
|
; KNL_X32-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
|
|
; KNL_X32-NEXT: vpbroadcastd {{.*#+}} zmm0 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 76(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $2, 80(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $3, 84(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $4, 88(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $5, 92(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $6, 96(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $7, 100(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $8, 104(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $9, 108(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $10, 112(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $11, 116(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $12, 120(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $13, 124(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $14, 128(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vptestmd %zmm0, %zmm1, %k0
|
|
; KNL_X32-NEXT: vpinsrb $15, 132(%esp), %xmm2, %xmm1
|
|
; KNL_X32-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero
|
|
; KNL_X32-NEXT: vptestmd %zmm0, %zmm1, %k1
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 140(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $2, 144(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $3, 148(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $4, 152(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $5, 156(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $6, 160(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $7, 164(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $8, 168(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $9, 172(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $10, 176(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $11, 180(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $12, 184(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $13, 188(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $14, 192(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $15, 196(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 204(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $2, 208(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $3, 212(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $4, 216(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $5, 220(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $6, 224(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $7, 228(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $8, 232(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $9, 236(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $10, 240(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $11, 244(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $12, 248(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $13, 252(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $14, 256(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $15, 260(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vptestmd %zmm0, %zmm1, %k2
|
|
; KNL_X32-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero,xmm2[4],zero,zero,zero,xmm2[5],zero,zero,zero,xmm2[6],zero,zero,zero,xmm2[7],zero,zero,zero,xmm2[8],zero,zero,zero,xmm2[9],zero,zero,zero,xmm2[10],zero,zero,zero,xmm2[11],zero,zero,zero,xmm2[12],zero,zero,zero,xmm2[13],zero,zero,zero,xmm2[14],zero,zero,zero,xmm2[15],zero,zero,zero
|
|
; KNL_X32-NEXT: vptestmd %zmm0, %zmm1, %k3
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 268(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $2, 272(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $3, 276(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $4, 280(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $5, 284(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $6, 288(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $7, 292(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $8, 296(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $9, 300(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $10, 304(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $11, 308(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $12, 312(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $13, 316(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $14, 320(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $15, 324(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 332(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $2, 336(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $3, 340(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $4, 344(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $5, 348(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $6, 352(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $7, 356(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $8, 360(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $9, 364(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $10, 368(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $11, 372(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $12, 376(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $13, 380(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $14, 384(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vptestmd %zmm0, %zmm1, %k4
|
|
; KNL_X32-NEXT: vpinsrb $15, 388(%esp), %xmm2, %xmm1
|
|
; KNL_X32-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero
|
|
; KNL_X32-NEXT: vptestmd %zmm0, %zmm1, %k5
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 396(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $2, 400(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $3, 404(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $4, 408(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $5, 412(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $6, 416(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $7, 420(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $8, 424(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $9, 428(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $10, 432(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $11, 436(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $12, 440(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $13, 444(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $14, 448(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpinsrb $15, 452(%esp), %xmm1, %xmm1
|
|
; KNL_X32-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero,xmm1[4],zero,zero,zero,xmm1[5],zero,zero,zero,xmm1[6],zero,zero,zero,xmm1[7],zero,zero,zero,xmm1[8],zero,zero,zero,xmm1[9],zero,zero,zero,xmm1[10],zero,zero,zero,xmm1[11],zero,zero,zero,xmm1[12],zero,zero,zero,xmm1[13],zero,zero,zero,xmm1[14],zero,zero,zero,xmm1[15],zero,zero,zero
|
|
; KNL_X32-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; KNL_X32-NEXT: vpinsrb $1, 460(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $2, 464(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $3, 468(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $4, 472(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $5, 476(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $6, 480(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $7, 484(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $8, 488(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $9, 492(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $10, 496(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $11, 500(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $12, 504(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $13, 508(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $14, 512(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vpinsrb $15, 516(%esp), %xmm2, %xmm2
|
|
; KNL_X32-NEXT: vptestmd %zmm0, %zmm1, %k6
|
|
; KNL_X32-NEXT: vpmovzxbd {{.*#+}} zmm1 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero,xmm2[4],zero,zero,zero,xmm2[5],zero,zero,zero,xmm2[6],zero,zero,zero,xmm2[7],zero,zero,zero,xmm2[8],zero,zero,zero,xmm2[9],zero,zero,zero,xmm2[10],zero,zero,zero,xmm2[11],zero,zero,zero,xmm2[12],zero,zero,zero,xmm2[13],zero,zero,zero,xmm2[14],zero,zero,zero,xmm2[15],zero,zero,zero
|
|
; KNL_X32-NEXT: vptestmd %zmm0, %zmm1, %k7
|
|
; KNL_X32-NEXT: movl 4(%esp), %eax
|
|
; KNL_X32-NEXT: kmovw %k7, 14(%eax)
|
|
; KNL_X32-NEXT: kmovw %k6, 12(%eax)
|
|
; KNL_X32-NEXT: kmovw %k5, 10(%eax)
|
|
; KNL_X32-NEXT: kmovw %k4, 8(%eax)
|
|
; KNL_X32-NEXT: kmovw %k3, 6(%eax)
|
|
; KNL_X32-NEXT: kmovw %k2, 4(%eax)
|
|
; KNL_X32-NEXT: kmovw %k1, 2(%eax)
|
|
; KNL_X32-NEXT: kmovw %k0, (%eax)
|
|
; KNL_X32-NEXT: retl $4
|
|
;
|
|
; FASTISEL-LABEL: PR179334:
|
|
; FASTISEL: ## %bb.0:
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 736(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $2, 744(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $3, 752(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $4, 760(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $5, 768(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $6, 776(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $7, 784(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $8, 792(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $9, 800(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $10, 808(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $11, 816(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $12, 824(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $13, 832(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $14, 840(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vpinsrb $15, 848(%rsp), %xmm0, %xmm0
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 864(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $2, 872(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $3, 880(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $4, 888(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $5, 896(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $6, 904(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $7, 912(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $8, 920(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $9, 928(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $10, 936(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $11, 944(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $12, 952(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $13, 960(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $14, 968(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $15, 976(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 480(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $2, 488(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $3, 496(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $4, 504(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $5, 512(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $6, 520(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $7, 528(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $8, 536(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $9, 544(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $10, 552(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $11, 560(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $12, 568(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $13, 576(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $14, 584(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $15, 592(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 608(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $2, 616(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $3, 624(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $4, 632(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $5, 640(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $6, 648(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $7, 656(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $8, 664(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $9, 672(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $10, 680(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $11, 688(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $12, 696(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $13, 704(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $14, 712(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $15, 720(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm1
|
|
; FASTISEL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm1
|
|
; FASTISEL-NEXT: vpbroadcastd {{.*#+}} zmm0 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 224(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $2, 232(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $3, 240(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $4, 248(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $5, 256(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $6, 264(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $7, 272(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $8, 280(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $9, 288(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $10, 296(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $11, 304(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $12, 312(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $13, 320(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $14, 328(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vpinsrb $15, 336(%rsp), %xmm2, %xmm2
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm3 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 352(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $2, 360(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $3, 368(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $4, 376(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $5, 384(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $6, 392(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $7, 400(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $8, 408(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $9, 416(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $10, 424(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $11, 432(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $12, 440(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $13, 448(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vptestmb %zmm0, %zmm1, %k0
|
|
; FASTISEL-NEXT: vpinsrb $14, 456(%rsp), %xmm3, %xmm1
|
|
; FASTISEL-NEXT: vpinsrb $15, 464(%rsp), %xmm1, %xmm1
|
|
; FASTISEL-NEXT: vmovd %edi, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $1, %esi, %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $2, %edx, %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $3, %ecx, %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $4, %r8d, %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $5, %r9d, %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $6, 8(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $7, 16(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $8, 24(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $9, 32(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $10, 40(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $11, 48(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $12, 56(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $13, 64(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $14, 72(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vpinsrb $15, 80(%rsp), %xmm3, %xmm3
|
|
; FASTISEL-NEXT: vmovd {{.*#+}} xmm4 = mem[0],zero,zero,zero
|
|
; FASTISEL-NEXT: vpinsrb $1, 96(%rsp), %xmm4, %xmm4
|
|
; FASTISEL-NEXT: vpinsrb $2, 104(%rsp), %xmm4, %xmm4
|
|
; FASTISEL-NEXT: vpinsrb $3, 112(%rsp), %xmm4, %xmm4
|
|
; FASTISEL-NEXT: vpinsrb $4, 120(%rsp), %xmm4, %xmm4
|
|
; FASTISEL-NEXT: vpinsrb $5, 128(%rsp), %xmm4, %xmm4
|
|
; FASTISEL-NEXT: vpinsrb $6, 136(%rsp), %xmm4, %xmm4
|
|
; FASTISEL-NEXT: vpinsrb $7, 144(%rsp), %xmm4, %xmm4
|
|
; FASTISEL-NEXT: vpinsrb $8, 152(%rsp), %xmm4, %xmm4
|
|
; FASTISEL-NEXT: vpinsrb $9, 160(%rsp), %xmm4, %xmm4
|
|
; FASTISEL-NEXT: vpinsrb $10, 168(%rsp), %xmm4, %xmm4
|
|
; FASTISEL-NEXT: vpinsrb $11, 176(%rsp), %xmm4, %xmm4
|
|
; FASTISEL-NEXT: vpinsrb $12, 184(%rsp), %xmm4, %xmm4
|
|
; FASTISEL-NEXT: vpinsrb $13, 192(%rsp), %xmm4, %xmm4
|
|
; FASTISEL-NEXT: vpinsrb $14, 200(%rsp), %xmm4, %xmm4
|
|
; FASTISEL-NEXT: vinserti128 $1, %xmm1, %ymm2, %ymm1
|
|
; FASTISEL-NEXT: vpinsrb $15, 208(%rsp), %xmm4, %xmm2
|
|
; FASTISEL-NEXT: vinserti128 $1, %xmm2, %ymm3, %ymm2
|
|
; FASTISEL-NEXT: vinserti64x4 $1, %ymm1, %zmm2, %zmm1
|
|
; FASTISEL-NEXT: vptestmb %zmm0, %zmm1, %k1
|
|
; FASTISEL-NEXT: kmovq %k1, %rax
|
|
; FASTISEL-NEXT: kmovq %k0, %rdx
|
|
; FASTISEL-NEXT: vzeroupper
|
|
; FASTISEL-NEXT: retq
|
|
%t = bitcast <128 x i1> %m to i128
|
|
ret i128 %t
|
|
}
|