Files
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

591 lines
31 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -O2 -mattr=avx512f -mtriple=x86_64-unknown | FileCheck %s --check-prefix=CHECK64
; RUN: llc < %s -O2 -mattr=avx512f -mtriple=i386-unknown | FileCheck %s --check-prefix=CHECK32
; RUN: llc < %s -O2 -mattr=avx512vl -mtriple=x86_64-unknown | FileCheck %s --check-prefix=CHECK64
; RUN: llc < %s -O2 -mattr=avx512vl -mtriple=i386-unknown | FileCheck %s --check-prefix=CHECK32
define <4 x float> @test_mm_mask_move_ss(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) local_unnamed_addr #0 {
; CHECK64-LABEL: test_mm_mask_move_ss:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %edi, %k1
; CHECK64-NEXT: vmovss %xmm2, %xmm1, %xmm0 {%k1}
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_mask_move_ss:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: kmovw %eax, %k1
; CHECK32-NEXT: vmovss %xmm2, %xmm1, %xmm0 {%k1}
; CHECK32-NEXT: retl
entry:
%0 = and i8 %__U, 1
%tobool.i = icmp ne i8 %0, 0
%__B.elt.i = extractelement <4 x float> %__B, i32 0
%__W.elt.i = extractelement <4 x float> %__W, i32 0
%vecext1.i = select i1 %tobool.i, float %__B.elt.i, float %__W.elt.i
%vecins.i = insertelement <4 x float> %__A, float %vecext1.i, i32 0
ret <4 x float> %vecins.i
}
define <4 x float> @test_mm_maskz_move_ss(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) local_unnamed_addr #0 {
; CHECK64-LABEL: test_mm_maskz_move_ss:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %edi, %k1
; CHECK64-NEXT: vmovss %xmm1, %xmm0, %xmm0 {%k1} {z}
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_maskz_move_ss:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: kmovw %eax, %k1
; CHECK32-NEXT: vmovss %xmm1, %xmm0, %xmm0 {%k1} {z}
; CHECK32-NEXT: retl
entry:
%0 = and i8 %__U, 1
%tobool.i = icmp ne i8 %0, 0
%vecext.i = extractelement <4 x float> %__B, i32 0
%cond.i = select i1 %tobool.i, float %vecext.i, float 0.000000e+00
%vecins.i = insertelement <4 x float> %__A, float %cond.i, i32 0
ret <4 x float> %vecins.i
}
define <2 x double> @test_mm_mask_move_sd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) local_unnamed_addr #0 {
; CHECK64-LABEL: test_mm_mask_move_sd:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %edi, %k1
; CHECK64-NEXT: vmovsd %xmm2, %xmm1, %xmm0 {%k1}
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_mask_move_sd:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: kmovw %eax, %k1
; CHECK32-NEXT: vmovsd %xmm2, %xmm1, %xmm0 {%k1}
; CHECK32-NEXT: retl
entry:
%0 = and i8 %__U, 1
%tobool.i = icmp ne i8 %0, 0
%__B.elt.i = extractelement <2 x double> %__B, i32 0
%__W.elt.i = extractelement <2 x double> %__W, i32 0
%vecext1.i = select i1 %tobool.i, double %__B.elt.i, double %__W.elt.i
%vecins.i = insertelement <2 x double> %__A, double %vecext1.i, i32 0
ret <2 x double> %vecins.i
}
define <2 x double> @test_mm_maskz_move_sd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) local_unnamed_addr #0 {
; CHECK64-LABEL: test_mm_maskz_move_sd:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %edi, %k1
; CHECK64-NEXT: vmovsd %xmm1, %xmm0, %xmm0 {%k1} {z}
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_maskz_move_sd:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: kmovw %eax, %k1
; CHECK32-NEXT: vmovsd %xmm1, %xmm0, %xmm0 {%k1} {z}
; CHECK32-NEXT: retl
entry:
%0 = and i8 %__U, 1
%tobool.i = icmp ne i8 %0, 0
%vecext.i = extractelement <2 x double> %__B, i32 0
%cond.i = select i1 %tobool.i, double %vecext.i, double 0.000000e+00
%vecins.i = insertelement <2 x double> %__A, double %cond.i, i32 0
ret <2 x double> %vecins.i
}
define void @test_mm_mask_store_ss(ptr %__W, i8 zeroext %__U, <4 x float> %__A) local_unnamed_addr #1 {
; CHECK64-LABEL: test_mm_mask_store_ss:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %esi, %k1
; CHECK64-NEXT: vmovss %xmm0, (%rdi) {%k1}
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_mask_store_ss:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
; CHECK32-NEXT: kmovw %ecx, %k1
; CHECK32-NEXT: vmovss %xmm0, (%eax) {%k1}
; CHECK32-NEXT: retl
entry:
%shuffle.i.i = shufflevector <4 x float> %__A, <4 x float> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
%0 = and i8 %__U, 1
%conv2.i = zext i8 %0 to i16
%1 = bitcast i16 %conv2.i to <16 x i1>
tail call void @llvm.masked.store.v16f32.p0(<16 x float> %shuffle.i.i, ptr %__W, i32 16, <16 x i1> %1) #5
ret void
}
define void @test_mm_mask_store_sd(ptr %__W, i8 zeroext %__U, <2 x double> %__A) local_unnamed_addr #1 {
; CHECK64-LABEL: test_mm_mask_store_sd:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %esi, %k1
; CHECK64-NEXT: vmovsd %xmm0, (%rdi) {%k1}
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_mask_store_sd:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
; CHECK32-NEXT: kmovw %ecx, %k1
; CHECK32-NEXT: vmovsd %xmm0, (%eax) {%k1}
; CHECK32-NEXT: retl
entry:
%shuffle.i.i = shufflevector <2 x double> %__A, <2 x double> undef, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
%0 = and i8 %__U, 1
%1 = bitcast i8 %0 to <8 x i1>
tail call void @llvm.masked.store.v8f64.p0(<8 x double> %shuffle.i.i, ptr %__W, i32 16, <8 x i1> %1) #5
ret void
}
define <4 x float> @test_mm_mask_load_ss(<4 x float> %__A, i8 zeroext %__U, ptr %__W) local_unnamed_addr #2 {
; CHECK64-LABEL: test_mm_mask_load_ss:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %edi, %k1
; CHECK64-NEXT: vmovss {{.*#+}} xmm0 {%k1} = mem[0],zero,zero,zero
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_mask_load_ss:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
; CHECK32-NEXT: kmovw %ecx, %k1
; CHECK32-NEXT: vmovss {{.*#+}} xmm0 {%k1} = mem[0],zero,zero,zero
; CHECK32-NEXT: retl
entry:
%shuffle.i = shufflevector <4 x float> %__A, <4 x float> <float 0.000000e+00, float undef, float undef, float undef>, <4 x i32> <i32 0, i32 4, i32 4, i32 4>
%shuffle.i.i = shufflevector <4 x float> %shuffle.i, <4 x float> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
%0 = and i8 %__U, 1
%conv2.i = zext i8 %0 to i16
%1 = bitcast i16 %conv2.i to <16 x i1>
%2 = tail call <16 x float> @llvm.masked.load.v16f32.p0(ptr %__W, i32 16, <16 x i1> %1, <16 x float> %shuffle.i.i) #5
%shuffle4.i = shufflevector <16 x float> %2, <16 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
ret <4 x float> %shuffle4.i
}
define <2 x double> @test_mm_mask_load_sd(<2 x double> %__A, i8 zeroext %__U, ptr %__W) local_unnamed_addr #2 {
; CHECK64-LABEL: test_mm_mask_load_sd:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %edi, %k1
; CHECK64-NEXT: vmovsd {{.*#+}} xmm0 {%k1} = mem[0],zero
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_mask_load_sd:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
; CHECK32-NEXT: kmovw %ecx, %k1
; CHECK32-NEXT: vmovsd {{.*#+}} xmm0 {%k1} = mem[0],zero
; CHECK32-NEXT: retl
entry:
%shuffle5.i = insertelement <2 x double> %__A, double 0.000000e+00, i32 1
%shuffle.i.i = shufflevector <2 x double> %shuffle5.i, <2 x double> undef, <8 x i32> <i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
%0 = and i8 %__U, 1
%1 = bitcast i8 %0 to <8 x i1>
%2 = tail call <8 x double> @llvm.masked.load.v8f64.p0(ptr %__W, i32 16, <8 x i1> %1, <8 x double> %shuffle.i.i) #5
%shuffle3.i = shufflevector <8 x double> %2, <8 x double> undef, <2 x i32> <i32 0, i32 1>
ret <2 x double> %shuffle3.i
}
define <4 x float> @test_mm_maskz_load_ss(i8 zeroext %__U, ptr %__W) local_unnamed_addr #2 {
; CHECK64-LABEL: test_mm_maskz_load_ss:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %edi, %k1
; CHECK64-NEXT: vmovss {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,zero,zero
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_maskz_load_ss:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
; CHECK32-NEXT: kmovw %ecx, %k1
; CHECK32-NEXT: vmovss {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,zero,zero
; CHECK32-NEXT: retl
entry:
%0 = and i8 %__U, 1
%conv2.i = zext i8 %0 to i16
%1 = bitcast i16 %conv2.i to <16 x i1>
%2 = tail call <16 x float> @llvm.masked.load.v16f32.p0(ptr %__W, i32 16, <16 x i1> %1, <16 x float> zeroinitializer) #5
%shuffle.i = shufflevector <16 x float> %2, <16 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
ret <4 x float> %shuffle.i
}
define <2 x double> @test_mm_maskz_load_sd(i8 zeroext %__U, ptr %__W) local_unnamed_addr #2 {
; CHECK64-LABEL: test_mm_maskz_load_sd:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %edi, %k1
; CHECK64-NEXT: vmovsd {{.*#+}} xmm0 {%k1} {z} = mem[0],zero
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_maskz_load_sd:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
; CHECK32-NEXT: kmovw %ecx, %k1
; CHECK32-NEXT: vmovsd {{.*#+}} xmm0 {%k1} {z} = mem[0],zero
; CHECK32-NEXT: retl
entry:
%0 = and i8 %__U, 1
%1 = bitcast i8 %0 to <8 x i1>
%2 = tail call <8 x double> @llvm.masked.load.v8f64.p0(ptr %__W, i32 16, <8 x i1> %1, <8 x double> zeroinitializer) #5
%shuffle.i = shufflevector <8 x double> %2, <8 x double> undef, <2 x i32> <i32 0, i32 1>
ret <2 x double> %shuffle.i
}
; The tests below match clang's newer codegen that uses 128-bit masked load/stores.
define void @test_mm_mask_store_ss_2(ptr %__P, i8 zeroext %__U, <4 x float> %__A) {
; CHECK64-LABEL: test_mm_mask_store_ss_2:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %esi, %k1
; CHECK64-NEXT: vmovss %xmm0, (%rdi) {%k1}
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_mask_store_ss_2:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
; CHECK32-NEXT: kmovw %ecx, %k1
; CHECK32-NEXT: vmovss %xmm0, (%eax) {%k1}
; CHECK32-NEXT: retl
entry:
%0 = and i8 %__U, 1
%1 = bitcast i8 %0 to <8 x i1>
%extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
tail call void @llvm.masked.store.v4f32.p0(<4 x float> %__A, ptr %__P, i32 1, <4 x i1> %extract.i)
ret void
}
define void @test_mm_mask_store_sd_2(ptr %__P, i8 zeroext %__U, <2 x double> %__A) {
; CHECK64-LABEL: test_mm_mask_store_sd_2:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %esi, %k1
; CHECK64-NEXT: vmovsd %xmm0, (%rdi) {%k1}
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_mask_store_sd_2:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
; CHECK32-NEXT: kmovw %ecx, %k1
; CHECK32-NEXT: vmovsd %xmm0, (%eax) {%k1}
; CHECK32-NEXT: retl
entry:
%0 = and i8 %__U, 1
%1 = bitcast i8 %0 to <8 x i1>
%extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>
tail call void @llvm.masked.store.v2f64.p0(<2 x double> %__A, ptr %__P, i32 1, <2 x i1> %extract.i)
ret void
}
define <4 x float> @test_mm_mask_load_ss_2(<4 x float> %__A, i8 zeroext %__U, ptr readonly %__W) {
; CHECK64-LABEL: test_mm_mask_load_ss_2:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %edi, %k1
; CHECK64-NEXT: vmovss {{.*#+}} xmm0 {%k1} = mem[0],zero,zero,zero
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_mask_load_ss_2:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
; CHECK32-NEXT: kmovw %ecx, %k1
; CHECK32-NEXT: vmovss {{.*#+}} xmm0 {%k1} = mem[0],zero,zero,zero
; CHECK32-NEXT: retl
entry:
%shuffle.i = shufflevector <4 x float> %__A, <4 x float> <float 0.000000e+00, float undef, float undef, float undef>, <4 x i32> <i32 0, i32 4, i32 4, i32 4>
%0 = and i8 %__U, 1
%1 = bitcast i8 %0 to <8 x i1>
%extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
%2 = tail call <4 x float> @llvm.masked.load.v4f32.p0(ptr %__W, i32 1, <4 x i1> %extract.i, <4 x float> %shuffle.i)
ret <4 x float> %2
}
define <4 x float> @test_mm_maskz_load_ss_2(i8 zeroext %__U, ptr readonly %__W) {
; CHECK64-LABEL: test_mm_maskz_load_ss_2:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %edi, %k1
; CHECK64-NEXT: vmovss {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,zero,zero
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_maskz_load_ss_2:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
; CHECK32-NEXT: kmovw %ecx, %k1
; CHECK32-NEXT: vmovss {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,zero,zero
; CHECK32-NEXT: retl
entry:
%0 = and i8 %__U, 1
%1 = bitcast i8 %0 to <8 x i1>
%extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
%2 = tail call <4 x float> @llvm.masked.load.v4f32.p0(ptr %__W, i32 1, <4 x i1> %extract.i, <4 x float> zeroinitializer)
ret <4 x float> %2
}
define <2 x double> @test_mm_mask_load_sd_2(<2 x double> %__A, i8 zeroext %__U, ptr readonly %__W) {
; CHECK64-LABEL: test_mm_mask_load_sd_2:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %edi, %k1
; CHECK64-NEXT: vmovsd {{.*#+}} xmm0 {%k1} = mem[0],zero
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_mask_load_sd_2:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
; CHECK32-NEXT: kmovw %ecx, %k1
; CHECK32-NEXT: vmovsd {{.*#+}} xmm0 {%k1} = mem[0],zero
; CHECK32-NEXT: retl
entry:
%shuffle3.i = insertelement <2 x double> %__A, double 0.000000e+00, i32 1
%0 = and i8 %__U, 1
%1 = bitcast i8 %0 to <8 x i1>
%extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>
%2 = tail call <2 x double> @llvm.masked.load.v2f64.p0(ptr %__W, i32 1, <2 x i1> %extract.i, <2 x double> %shuffle3.i)
ret <2 x double> %2
}
define <2 x double> @test_mm_maskz_load_sd_2(i8 zeroext %__U, ptr readonly %__W) {
; CHECK64-LABEL: test_mm_maskz_load_sd_2:
; CHECK64: # %bb.0: # %entry
; CHECK64-NEXT: kmovw %edi, %k1
; CHECK64-NEXT: vmovsd {{.*#+}} xmm0 {%k1} {z} = mem[0],zero
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_mm_maskz_load_sd_2:
; CHECK32: # %bb.0: # %entry
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
; CHECK32-NEXT: kmovw %ecx, %k1
; CHECK32-NEXT: vmovsd {{.*#+}} xmm0 {%k1} {z} = mem[0],zero
; CHECK32-NEXT: retl
entry:
%0 = and i8 %__U, 1
%1 = bitcast i8 %0 to <8 x i1>
%extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>
%2 = tail call <2 x double> @llvm.masked.load.v2f64.p0(ptr %__W, i32 1, <2 x i1> %extract.i, <2 x double> zeroinitializer)
ret <2 x double> %2
}
; PR198165
define <80 x i32> @test_maskz_load_v80i32(ptr %p, <80 x i1> %mask) nounwind {
; CHECK64-LABEL: test_maskz_load_v80i32:
; CHECK64: # %bb.0:
; CHECK64-NEXT: movq %rdi, %rax
; CHECK64-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
; CHECK64-NEXT: vpinsrb $1, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-NEXT: vpinsrb $2, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-NEXT: vpinsrb $3, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-NEXT: vpinsrb $4, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-NEXT: vpinsrb $5, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-NEXT: vpinsrb $6, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-NEXT: vpinsrb $7, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-NEXT: vpinsrb $8, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-NEXT: vpinsrb $9, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-NEXT: vpinsrb $10, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-NEXT: vpinsrb $11, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-NEXT: vpinsrb $12, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-NEXT: vpinsrb $13, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-NEXT: vpinsrb $14, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-NEXT: vpinsrb $15, {{[0-9]+}}(%rsp), %xmm0, %xmm0
; CHECK64-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
; CHECK64-NEXT: vpbroadcastd {{.*#+}} zmm0 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
; CHECK64-NEXT: vptestmd %zmm0, %zmm1, %k1
; CHECK64-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
; CHECK64-NEXT: vpinsrb $1, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $2, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $3, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $4, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $5, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $6, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $7, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $8, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $9, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $10, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $11, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $12, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $13, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $14, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $15, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-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
; CHECK64-NEXT: vptestmd %zmm0, %zmm1, %k2
; CHECK64-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
; CHECK64-NEXT: vpinsrb $1, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $2, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $3, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $4, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $5, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $6, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $7, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $8, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $9, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $10, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $11, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $12, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $13, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $14, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $15, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-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
; CHECK64-NEXT: vptestmd %zmm0, %zmm1, %k3
; CHECK64-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
; CHECK64-NEXT: vpinsrb $1, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $2, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $3, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $4, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $5, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $6, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $7, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $8, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $9, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $10, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $11, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $12, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $13, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $14, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $15, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-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
; CHECK64-NEXT: vptestmd %zmm0, %zmm1, %k4
; CHECK64-NEXT: vmovd %edx, %xmm1
; CHECK64-NEXT: vpinsrb $1, %ecx, %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $2, %r8d, %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $3, %r9d, %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $4, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $5, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $6, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $7, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $8, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $9, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $10, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $11, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $12, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $13, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $14, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-NEXT: vpinsrb $15, {{[0-9]+}}(%rsp), %xmm1, %xmm1
; CHECK64-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
; CHECK64-NEXT: vptestmd %zmm0, %zmm1, %k5
; CHECK64-NEXT: vmovdqu32 (%rsi), %zmm0 {%k5} {z}
; CHECK64-NEXT: vmovdqu32 64(%rsi), %zmm1 {%k4} {z}
; CHECK64-NEXT: vmovdqu32 128(%rsi), %zmm2 {%k3} {z}
; CHECK64-NEXT: vmovdqu32 192(%rsi), %zmm3 {%k2} {z}
; CHECK64-NEXT: vmovdqu32 256(%rsi), %zmm4 {%k1} {z}
; CHECK64-NEXT: vmovdqa64 %zmm4, 256(%rdi)
; CHECK64-NEXT: vmovdqa64 %zmm3, 192(%rdi)
; CHECK64-NEXT: vmovdqa64 %zmm2, 128(%rdi)
; CHECK64-NEXT: vmovdqa64 %zmm1, 64(%rdi)
; CHECK64-NEXT: vmovdqa64 %zmm0, (%rdi)
; CHECK64-NEXT: vzeroupper
; CHECK64-NEXT: retq
;
; CHECK32-LABEL: test_maskz_load_v80i32:
; CHECK32: # %bb.0:
; CHECK32-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
; CHECK32-NEXT: vpinsrb $1, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-NEXT: vpinsrb $2, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-NEXT: vpinsrb $3, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-NEXT: vpinsrb $4, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-NEXT: vpinsrb $5, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-NEXT: vpinsrb $6, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-NEXT: vpinsrb $7, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-NEXT: vpinsrb $8, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-NEXT: vpinsrb $9, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-NEXT: vpinsrb $10, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-NEXT: vpinsrb $11, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-NEXT: vpinsrb $12, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-NEXT: vpinsrb $13, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-NEXT: vpinsrb $14, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-NEXT: vpinsrb $15, {{[0-9]+}}(%esp), %xmm0, %xmm0
; CHECK32-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
; CHECK32-NEXT: vpbroadcastd {{.*#+}} zmm0 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
; CHECK32-NEXT: vptestmd %zmm0, %zmm1, %k1
; CHECK32-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
; CHECK32-NEXT: vpinsrb $1, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $2, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $3, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $4, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $5, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $6, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $7, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $8, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $9, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $10, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $11, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $12, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $13, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $14, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $15, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-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
; CHECK32-NEXT: vptestmd %zmm0, %zmm1, %k2
; CHECK32-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
; CHECK32-NEXT: vpinsrb $1, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $2, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $3, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $4, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $5, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $6, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $7, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $8, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $9, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $10, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $11, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $12, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $13, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $14, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $15, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-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
; CHECK32-NEXT: vptestmd %zmm0, %zmm1, %k3
; CHECK32-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
; CHECK32-NEXT: vpinsrb $1, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $2, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $3, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $4, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $5, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $6, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $7, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $8, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $9, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $10, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $11, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $12, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $13, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $14, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $15, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-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
; CHECK32-NEXT: vptestmd %zmm0, %zmm1, %k4
; CHECK32-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
; CHECK32-NEXT: vpinsrb $1, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $2, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $3, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $4, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $5, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $6, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $7, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $8, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $9, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $10, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $11, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $12, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $13, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $14, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-NEXT: vpinsrb $15, {{[0-9]+}}(%esp), %xmm1, %xmm1
; CHECK32-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
; CHECK32-NEXT: vptestmd %zmm0, %zmm1, %k5
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK32-NEXT: movl {{[0-9]+}}(%esp), %ecx
; CHECK32-NEXT: vmovdqu32 (%ecx), %zmm0 {%k5} {z}
; CHECK32-NEXT: vmovdqu32 64(%ecx), %zmm1 {%k4} {z}
; CHECK32-NEXT: vmovdqu32 128(%ecx), %zmm2 {%k3} {z}
; CHECK32-NEXT: vmovdqu32 192(%ecx), %zmm3 {%k2} {z}
; CHECK32-NEXT: vmovdqu32 256(%ecx), %zmm4 {%k1} {z}
; CHECK32-NEXT: vmovdqa64 %zmm4, 256(%eax)
; CHECK32-NEXT: vmovdqa64 %zmm3, 192(%eax)
; CHECK32-NEXT: vmovdqa64 %zmm2, 128(%eax)
; CHECK32-NEXT: vmovdqa64 %zmm1, 64(%eax)
; CHECK32-NEXT: vmovdqa64 %zmm0, (%eax)
; CHECK32-NEXT: vzeroupper
; CHECK32-NEXT: retl $4
%r = call <80 x i32> @llvm.masked.load.v80i32.p0(ptr %p, <80 x i1> %mask, <80 x i32> zeroinitializer)
ret <80 x i32> %r
}