brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.2 KiB · 7e2f362 Raw
201 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512bw | FileCheck %s3 4define <64 x i8> @test1(ptr %addr) {5; CHECK-LABEL: test1:6; CHECK:       ## %bb.0:7; CHECK-NEXT:    vmovups (%rdi), %zmm08; CHECK-NEXT:    retq9  %res = load <64 x i8>, ptr %addr, align 110  ret <64 x i8>%res11}12 13define void @test2(ptr %addr, <64 x i8> %data) {14; CHECK-LABEL: test2:15; CHECK:       ## %bb.0:16; CHECK-NEXT:    vmovups %zmm0, (%rdi)17; CHECK-NEXT:    retq18  store <64 x i8>%data, ptr %addr, align 119  ret void20}21 22define <64 x i8> @test3(ptr %addr, <64 x i8> %old, <64 x i8> %mask1) {23; CHECK-LABEL: test3:24; CHECK:       ## %bb.0:25; CHECK-NEXT:    vptestmb %zmm1, %zmm1, %k126; CHECK-NEXT:    vmovdqu8 (%rdi), %zmm0 {%k1}27; CHECK-NEXT:    retq28  %mask = icmp ne <64 x i8> %mask1, zeroinitializer29  %r = load <64 x i8>, ptr %addr, align 130  %res = select <64 x i1> %mask, <64 x i8> %r, <64 x i8> %old31  ret <64 x i8>%res32}33 34define <64 x i8> @test4(ptr %addr, <64 x i8> %mask1) {35; CHECK-LABEL: test4:36; CHECK:       ## %bb.0:37; CHECK-NEXT:    vptestmb %zmm0, %zmm0, %k138; CHECK-NEXT:    vmovdqu8 (%rdi), %zmm0 {%k1} {z}39; CHECK-NEXT:    retq40  %mask = icmp ne <64 x i8> %mask1, zeroinitializer41  %r = load <64 x i8>, ptr %addr, align 142  %res = select <64 x i1> %mask, <64 x i8> %r, <64 x i8> zeroinitializer43  ret <64 x i8>%res44}45 46define <32 x i16> @test5(ptr %addr) {47; CHECK-LABEL: test5:48; CHECK:       ## %bb.0:49; CHECK-NEXT:    vmovups (%rdi), %zmm050; CHECK-NEXT:    retq51  %res = load <32 x i16>, ptr %addr, align 152  ret <32 x i16>%res53}54 55define void @test6(ptr %addr, <32 x i16> %data) {56; CHECK-LABEL: test6:57; CHECK:       ## %bb.0:58; CHECK-NEXT:    vmovups %zmm0, (%rdi)59; CHECK-NEXT:    retq60  store <32 x i16>%data, ptr %addr, align 161  ret void62}63 64define <32 x i16> @test7(ptr %addr, <32 x i16> %old, <32 x i16> %mask1) {65; CHECK-LABEL: test7:66; CHECK:       ## %bb.0:67; CHECK-NEXT:    vptestmw %zmm1, %zmm1, %k168; CHECK-NEXT:    vmovdqu16 (%rdi), %zmm0 {%k1}69; CHECK-NEXT:    retq70  %mask = icmp ne <32 x i16> %mask1, zeroinitializer71  %r = load <32 x i16>, ptr %addr, align 172  %res = select <32 x i1> %mask, <32 x i16> %r, <32 x i16> %old73  ret <32 x i16>%res74}75 76define <32 x i16> @test8(ptr %addr, <32 x i16> %mask1) {77; CHECK-LABEL: test8:78; CHECK:       ## %bb.0:79; CHECK-NEXT:    vptestmw %zmm0, %zmm0, %k180; CHECK-NEXT:    vmovdqu16 (%rdi), %zmm0 {%k1} {z}81; CHECK-NEXT:    retq82  %mask = icmp ne <32 x i16> %mask1, zeroinitializer83  %r = load <32 x i16>, ptr %addr, align 184  %res = select <32 x i1> %mask, <32 x i16> %r, <32 x i16> zeroinitializer85  ret <32 x i16>%res86}87 88define <16 x i8> @test_mask_load_16xi8(<16 x i1> %mask, ptr %addr, <16 x i8> %val) {89; CHECK-LABEL: test_mask_load_16xi8:90; CHECK:       ## %bb.0:91; CHECK-NEXT:    vpsllw $7, %xmm0, %xmm092; CHECK-NEXT:    vpmovb2m %zmm0, %k093; CHECK-NEXT:    kmovw %k0, %k194; CHECK-NEXT:    vmovdqu8 (%rdi), %zmm0 {%k1} {z}95; CHECK-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm096; CHECK-NEXT:    retq97  %res = call <16 x i8> @llvm.masked.load.v16i8(ptr %addr, i32 4, <16 x i1>%mask, <16 x i8> undef)98  ret <16 x i8> %res99}100declare <16 x i8> @llvm.masked.load.v16i8(ptr, i32, <16 x i1>, <16 x i8>)101 102define <32 x i8> @test_mask_load_32xi8(<32 x i1> %mask, ptr %addr, <32 x i8> %val) {103; CHECK-LABEL: test_mask_load_32xi8:104; CHECK:       ## %bb.0:105; CHECK-NEXT:    vpsllw $7, %ymm0, %ymm0106; CHECK-NEXT:    vpmovb2m %zmm0, %k0107; CHECK-NEXT:    kmovd %k0, %k1108; CHECK-NEXT:    vmovdqu8 (%rdi), %zmm0 {%k1} {z}109; CHECK-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0110; CHECK-NEXT:    retq111  %res = call <32 x i8> @llvm.masked.load.v32i8(ptr %addr, i32 4, <32 x i1>%mask, <32 x i8> zeroinitializer)112  ret <32 x i8> %res113}114declare <32 x i8> @llvm.masked.load.v32i8(ptr, i32, <32 x i1>, <32 x i8>)115 116define <8 x i16> @test_mask_load_8xi16(<8 x i1> %mask, ptr %addr, <8 x i16> %val) {117; CHECK-LABEL: test_mask_load_8xi16:118; CHECK:       ## %bb.0:119; CHECK-NEXT:    vpsllw $15, %xmm0, %xmm0120; CHECK-NEXT:    vpmovw2m %zmm0, %k0121; CHECK-NEXT:    kshiftld $24, %k0, %k0122; CHECK-NEXT:    kshiftrd $24, %k0, %k1123; CHECK-NEXT:    vmovdqu16 (%rdi), %zmm0 {%k1} {z}124; CHECK-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0125; CHECK-NEXT:    retq126  %res = call <8 x i16> @llvm.masked.load.v8i16(ptr %addr, i32 4, <8 x i1>%mask, <8 x i16> undef)127  ret <8 x i16> %res128}129declare <8 x i16> @llvm.masked.load.v8i16(ptr, i32, <8 x i1>, <8 x i16>)130 131define <16 x i16> @test_mask_load_16xi16(<16 x i1> %mask, ptr %addr, <16 x i16> %val) {132; CHECK-LABEL: test_mask_load_16xi16:133; CHECK:       ## %bb.0:134; CHECK-NEXT:    vpsllw $7, %xmm0, %xmm0135; CHECK-NEXT:    vpmovb2m %zmm0, %k0136; CHECK-NEXT:    kmovw %k0, %k1137; CHECK-NEXT:    vmovdqu16 (%rdi), %zmm0 {%k1} {z}138; CHECK-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0139; CHECK-NEXT:    retq140  %res = call <16 x i16> @llvm.masked.load.v16i16(ptr %addr, i32 4, <16 x i1>%mask, <16 x i16> zeroinitializer)141  ret <16 x i16> %res142}143declare <16 x i16> @llvm.masked.load.v16i16(ptr, i32, <16 x i1>, <16 x i16>)144 145define void @test_mask_store_16xi8(<16 x i1> %mask, ptr %addr, <16 x i8> %val) {146; CHECK-LABEL: test_mask_store_16xi8:147; CHECK:       ## %bb.0:148; CHECK-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1149; CHECK-NEXT:    vpsllw $7, %xmm0, %xmm0150; CHECK-NEXT:    vpmovb2m %zmm0, %k0151; CHECK-NEXT:    kmovw %k0, %k1152; CHECK-NEXT:    vmovdqu8 %zmm1, (%rdi) {%k1}153; CHECK-NEXT:    retq154  call void @llvm.masked.store.v16i8(<16 x i8> %val, ptr %addr, i32 4, <16 x i1>%mask)155  ret void156}157declare void @llvm.masked.store.v16i8(<16 x i8>, ptr, i32, <16 x i1>)158 159define void @test_mask_store_32xi8(<32 x i1> %mask, ptr %addr, <32 x i8> %val) {160; CHECK-LABEL: test_mask_store_32xi8:161; CHECK:       ## %bb.0:162; CHECK-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1163; CHECK-NEXT:    vpsllw $7, %ymm0, %ymm0164; CHECK-NEXT:    vpmovb2m %zmm0, %k0165; CHECK-NEXT:    kmovd %k0, %k1166; CHECK-NEXT:    vmovdqu8 %zmm1, (%rdi) {%k1}167; CHECK-NEXT:    retq168  call void @llvm.masked.store.v32i8(<32 x i8> %val, ptr %addr, i32 4, <32 x i1>%mask)169  ret void170}171declare void @llvm.masked.store.v32i8(<32 x i8>, ptr, i32, <32 x i1>)172 173define void @test_mask_store_8xi16(<8 x i1> %mask, ptr %addr, <8 x i16> %val) {174; CHECK-LABEL: test_mask_store_8xi16:175; CHECK:       ## %bb.0:176; CHECK-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1177; CHECK-NEXT:    vpsllw $15, %xmm0, %xmm0178; CHECK-NEXT:    vpmovw2m %zmm0, %k0179; CHECK-NEXT:    kshiftld $24, %k0, %k0180; CHECK-NEXT:    kshiftrd $24, %k0, %k1181; CHECK-NEXT:    vmovdqu16 %zmm1, (%rdi) {%k1}182; CHECK-NEXT:    retq183  call void @llvm.masked.store.v8i16(<8 x i16> %val, ptr %addr, i32 4, <8 x i1>%mask)184  ret void185}186declare void @llvm.masked.store.v8i16(<8 x i16>, ptr, i32, <8 x i1>)187 188define void @test_mask_store_16xi16(<16 x i1> %mask, ptr %addr, <16 x i16> %val) {189; CHECK-LABEL: test_mask_store_16xi16:190; CHECK:       ## %bb.0:191; CHECK-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1192; CHECK-NEXT:    vpsllw $7, %xmm0, %xmm0193; CHECK-NEXT:    vpmovb2m %zmm0, %k0194; CHECK-NEXT:    kmovw %k0, %k1195; CHECK-NEXT:    vmovdqu16 %zmm1, (%rdi) {%k1}196; CHECK-NEXT:    retq197  call void @llvm.masked.store.v16i16(<16 x i16> %val, ptr %addr, i32 4, <16 x i1>%mask)198  ret void199}200declare void @llvm.masked.store.v16i16(<16 x i16>, ptr, i32, <16 x i1>)201