brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.6 KiB · ad08eaf Raw
269 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+prefer-256-bit | FileCheck %s --check-prefix=AVX2563; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,-prefer-256-bit | FileCheck %s --check-prefix=AVX512VL4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+prefer-256-bit | FileCheck %s --check-prefix=AVX512F5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,-prefer-256-bit | FileCheck %s --check-prefix=AVX512F6 7define <8 x i16> @testv8i1_sext_v8i16(ptr %p) {8; AVX256-LABEL: testv8i1_sext_v8i16:9; AVX256:       # %bb.0:10; AVX256-NEXT:    vmovdqa (%rdi), %ymm011; AVX256-NEXT:    vptestnmd %ymm0, %ymm0, %k112; AVX256-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm013; AVX256-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}14; AVX256-NEXT:    vpmovdw %ymm0, %xmm015; AVX256-NEXT:    vzeroupper16; AVX256-NEXT:    retq17;18; AVX512VL-LABEL: testv8i1_sext_v8i16:19; AVX512VL:       # %bb.0:20; AVX512VL-NEXT:    vmovdqa (%rdi), %ymm021; AVX512VL-NEXT:    vptestnmd %ymm0, %ymm0, %k122; AVX512VL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm023; AVX512VL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}24; AVX512VL-NEXT:    vpmovdw %ymm0, %xmm025; AVX512VL-NEXT:    vzeroupper26; AVX512VL-NEXT:    retq27;28; AVX512F-LABEL: testv8i1_sext_v8i16:29; AVX512F:       # %bb.0:30; AVX512F-NEXT:    vpxor %xmm0, %xmm0, %xmm031; AVX512F-NEXT:    vpcmpeqd (%rdi), %ymm0, %ymm032; AVX512F-NEXT:    vpmovdw %zmm0, %ymm033; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm034; AVX512F-NEXT:    vzeroupper35; AVX512F-NEXT:    retq36  %in = load <8 x i32>, ptr %p37  %cmp = icmp eq <8 x i32> %in, zeroinitializer38  %ext = sext <8 x i1> %cmp to <8 x i16>39  ret <8 x i16> %ext40}41 42define <16 x i8> @testv16i1_sext_v16i8(ptr %p, ptr %q) {43; AVX256-LABEL: testv16i1_sext_v16i8:44; AVX256:       # %bb.0:45; AVX256-NEXT:    vmovdqa (%rdi), %ymm046; AVX256-NEXT:    vptestnmd %ymm0, %ymm0, %k147; AVX256-NEXT:    vmovdqa (%rsi), %ymm048; AVX256-NEXT:    vptestnmd %ymm0, %ymm0, %k249; AVX256-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm050; AVX256-NEXT:    vmovdqa32 %ymm0, %ymm1 {%k2} {z}51; AVX256-NEXT:    vpmovdw %ymm1, %xmm152; AVX256-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}53; AVX256-NEXT:    vpmovdw %ymm0, %xmm054; AVX256-NEXT:    vpacksswb %xmm1, %xmm0, %xmm055; AVX256-NEXT:    vzeroupper56; AVX256-NEXT:    retq57;58; AVX512VL-LABEL: testv16i1_sext_v16i8:59; AVX512VL:       # %bb.0:60; AVX512VL-NEXT:    vmovdqa (%rdi), %ymm061; AVX512VL-NEXT:    vptestnmd %ymm0, %ymm0, %k062; AVX512VL-NEXT:    vmovdqa (%rsi), %ymm063; AVX512VL-NEXT:    vptestnmd %ymm0, %ymm0, %k164; AVX512VL-NEXT:    kunpckbw %k0, %k1, %k165; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -166; AVX512VL-NEXT:    vpmovdb %zmm0, %xmm067; AVX512VL-NEXT:    vzeroupper68; AVX512VL-NEXT:    retq69;70; AVX512F-LABEL: testv16i1_sext_v16i8:71; AVX512F:       # %bb.0:72; AVX512F-NEXT:    vmovdqa (%rdi), %ymm073; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k074; AVX512F-NEXT:    vmovdqa (%rsi), %ymm075; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k176; AVX512F-NEXT:    kunpckbw %k0, %k1, %k177; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -178; AVX512F-NEXT:    vpmovdb %zmm0, %xmm079; AVX512F-NEXT:    vzeroupper80; AVX512F-NEXT:    retq81  %in = load <8 x i32>, ptr %p82  %cmp = icmp eq <8 x i32> %in, zeroinitializer83  %in2 = load <8 x i32>, ptr %q84  %cmp2 = icmp eq <8 x i32> %in2, zeroinitializer85  %concat = shufflevector <8 x i1> %cmp, <8 x i1> %cmp2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>86  %ext = sext <16 x i1> %concat to <16 x i8>87  ret <16 x i8> %ext88}89 90define <16 x i16> @testv16i1_sext_v16i16(ptr %p, ptr %q) {91; AVX256-LABEL: testv16i1_sext_v16i16:92; AVX256:       # %bb.0:93; AVX256-NEXT:    vmovdqa (%rdi), %ymm094; AVX256-NEXT:    vptestnmd %ymm0, %ymm0, %k195; AVX256-NEXT:    vmovdqa (%rsi), %ymm096; AVX256-NEXT:    vptestnmd %ymm0, %ymm0, %k297; AVX256-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm098; AVX256-NEXT:    vmovdqa32 %ymm0, %ymm1 {%k1} {z}99; AVX256-NEXT:    vpmovdw %ymm1, %xmm1100; AVX256-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k2} {z}101; AVX256-NEXT:    vpmovdw %ymm0, %xmm0102; AVX256-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0103; AVX256-NEXT:    retq104;105; AVX512VL-LABEL: testv16i1_sext_v16i16:106; AVX512VL:       # %bb.0:107; AVX512VL-NEXT:    vmovdqa (%rdi), %ymm0108; AVX512VL-NEXT:    vptestnmd %ymm0, %ymm0, %k0109; AVX512VL-NEXT:    vmovdqa (%rsi), %ymm0110; AVX512VL-NEXT:    vptestnmd %ymm0, %ymm0, %k1111; AVX512VL-NEXT:    kunpckbw %k0, %k1, %k1112; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1113; AVX512VL-NEXT:    vpmovdw %zmm0, %ymm0114; AVX512VL-NEXT:    retq115;116; AVX512F-LABEL: testv16i1_sext_v16i16:117; AVX512F:       # %bb.0:118; AVX512F-NEXT:    vmovdqa (%rdi), %ymm0119; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0120; AVX512F-NEXT:    vmovdqa (%rsi), %ymm0121; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k1122; AVX512F-NEXT:    kunpckbw %k0, %k1, %k1123; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1124; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0125; AVX512F-NEXT:    retq126  %in = load <8 x i32>, ptr %p127  %cmp = icmp eq <8 x i32> %in, zeroinitializer128  %in2 = load <8 x i32>, ptr %q129  %cmp2 = icmp eq <8 x i32> %in2, zeroinitializer130  %concat = shufflevector <8 x i1> %cmp, <8 x i1> %cmp2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>131  %ext = sext <16 x i1> %concat to <16 x i16>132  ret <16 x i16> %ext133}134 135define <8 x i16> @testv8i1_zext_v8i16(ptr %p) {136; AVX256-LABEL: testv8i1_zext_v8i16:137; AVX256:       # %bb.0:138; AVX256-NEXT:    vmovdqa (%rdi), %ymm0139; AVX256-NEXT:    vptestnmd %ymm0, %ymm0, %k1140; AVX256-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0141; AVX256-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}142; AVX256-NEXT:    vpmovdw %ymm0, %xmm0143; AVX256-NEXT:    vpsrlw $15, %xmm0, %xmm0144; AVX256-NEXT:    vzeroupper145; AVX256-NEXT:    retq146;147; AVX512VL-LABEL: testv8i1_zext_v8i16:148; AVX512VL:       # %bb.0:149; AVX512VL-NEXT:    vmovdqa (%rdi), %ymm0150; AVX512VL-NEXT:    vptestnmd %ymm0, %ymm0, %k1151; AVX512VL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0152; AVX512VL-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}153; AVX512VL-NEXT:    vpmovdw %ymm0, %xmm0154; AVX512VL-NEXT:    vpsrlw $15, %xmm0, %xmm0155; AVX512VL-NEXT:    vzeroupper156; AVX512VL-NEXT:    retq157;158; AVX512F-LABEL: testv8i1_zext_v8i16:159; AVX512F:       # %bb.0:160; AVX512F-NEXT:    vpxor %xmm0, %xmm0, %xmm0161; AVX512F-NEXT:    vpcmpeqd (%rdi), %ymm0, %ymm0162; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0163; AVX512F-NEXT:    vpsrlw $15, %xmm0, %xmm0164; AVX512F-NEXT:    vzeroupper165; AVX512F-NEXT:    retq166  %in = load <8 x i32>, ptr %p167  %cmp = icmp eq <8 x i32> %in, zeroinitializer168  %ext = zext <8 x i1> %cmp to <8 x i16>169  ret <8 x i16> %ext170}171 172define <16 x i8> @testv16i1_zext_v16i8(ptr %p, ptr %q) {173; AVX256-LABEL: testv16i1_zext_v16i8:174; AVX256:       # %bb.0:175; AVX256-NEXT:    vmovdqa (%rdi), %ymm0176; AVX256-NEXT:    vptestnmd %ymm0, %ymm0, %k1177; AVX256-NEXT:    vmovdqa (%rsi), %ymm0178; AVX256-NEXT:    vptestnmd %ymm0, %ymm0, %k2179; AVX256-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0180; AVX256-NEXT:    vmovdqa32 %ymm0, %ymm1 {%k2} {z}181; AVX256-NEXT:    vpmovdw %ymm1, %xmm1182; AVX256-NEXT:    vpsrlw $15, %xmm1, %xmm1183; AVX256-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}184; AVX256-NEXT:    vpmovdw %ymm0, %xmm0185; AVX256-NEXT:    vpsrlw $15, %xmm0, %xmm0186; AVX256-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0187; AVX256-NEXT:    vzeroupper188; AVX256-NEXT:    retq189;190; AVX512VL-LABEL: testv16i1_zext_v16i8:191; AVX512VL:       # %bb.0:192; AVX512VL-NEXT:    vmovdqa (%rdi), %ymm0193; AVX512VL-NEXT:    vptestnmd %ymm0, %ymm0, %k0194; AVX512VL-NEXT:    vmovdqa (%rsi), %ymm0195; AVX512VL-NEXT:    vptestnmd %ymm0, %ymm0, %k1196; AVX512VL-NEXT:    kunpckbw %k0, %k1, %k1197; AVX512VL-NEXT:    vpbroadcastd {{.*#+}} zmm0 {%k1} {z} = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]198; AVX512VL-NEXT:    vpmovdb %zmm0, %xmm0199; AVX512VL-NEXT:    vzeroupper200; AVX512VL-NEXT:    retq201;202; AVX512F-LABEL: testv16i1_zext_v16i8:203; AVX512F:       # %bb.0:204; AVX512F-NEXT:    vmovdqa (%rdi), %ymm0205; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0206; AVX512F-NEXT:    vmovdqa (%rsi), %ymm0207; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k1208; AVX512F-NEXT:    kunpckbw %k0, %k1, %k1209; AVX512F-NEXT:    vpbroadcastd {{.*#+}} zmm0 {%k1} {z} = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]210; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0211; AVX512F-NEXT:    vzeroupper212; AVX512F-NEXT:    retq213  %in = load <8 x i32>, ptr %p214  %cmp = icmp eq <8 x i32> %in, zeroinitializer215  %in2 = load <8 x i32>, ptr %q216  %cmp2 = icmp eq <8 x i32> %in2, zeroinitializer217  %concat = shufflevector <8 x i1> %cmp, <8 x i1> %cmp2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>218  %ext = zext <16 x i1> %concat to <16 x i8>219  ret <16 x i8> %ext220}221 222define <16 x i16> @testv16i1_zext_v16i16(ptr %p, ptr %q) {223; AVX256-LABEL: testv16i1_zext_v16i16:224; AVX256:       # %bb.0:225; AVX256-NEXT:    vmovdqa (%rdi), %ymm0226; AVX256-NEXT:    vptestnmd %ymm0, %ymm0, %k1227; AVX256-NEXT:    vmovdqa (%rsi), %ymm0228; AVX256-NEXT:    vptestnmd %ymm0, %ymm0, %k2229; AVX256-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0230; AVX256-NEXT:    vmovdqa32 %ymm0, %ymm1 {%k1} {z}231; AVX256-NEXT:    vpmovdw %ymm1, %xmm1232; AVX256-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k2} {z}233; AVX256-NEXT:    vpmovdw %ymm0, %xmm0234; AVX256-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0235; AVX256-NEXT:    vpsrlw $15, %ymm0, %ymm0236; AVX256-NEXT:    retq237;238; AVX512VL-LABEL: testv16i1_zext_v16i16:239; AVX512VL:       # %bb.0:240; AVX512VL-NEXT:    vmovdqa (%rdi), %ymm0241; AVX512VL-NEXT:    vptestnmd %ymm0, %ymm0, %k0242; AVX512VL-NEXT:    vmovdqa (%rsi), %ymm0243; AVX512VL-NEXT:    vptestnmd %ymm0, %ymm0, %k1244; AVX512VL-NEXT:    kunpckbw %k0, %k1, %k1245; AVX512VL-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1246; AVX512VL-NEXT:    vpmovdw %zmm0, %ymm0247; AVX512VL-NEXT:    vpsrlw $15, %ymm0, %ymm0248; AVX512VL-NEXT:    retq249;250; AVX512F-LABEL: testv16i1_zext_v16i16:251; AVX512F:       # %bb.0:252; AVX512F-NEXT:    vmovdqa (%rdi), %ymm0253; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0254; AVX512F-NEXT:    vmovdqa (%rsi), %ymm0255; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k1256; AVX512F-NEXT:    kunpckbw %k0, %k1, %k1257; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1258; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0259; AVX512F-NEXT:    vpsrlw $15, %ymm0, %ymm0260; AVX512F-NEXT:    retq261  %in = load <8 x i32>, ptr %p262  %cmp = icmp eq <8 x i32> %in, zeroinitializer263  %in2 = load <8 x i32>, ptr %q264  %cmp2 = icmp eq <8 x i32> %in2, zeroinitializer265  %concat = shufflevector <8 x i1> %cmp, <8 x i1> %cmp2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>266  %ext = zext <16 x i1> %concat to <16 x i16>267  ret <16 x i16> %ext268}269