256 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl | FileCheck %s --check-prefixes=CHECK3 4; 256-bit5 6define <32 x i8> @vpaddb256_test(<32 x i8> %i, <32 x i8> %j) nounwind readnone {7; CHECK-LABEL: vpaddb256_test:8; CHECK: # %bb.0:9; CHECK-NEXT: vpaddb %ymm1, %ymm0, %ymm010; CHECK-NEXT: retq11 %x = add <32 x i8> %i, %j12 ret <32 x i8> %x13}14 15define <32 x i8> @vpaddb256_fold_test(<32 x i8> %i, ptr %j) nounwind {16; CHECK-LABEL: vpaddb256_fold_test:17; CHECK: # %bb.0:18; CHECK-NEXT: vpaddb (%rdi), %ymm0, %ymm019; CHECK-NEXT: retq20 %tmp = load <32 x i8>, ptr %j, align 421 %x = add <32 x i8> %i, %tmp22 ret <32 x i8> %x23}24 25define <16 x i16> @vpaddw256_test(<16 x i16> %i, <16 x i16> %j) nounwind readnone {26; CHECK-LABEL: vpaddw256_test:27; CHECK: # %bb.0:28; CHECK-NEXT: vpaddw %ymm1, %ymm0, %ymm029; CHECK-NEXT: retq30 %x = add <16 x i16> %i, %j31 ret <16 x i16> %x32}33 34define <16 x i16> @vpaddw256_fold_test(<16 x i16> %i, ptr %j) nounwind {35; CHECK-LABEL: vpaddw256_fold_test:36; CHECK: # %bb.0:37; CHECK-NEXT: vpaddw (%rdi), %ymm0, %ymm038; CHECK-NEXT: retq39 %tmp = load <16 x i16>, ptr %j, align 440 %x = add <16 x i16> %i, %tmp41 ret <16 x i16> %x42}43 44define <16 x i16> @vpaddw256_mask_test(<16 x i16> %i, <16 x i16> %j, <16 x i16> %mask1) nounwind readnone {45; CHECK-LABEL: vpaddw256_mask_test:46; CHECK: # %bb.0:47; CHECK-NEXT: vptestmw %ymm2, %ymm2, %k148; CHECK-NEXT: vpaddw %ymm1, %ymm0, %ymm0 {%k1}49; CHECK-NEXT: retq50 %mask = icmp ne <16 x i16> %mask1, zeroinitializer51 %x = add <16 x i16> %i, %j52 %r = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %i53 ret <16 x i16> %r54}55 56define <16 x i16> @vpaddw256_maskz_test(<16 x i16> %i, <16 x i16> %j, <16 x i16> %mask1) nounwind readnone {57; CHECK-LABEL: vpaddw256_maskz_test:58; CHECK: # %bb.0:59; CHECK-NEXT: vptestmw %ymm2, %ymm2, %k160; CHECK-NEXT: vpaddw %ymm1, %ymm0, %ymm0 {%k1} {z}61; CHECK-NEXT: retq62 %mask = icmp ne <16 x i16> %mask1, zeroinitializer63 %x = add <16 x i16> %i, %j64 %r = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> zeroinitializer65 ret <16 x i16> %r66}67 68define <16 x i16> @vpaddw256_mask_fold_test(<16 x i16> %i, ptr %j.ptr, <16 x i16> %mask1) nounwind readnone {69; CHECK-LABEL: vpaddw256_mask_fold_test:70; CHECK: # %bb.0:71; CHECK-NEXT: vptestmw %ymm1, %ymm1, %k172; CHECK-NEXT: vpaddw (%rdi), %ymm0, %ymm0 {%k1}73; CHECK-NEXT: retq74 %mask = icmp ne <16 x i16> %mask1, zeroinitializer75 %j = load <16 x i16>, ptr %j.ptr76 %x = add <16 x i16> %i, %j77 %r = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %i78 ret <16 x i16> %r79}80 81define <16 x i16> @vpaddw256_maskz_fold_test(<16 x i16> %i, ptr %j.ptr, <16 x i16> %mask1) nounwind readnone {82; CHECK-LABEL: vpaddw256_maskz_fold_test:83; CHECK: # %bb.0:84; CHECK-NEXT: vptestmw %ymm1, %ymm1, %k185; CHECK-NEXT: vpaddw (%rdi), %ymm0, %ymm0 {%k1} {z}86; CHECK-NEXT: retq87 %mask = icmp ne <16 x i16> %mask1, zeroinitializer88 %j = load <16 x i16>, ptr %j.ptr89 %x = add <16 x i16> %i, %j90 %r = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> zeroinitializer91 ret <16 x i16> %r92}93 94define <32 x i8> @vpsubb256_test(<32 x i8> %i, <32 x i8> %j) nounwind readnone {95; CHECK-LABEL: vpsubb256_test:96; CHECK: # %bb.0:97; CHECK-NEXT: vpsubb %ymm1, %ymm0, %ymm098; CHECK-NEXT: retq99 %x = sub <32 x i8> %i, %j100 ret <32 x i8> %x101}102 103define <16 x i16> @vpsubw256_test(<16 x i16> %i, <16 x i16> %j) nounwind readnone {104; CHECK-LABEL: vpsubw256_test:105; CHECK: # %bb.0:106; CHECK-NEXT: vpsubw %ymm1, %ymm0, %ymm0107; CHECK-NEXT: retq108 %x = sub <16 x i16> %i, %j109 ret <16 x i16> %x110}111 112define <16 x i16> @vpmullw256_test(<16 x i16> %i, <16 x i16> %j) {113; CHECK-LABEL: vpmullw256_test:114; CHECK: # %bb.0:115; CHECK-NEXT: vpmullw %ymm1, %ymm0, %ymm0116; CHECK-NEXT: retq117 %x = mul <16 x i16> %i, %j118 ret <16 x i16> %x119}120 121; 128-bit122 123define <16 x i8> @vpaddb128_test(<16 x i8> %i, <16 x i8> %j) nounwind readnone {124; CHECK-LABEL: vpaddb128_test:125; CHECK: # %bb.0:126; CHECK-NEXT: vpaddb %xmm1, %xmm0, %xmm0127; CHECK-NEXT: retq128 %x = add <16 x i8> %i, %j129 ret <16 x i8> %x130}131 132define <16 x i8> @vpaddb128_fold_test(<16 x i8> %i, ptr %j) nounwind {133; CHECK-LABEL: vpaddb128_fold_test:134; CHECK: # %bb.0:135; CHECK-NEXT: vpaddb (%rdi), %xmm0, %xmm0136; CHECK-NEXT: retq137 %tmp = load <16 x i8>, ptr %j, align 4138 %x = add <16 x i8> %i, %tmp139 ret <16 x i8> %x140}141 142define <8 x i16> @vpaddw128_test(<8 x i16> %i, <8 x i16> %j) nounwind readnone {143; CHECK-LABEL: vpaddw128_test:144; CHECK: # %bb.0:145; CHECK-NEXT: vpaddw %xmm1, %xmm0, %xmm0146; CHECK-NEXT: retq147 %x = add <8 x i16> %i, %j148 ret <8 x i16> %x149}150 151define <8 x i16> @vpaddw128_fold_test(<8 x i16> %i, ptr %j) nounwind {152; CHECK-LABEL: vpaddw128_fold_test:153; CHECK: # %bb.0:154; CHECK-NEXT: vpaddw (%rdi), %xmm0, %xmm0155; CHECK-NEXT: retq156 %tmp = load <8 x i16>, ptr %j, align 4157 %x = add <8 x i16> %i, %tmp158 ret <8 x i16> %x159}160 161define <8 x i16> @vpaddw128_mask_test(<8 x i16> %i, <8 x i16> %j, <8 x i16> %mask1) nounwind readnone {162; CHECK-LABEL: vpaddw128_mask_test:163; CHECK: # %bb.0:164; CHECK-NEXT: vptestmw %xmm2, %xmm2, %k1165; CHECK-NEXT: vpaddw %xmm1, %xmm0, %xmm0 {%k1}166; CHECK-NEXT: retq167 %mask = icmp ne <8 x i16> %mask1, zeroinitializer168 %x = add <8 x i16> %i, %j169 %r = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %i170 ret <8 x i16> %r171}172 173define <8 x i16> @vpaddw128_maskz_test(<8 x i16> %i, <8 x i16> %j, <8 x i16> %mask1) nounwind readnone {174; CHECK-LABEL: vpaddw128_maskz_test:175; CHECK: # %bb.0:176; CHECK-NEXT: vptestmw %xmm2, %xmm2, %k1177; CHECK-NEXT: vpaddw %xmm1, %xmm0, %xmm0 {%k1} {z}178; CHECK-NEXT: retq179 %mask = icmp ne <8 x i16> %mask1, zeroinitializer180 %x = add <8 x i16> %i, %j181 %r = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> zeroinitializer182 ret <8 x i16> %r183}184 185define <8 x i16> @vpaddw128_mask_fold_test(<8 x i16> %i, ptr %j.ptr, <8 x i16> %mask1) nounwind readnone {186; CHECK-LABEL: vpaddw128_mask_fold_test:187; CHECK: # %bb.0:188; CHECK-NEXT: vptestmw %xmm1, %xmm1, %k1189; CHECK-NEXT: vpaddw (%rdi), %xmm0, %xmm0 {%k1}190; CHECK-NEXT: retq191 %mask = icmp ne <8 x i16> %mask1, zeroinitializer192 %j = load <8 x i16>, ptr %j.ptr193 %x = add <8 x i16> %i, %j194 %r = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %i195 ret <8 x i16> %r196}197 198define <8 x i16> @vpaddw128_maskz_fold_test(<8 x i16> %i, ptr %j.ptr, <8 x i16> %mask1) nounwind readnone {199; CHECK-LABEL: vpaddw128_maskz_fold_test:200; CHECK: # %bb.0:201; CHECK-NEXT: vptestmw %xmm1, %xmm1, %k1202; CHECK-NEXT: vpaddw (%rdi), %xmm0, %xmm0 {%k1} {z}203; CHECK-NEXT: retq204 %mask = icmp ne <8 x i16> %mask1, zeroinitializer205 %j = load <8 x i16>, ptr %j.ptr206 %x = add <8 x i16> %i, %j207 %r = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> zeroinitializer208 ret <8 x i16> %r209}210 211define <16 x i8> @vpsubb128_test(<16 x i8> %i, <16 x i8> %j) nounwind readnone {212; CHECK-LABEL: vpsubb128_test:213; CHECK: # %bb.0:214; CHECK-NEXT: vpsubb %xmm1, %xmm0, %xmm0215; CHECK-NEXT: retq216 %x = sub <16 x i8> %i, %j217 ret <16 x i8> %x218}219 220define <8 x i16> @vpsubw128_test(<8 x i16> %i, <8 x i16> %j) nounwind readnone {221; CHECK-LABEL: vpsubw128_test:222; CHECK: # %bb.0:223; CHECK-NEXT: vpsubw %xmm1, %xmm0, %xmm0224; CHECK-NEXT: retq225 %x = sub <8 x i16> %i, %j226 ret <8 x i16> %x227}228 229define <8 x i16> @vpmullw128_test(<8 x i16> %i, <8 x i16> %j) {230; CHECK-LABEL: vpmullw128_test:231; CHECK: # %bb.0:232; CHECK-NEXT: vpmullw %xmm1, %xmm0, %xmm0233; CHECK-NEXT: retq234 %x = mul <8 x i16> %i, %j235 ret <8 x i16> %x236}237 238define i16 @PR90356(<16 x i1> %a) {239; CHECK-LABEL: PR90356:240; CHECK: # %bb.0:241; CHECK-NEXT: vpsllw $7, %xmm0, %xmm0242; CHECK-NEXT: vpmovb2m %xmm0, %k1243; CHECK-NEXT: vpternlogd {{.*#+}} zmm0 {%k1} {z} = -1244; CHECK-NEXT: movb $63, %al245; CHECK-NEXT: kmovd %eax, %k1246; CHECK-NEXT: vpexpandq %zmm0, %zmm0 {%k1} {z}247; CHECK-NEXT: vptestmd %zmm0, %zmm0, %k0248; CHECK-NEXT: kmovd %k0, %eax249; CHECK-NEXT: # kill: def $ax killed $ax killed $eax250; CHECK-NEXT: vzeroupper251; CHECK-NEXT: retq252 %1 = shufflevector <16 x i1> %a, <16 x i1> zeroinitializer, <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 28, i32 29, i32 30, i32 31>253 %2 = bitcast <16 x i1> %1 to i16254 ret i16 %2255}256