1364 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s --mtriple=x86_64-unknown-unknown -mattr=avx512fp16,avx512vl | FileCheck %s3 4declare half @llvm.fma.f16(half, half, half)5declare <8 x half> @llvm.fma.v8f16(<8 x half>, <8 x half>, <8 x half>)6declare <16 x half> @llvm.fma.v16f16(<16 x half>, <16 x half>, <16 x half>)7declare <32 x half> @llvm.fma.v32f16(<32 x half>, <32 x half>, <32 x half>)8 9define half @fma_123_f16(half %x, half %y, half %z) {10; CHECK-LABEL: fma_123_f16:11; CHECK: # %bb.0:12; CHECK-NEXT: vfmadd213sh %xmm2, %xmm1, %xmm013; CHECK-NEXT: retq14 %a = call half @llvm.fma.f16(half %x, half %y, half %z)15 ret half %a16}17 18define half @fma_213_f16(half %x, half %y, half %z) {19; CHECK-LABEL: fma_213_f16:20; CHECK: # %bb.0:21; CHECK-NEXT: vfmadd213sh %xmm2, %xmm1, %xmm022; CHECK-NEXT: retq23 %a = call half @llvm.fma.f16(half %y, half %x, half %z)24 ret half %a25}26 27define half @fma_231_f16(half %x, half %y, half %z) {28; CHECK-LABEL: fma_231_f16:29; CHECK: # %bb.0:30; CHECK-NEXT: vfmadd231sh %xmm1, %xmm2, %xmm031; CHECK-NEXT: retq32 %a = call half @llvm.fma.f16(half %y, half %z, half %x)33 ret half %a34}35 36define half @fma_321_f16(half %x, half %y, half %z) {37; CHECK-LABEL: fma_321_f16:38; CHECK: # %bb.0:39; CHECK-NEXT: vfmadd231sh %xmm1, %xmm2, %xmm040; CHECK-NEXT: retq41 %a = call half @llvm.fma.f16(half %z, half %y, half %x)42 ret half %a43}44 45define half @fma_132_f16(half %x, half %y, half %z) {46; CHECK-LABEL: fma_132_f16:47; CHECK: # %bb.0:48; CHECK-NEXT: vfmadd213sh %xmm1, %xmm2, %xmm049; CHECK-NEXT: retq50 %a = call half @llvm.fma.f16(half %x, half %z, half %y)51 ret half %a52}53 54define half @fma_312_f16(half %x, half %y, half %z) {55; CHECK-LABEL: fma_312_f16:56; CHECK: # %bb.0:57; CHECK-NEXT: vfmadd213sh %xmm1, %xmm2, %xmm058; CHECK-NEXT: retq59 %a = call half @llvm.fma.f16(half %z, half %x, half %y)60 ret half %a61}62 63define half @fma_load_123_f16(half %x, half %y, ptr %zp) {64; CHECK-LABEL: fma_load_123_f16:65; CHECK: # %bb.0:66; CHECK-NEXT: vfmadd213sh (%rdi), %xmm1, %xmm067; CHECK-NEXT: retq68 %z = load half, ptr %zp69 %a = call half @llvm.fma.f16(half %x, half %y, half %z)70 ret half %a71}72 73define half @fma_load_213_f16(half %x, half %y, ptr %zp) {74; CHECK-LABEL: fma_load_213_f16:75; CHECK: # %bb.0:76; CHECK-NEXT: vfmadd213sh (%rdi), %xmm1, %xmm077; CHECK-NEXT: retq78 %z = load half, ptr %zp79 %a = call half @llvm.fma.f16(half %y, half %x, half %z)80 ret half %a81}82 83define half @fma_load_231_f16(half %x, half %y, ptr %zp) {84; CHECK-LABEL: fma_load_231_f16:85; CHECK: # %bb.0:86; CHECK-NEXT: vfmadd231sh (%rdi), %xmm1, %xmm087; CHECK-NEXT: retq88 %z = load half, ptr %zp89 %a = call half @llvm.fma.f16(half %y, half %z, half %x)90 ret half %a91}92 93define half @fma_load_321_f16(half %x, half %y, ptr %zp) {94; CHECK-LABEL: fma_load_321_f16:95; CHECK: # %bb.0:96; CHECK-NEXT: vfmadd231sh (%rdi), %xmm1, %xmm097; CHECK-NEXT: retq98 %z = load half, ptr %zp99 %a = call half @llvm.fma.f16(half %z, half %y, half %x)100 ret half %a101}102 103define half @fma_load_132_f16(half %x, half %y, ptr %zp) {104; CHECK-LABEL: fma_load_132_f16:105; CHECK: # %bb.0:106; CHECK-NEXT: vfmadd132sh (%rdi), %xmm1, %xmm0107; CHECK-NEXT: retq108 %z = load half, ptr %zp109 %a = call half @llvm.fma.f16(half %x, half %z, half %y)110 ret half %a111}112 113define half @fma_load_312_f16(half %x, half %y, ptr %zp) {114; CHECK-LABEL: fma_load_312_f16:115; CHECK: # %bb.0:116; CHECK-NEXT: vfmadd132sh (%rdi), %xmm1, %xmm0117; CHECK-NEXT: retq118 %z = load half, ptr %zp119 %a = call half @llvm.fma.f16(half %z, half %x, half %y)120 ret half %a121}122 123define <8 x half> @fma_123_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z) {124; CHECK-LABEL: fma_123_v8f16:125; CHECK: # %bb.0:126; CHECK-NEXT: vfmadd213ph %xmm2, %xmm1, %xmm0127; CHECK-NEXT: retq128 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z)129 ret <8 x half> %a130}131 132define <8 x half> @fma_213_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z) {133; CHECK-LABEL: fma_213_v8f16:134; CHECK: # %bb.0:135; CHECK-NEXT: vfmadd213ph %xmm2, %xmm1, %xmm0136; CHECK-NEXT: retq137 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %y, <8 x half> %x, <8 x half> %z)138 ret <8 x half> %a139}140 141define <8 x half> @fma_231_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z) {142; CHECK-LABEL: fma_231_v8f16:143; CHECK: # %bb.0:144; CHECK-NEXT: vfmadd231ph %xmm1, %xmm2, %xmm0145; CHECK-NEXT: retq146 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %y, <8 x half> %z, <8 x half> %x)147 ret <8 x half> %a148}149 150define <8 x half> @fma_321_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z) {151; CHECK-LABEL: fma_321_v8f16:152; CHECK: # %bb.0:153; CHECK-NEXT: vfmadd231ph %xmm1, %xmm2, %xmm0154; CHECK-NEXT: retq155 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %z, <8 x half> %y, <8 x half> %x)156 ret <8 x half> %a157}158 159define <8 x half> @fma_132_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z) {160; CHECK-LABEL: fma_132_v8f16:161; CHECK: # %bb.0:162; CHECK-NEXT: vfmadd213ph %xmm1, %xmm2, %xmm0163; CHECK-NEXT: retq164 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %x, <8 x half> %z, <8 x half> %y)165 ret <8 x half> %a166}167 168define <8 x half> @fma_312_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z) {169; CHECK-LABEL: fma_312_v8f16:170; CHECK: # %bb.0:171; CHECK-NEXT: vfmadd213ph %xmm1, %xmm2, %xmm0172; CHECK-NEXT: retq173 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %z, <8 x half> %x, <8 x half> %y)174 ret <8 x half> %a175}176 177define <8 x half> @fma_load_123_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp) {178; CHECK-LABEL: fma_load_123_v8f16:179; CHECK: # %bb.0:180; CHECK-NEXT: vfmadd213ph (%rdi), %xmm1, %xmm0181; CHECK-NEXT: retq182 %z = load <8 x half>, ptr %zp183 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z)184 ret <8 x half> %a185}186 187define <8 x half> @fma_load_213_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp) {188; CHECK-LABEL: fma_load_213_v8f16:189; CHECK: # %bb.0:190; CHECK-NEXT: vfmadd213ph (%rdi), %xmm1, %xmm0191; CHECK-NEXT: retq192 %z = load <8 x half>, ptr %zp193 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %y, <8 x half> %x, <8 x half> %z)194 ret <8 x half> %a195}196 197define <8 x half> @fma_load_231_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp) {198; CHECK-LABEL: fma_load_231_v8f16:199; CHECK: # %bb.0:200; CHECK-NEXT: vfmadd231ph (%rdi), %xmm1, %xmm0201; CHECK-NEXT: retq202 %z = load <8 x half>, ptr %zp203 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %y, <8 x half> %z, <8 x half> %x)204 ret <8 x half> %a205}206 207define <8 x half> @fma_load_321_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp) {208; CHECK-LABEL: fma_load_321_v8f16:209; CHECK: # %bb.0:210; CHECK-NEXT: vfmadd231ph (%rdi), %xmm1, %xmm0211; CHECK-NEXT: retq212 %z = load <8 x half>, ptr %zp213 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %z, <8 x half> %y, <8 x half> %x)214 ret <8 x half> %a215}216 217define <8 x half> @fma_load_132_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp) {218; CHECK-LABEL: fma_load_132_v8f16:219; CHECK: # %bb.0:220; CHECK-NEXT: vfmadd132ph (%rdi), %xmm1, %xmm0221; CHECK-NEXT: retq222 %z = load <8 x half>, ptr %zp223 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %x, <8 x half> %z, <8 x half> %y)224 ret <8 x half> %a225}226 227define <8 x half> @fma_load_312_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp) {228; CHECK-LABEL: fma_load_312_v8f16:229; CHECK: # %bb.0:230; CHECK-NEXT: vfmadd132ph (%rdi), %xmm1, %xmm0231; CHECK-NEXT: retq232 %z = load <8 x half>, ptr %zp233 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %z, <8 x half> %x, <8 x half> %y)234 ret <8 x half> %a235}236 237define <8 x half> @fma_mask_123_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z, i8 %mask) {238; CHECK-LABEL: fma_mask_123_v8f16:239; CHECK: # %bb.0:240; CHECK-NEXT: kmovd %edi, %k1241; CHECK-NEXT: vfmadd132ph %xmm1, %xmm2, %xmm0 {%k1}242; CHECK-NEXT: retq243 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z)244 %b = bitcast i8 %mask to <8 x i1>245 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> %x246 ret <8 x half> %c247}248 249define <8 x half> @fma_mask_213_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z, i8 %mask) {250; CHECK-LABEL: fma_mask_213_v8f16:251; CHECK: # %bb.0:252; CHECK-NEXT: kmovd %edi, %k1253; CHECK-NEXT: vfmadd213ph %xmm2, %xmm1, %xmm0 {%k1}254; CHECK-NEXT: retq255 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %y, <8 x half> %x, <8 x half> %z)256 %b = bitcast i8 %mask to <8 x i1>257 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> %x258 ret <8 x half> %c259}260 261define <8 x half> @fma_mask_231_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z, i8 %mask) {262; CHECK-LABEL: fma_mask_231_v8f16:263; CHECK: # %bb.0:264; CHECK-NEXT: kmovd %edi, %k1265; CHECK-NEXT: vfmadd231ph %xmm2, %xmm1, %xmm0 {%k1}266; CHECK-NEXT: retq267 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %y, <8 x half> %z, <8 x half> %x)268 %b = bitcast i8 %mask to <8 x i1>269 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> %x270 ret <8 x half> %c271}272 273define <8 x half> @fma_mask_321_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z, i8 %mask) {274; CHECK-LABEL: fma_mask_321_v8f16:275; CHECK: # %bb.0:276; CHECK-NEXT: kmovd %edi, %k1277; CHECK-NEXT: vfmadd231ph %xmm1, %xmm2, %xmm0 {%k1}278; CHECK-NEXT: retq279 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %z, <8 x half> %y, <8 x half> %x)280 %b = bitcast i8 %mask to <8 x i1>281 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> %x282 ret <8 x half> %c283}284 285define <8 x half> @fma_mask_132_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z, i8 %mask) {286; CHECK-LABEL: fma_mask_132_v8f16:287; CHECK: # %bb.0:288; CHECK-NEXT: kmovd %edi, %k1289; CHECK-NEXT: vfmadd132ph %xmm2, %xmm1, %xmm0 {%k1}290; CHECK-NEXT: retq291 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %x, <8 x half> %z, <8 x half> %y)292 %b = bitcast i8 %mask to <8 x i1>293 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> %x294 ret <8 x half> %c295}296 297define <8 x half> @fma_mask_312_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z, i8 %mask) {298; CHECK-LABEL: fma_mask_312_v8f16:299; CHECK: # %bb.0:300; CHECK-NEXT: kmovd %edi, %k1301; CHECK-NEXT: vfmadd213ph %xmm1, %xmm2, %xmm0 {%k1}302; CHECK-NEXT: retq303 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %z, <8 x half> %x, <8 x half> %y)304 %b = bitcast i8 %mask to <8 x i1>305 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> %x306 ret <8 x half> %c307}308 309define <8 x half> @fma_maskz_123_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z, i8 %mask) {310; CHECK-LABEL: fma_maskz_123_v8f16:311; CHECK: # %bb.0:312; CHECK-NEXT: kmovd %edi, %k1313; CHECK-NEXT: vfmadd213ph %xmm2, %xmm1, %xmm0 {%k1} {z}314; CHECK-NEXT: retq315 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z)316 %b = bitcast i8 %mask to <8 x i1>317 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> zeroinitializer318 ret <8 x half> %c319}320 321define <8 x half> @fma_maskz_213_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z, i8 %mask) {322; CHECK-LABEL: fma_maskz_213_v8f16:323; CHECK: # %bb.0:324; CHECK-NEXT: kmovd %edi, %k1325; CHECK-NEXT: vfmadd213ph %xmm2, %xmm1, %xmm0 {%k1} {z}326; CHECK-NEXT: retq327 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %y, <8 x half> %x, <8 x half> %z)328 %b = bitcast i8 %mask to <8 x i1>329 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> zeroinitializer330 ret <8 x half> %c331}332 333define <8 x half> @fma_maskz_231_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z, i8 %mask) {334; CHECK-LABEL: fma_maskz_231_v8f16:335; CHECK: # %bb.0:336; CHECK-NEXT: kmovd %edi, %k1337; CHECK-NEXT: vfmadd231ph %xmm1, %xmm2, %xmm0 {%k1} {z}338; CHECK-NEXT: retq339 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %y, <8 x half> %z, <8 x half> %x)340 %b = bitcast i8 %mask to <8 x i1>341 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> zeroinitializer342 ret <8 x half> %c343}344 345define <8 x half> @fma_maskz_321_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z, i8 %mask) {346; CHECK-LABEL: fma_maskz_321_v8f16:347; CHECK: # %bb.0:348; CHECK-NEXT: kmovd %edi, %k1349; CHECK-NEXT: vfmadd231ph %xmm1, %xmm2, %xmm0 {%k1} {z}350; CHECK-NEXT: retq351 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %z, <8 x half> %y, <8 x half> %x)352 %b = bitcast i8 %mask to <8 x i1>353 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> zeroinitializer354 ret <8 x half> %c355}356 357define <8 x half> @fma_maskz_132_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z, i8 %mask) {358; CHECK-LABEL: fma_maskz_132_v8f16:359; CHECK: # %bb.0:360; CHECK-NEXT: kmovd %edi, %k1361; CHECK-NEXT: vfmadd213ph %xmm1, %xmm2, %xmm0 {%k1} {z}362; CHECK-NEXT: retq363 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %x, <8 x half> %z, <8 x half> %y)364 %b = bitcast i8 %mask to <8 x i1>365 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> zeroinitializer366 ret <8 x half> %c367}368 369define <8 x half> @fma_maskz_312_v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z, i8 %mask) {370; CHECK-LABEL: fma_maskz_312_v8f16:371; CHECK: # %bb.0:372; CHECK-NEXT: kmovd %edi, %k1373; CHECK-NEXT: vfmadd213ph %xmm1, %xmm2, %xmm0 {%k1} {z}374; CHECK-NEXT: retq375 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %z, <8 x half> %x, <8 x half> %y)376 %b = bitcast i8 %mask to <8 x i1>377 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> zeroinitializer378 ret <8 x half> %c379}380 381define <8 x half> @fma_mask_load_123_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp, i8 %mask) {382; CHECK-LABEL: fma_mask_load_123_v8f16:383; CHECK: # %bb.0:384; CHECK-NEXT: kmovd %esi, %k1385; CHECK-NEXT: vfmadd213ph (%rdi), %xmm1, %xmm0 {%k1}386; CHECK-NEXT: retq387 %z = load <8 x half>, ptr %zp388 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z)389 %b = bitcast i8 %mask to <8 x i1>390 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> %x391 ret <8 x half> %c392}393 394define <8 x half> @fma_mask_load_213_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp, i8 %mask) {395; CHECK-LABEL: fma_mask_load_213_v8f16:396; CHECK: # %bb.0:397; CHECK-NEXT: kmovd %esi, %k1398; CHECK-NEXT: vfmadd213ph (%rdi), %xmm1, %xmm0 {%k1}399; CHECK-NEXT: retq400 %z = load <8 x half>, ptr %zp401 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %y, <8 x half> %x, <8 x half> %z)402 %b = bitcast i8 %mask to <8 x i1>403 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> %x404 ret <8 x half> %c405}406 407define <8 x half> @fma_mask_load_231_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp, i8 %mask) {408; CHECK-LABEL: fma_mask_load_231_v8f16:409; CHECK: # %bb.0:410; CHECK-NEXT: kmovd %esi, %k1411; CHECK-NEXT: vfmadd231ph (%rdi), %xmm1, %xmm0 {%k1}412; CHECK-NEXT: retq413 %z = load <8 x half>, ptr %zp414 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %y, <8 x half> %z, <8 x half> %x)415 %b = bitcast i8 %mask to <8 x i1>416 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> %x417 ret <8 x half> %c418}419 420define <8 x half> @fma_mask_load_321_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp, i8 %mask) {421; CHECK-LABEL: fma_mask_load_321_v8f16:422; CHECK: # %bb.0:423; CHECK-NEXT: kmovd %esi, %k1424; CHECK-NEXT: vfmadd231ph (%rdi), %xmm1, %xmm0 {%k1}425; CHECK-NEXT: retq426 %z = load <8 x half>, ptr %zp427 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %z, <8 x half> %y, <8 x half> %x)428 %b = bitcast i8 %mask to <8 x i1>429 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> %x430 ret <8 x half> %c431}432 433define <8 x half> @fma_mask_load_132_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp, i8 %mask) {434; CHECK-LABEL: fma_mask_load_132_v8f16:435; CHECK: # %bb.0:436; CHECK-NEXT: kmovd %esi, %k1437; CHECK-NEXT: vfmadd132ph (%rdi), %xmm1, %xmm0 {%k1}438; CHECK-NEXT: retq439 %z = load <8 x half>, ptr %zp440 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %x, <8 x half> %z, <8 x half> %y)441 %b = bitcast i8 %mask to <8 x i1>442 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> %x443 ret <8 x half> %c444}445 446define <8 x half> @fma_mask_load_312_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp, i8 %mask) {447; CHECK-LABEL: fma_mask_load_312_v8f16:448; CHECK: # %bb.0:449; CHECK-NEXT: kmovd %esi, %k1450; CHECK-NEXT: vfmadd132ph (%rdi), %xmm1, %xmm0 {%k1}451; CHECK-NEXT: retq452 %z = load <8 x half>, ptr %zp453 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %z, <8 x half> %x, <8 x half> %y)454 %b = bitcast i8 %mask to <8 x i1>455 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> %x456 ret <8 x half> %c457}458 459define <8 x half> @fma_maskz_load_123_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp, i8 %mask) {460; CHECK-LABEL: fma_maskz_load_123_v8f16:461; CHECK: # %bb.0:462; CHECK-NEXT: kmovd %esi, %k1463; CHECK-NEXT: vfmadd213ph (%rdi), %xmm1, %xmm0 {%k1} {z}464; CHECK-NEXT: retq465 %z = load <8 x half>, ptr %zp466 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %x, <8 x half> %y, <8 x half> %z)467 %b = bitcast i8 %mask to <8 x i1>468 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> zeroinitializer469 ret <8 x half> %c470}471 472define <8 x half> @fma_maskz_load_213_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp, i8 %mask) {473; CHECK-LABEL: fma_maskz_load_213_v8f16:474; CHECK: # %bb.0:475; CHECK-NEXT: kmovd %esi, %k1476; CHECK-NEXT: vfmadd213ph (%rdi), %xmm1, %xmm0 {%k1} {z}477; CHECK-NEXT: retq478 %z = load <8 x half>, ptr %zp479 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %y, <8 x half> %x, <8 x half> %z)480 %b = bitcast i8 %mask to <8 x i1>481 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> zeroinitializer482 ret <8 x half> %c483}484 485define <8 x half> @fma_maskz_load_231_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp, i8 %mask) {486; CHECK-LABEL: fma_maskz_load_231_v8f16:487; CHECK: # %bb.0:488; CHECK-NEXT: kmovd %esi, %k1489; CHECK-NEXT: vfmadd231ph (%rdi), %xmm1, %xmm0 {%k1} {z}490; CHECK-NEXT: retq491 %z = load <8 x half>, ptr %zp492 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %y, <8 x half> %z, <8 x half> %x)493 %b = bitcast i8 %mask to <8 x i1>494 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> zeroinitializer495 ret <8 x half> %c496}497 498define <8 x half> @fma_maskz_load_321_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp, i8 %mask) {499; CHECK-LABEL: fma_maskz_load_321_v8f16:500; CHECK: # %bb.0:501; CHECK-NEXT: kmovd %esi, %k1502; CHECK-NEXT: vfmadd231ph (%rdi), %xmm1, %xmm0 {%k1} {z}503; CHECK-NEXT: retq504 %z = load <8 x half>, ptr %zp505 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %z, <8 x half> %y, <8 x half> %x)506 %b = bitcast i8 %mask to <8 x i1>507 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> zeroinitializer508 ret <8 x half> %c509}510 511define <8 x half> @fma_maskz_load_132_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp, i8 %mask) {512; CHECK-LABEL: fma_maskz_load_132_v8f16:513; CHECK: # %bb.0:514; CHECK-NEXT: kmovd %esi, %k1515; CHECK-NEXT: vfmadd132ph (%rdi), %xmm1, %xmm0 {%k1} {z}516; CHECK-NEXT: retq517 %z = load <8 x half>, ptr %zp518 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %x, <8 x half> %z, <8 x half> %y)519 %b = bitcast i8 %mask to <8 x i1>520 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> zeroinitializer521 ret <8 x half> %c522}523 524define <8 x half> @fma_maskz_load_312_v8f16(<8 x half> %x, <8 x half> %y, ptr %zp, i8 %mask) {525; CHECK-LABEL: fma_maskz_load_312_v8f16:526; CHECK: # %bb.0:527; CHECK-NEXT: kmovd %esi, %k1528; CHECK-NEXT: vfmadd132ph (%rdi), %xmm1, %xmm0 {%k1} {z}529; CHECK-NEXT: retq530 %z = load <8 x half>, ptr %zp531 %a = call <8 x half> @llvm.fma.v8f16(<8 x half> %z, <8 x half> %x, <8 x half> %y)532 %b = bitcast i8 %mask to <8 x i1>533 %c = select <8 x i1> %b, <8 x half> %a, <8 x half> zeroinitializer534 ret <8 x half> %c535}536 537define <16 x half> @fma_123_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z) {538; CHECK-LABEL: fma_123_v16f16:539; CHECK: # %bb.0:540; CHECK-NEXT: vfmadd213ph %ymm2, %ymm1, %ymm0541; CHECK-NEXT: retq542 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z)543 ret <16 x half> %a544}545 546define <16 x half> @fma_213_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z) {547; CHECK-LABEL: fma_213_v16f16:548; CHECK: # %bb.0:549; CHECK-NEXT: vfmadd213ph %ymm2, %ymm1, %ymm0550; CHECK-NEXT: retq551 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %y, <16 x half> %x, <16 x half> %z)552 ret <16 x half> %a553}554 555define <16 x half> @fma_231_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z) {556; CHECK-LABEL: fma_231_v16f16:557; CHECK: # %bb.0:558; CHECK-NEXT: vfmadd231ph %ymm1, %ymm2, %ymm0559; CHECK-NEXT: retq560 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %y, <16 x half> %z, <16 x half> %x)561 ret <16 x half> %a562}563 564define <16 x half> @fma_321_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z) {565; CHECK-LABEL: fma_321_v16f16:566; CHECK: # %bb.0:567; CHECK-NEXT: vfmadd231ph %ymm1, %ymm2, %ymm0568; CHECK-NEXT: retq569 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %z, <16 x half> %y, <16 x half> %x)570 ret <16 x half> %a571}572 573define <16 x half> @fma_132_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z) {574; CHECK-LABEL: fma_132_v16f16:575; CHECK: # %bb.0:576; CHECK-NEXT: vfmadd213ph %ymm1, %ymm2, %ymm0577; CHECK-NEXT: retq578 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %x, <16 x half> %z, <16 x half> %y)579 ret <16 x half> %a580}581 582define <16 x half> @fma_312_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z) {583; CHECK-LABEL: fma_312_v16f16:584; CHECK: # %bb.0:585; CHECK-NEXT: vfmadd213ph %ymm1, %ymm2, %ymm0586; CHECK-NEXT: retq587 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %z, <16 x half> %x, <16 x half> %y)588 ret <16 x half> %a589}590 591define <16 x half> @fma_load_123_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp) {592; CHECK-LABEL: fma_load_123_v16f16:593; CHECK: # %bb.0:594; CHECK-NEXT: vfmadd213ph (%rdi), %ymm1, %ymm0595; CHECK-NEXT: retq596 %z = load <16 x half>, ptr %zp597 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z)598 ret <16 x half> %a599}600 601define <16 x half> @fma_load_213_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp) {602; CHECK-LABEL: fma_load_213_v16f16:603; CHECK: # %bb.0:604; CHECK-NEXT: vfmadd213ph (%rdi), %ymm1, %ymm0605; CHECK-NEXT: retq606 %z = load <16 x half>, ptr %zp607 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %y, <16 x half> %x, <16 x half> %z)608 ret <16 x half> %a609}610 611define <16 x half> @fma_load_231_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp) {612; CHECK-LABEL: fma_load_231_v16f16:613; CHECK: # %bb.0:614; CHECK-NEXT: vfmadd231ph (%rdi), %ymm1, %ymm0615; CHECK-NEXT: retq616 %z = load <16 x half>, ptr %zp617 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %y, <16 x half> %z, <16 x half> %x)618 ret <16 x half> %a619}620 621define <16 x half> @fma_load_321_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp) {622; CHECK-LABEL: fma_load_321_v16f16:623; CHECK: # %bb.0:624; CHECK-NEXT: vfmadd231ph (%rdi), %ymm1, %ymm0625; CHECK-NEXT: retq626 %z = load <16 x half>, ptr %zp627 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %z, <16 x half> %y, <16 x half> %x)628 ret <16 x half> %a629}630 631define <16 x half> @fma_load_132_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp) {632; CHECK-LABEL: fma_load_132_v16f16:633; CHECK: # %bb.0:634; CHECK-NEXT: vfmadd132ph (%rdi), %ymm1, %ymm0635; CHECK-NEXT: retq636 %z = load <16 x half>, ptr %zp637 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %x, <16 x half> %z, <16 x half> %y)638 ret <16 x half> %a639}640 641define <16 x half> @fma_load_312_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp) {642; CHECK-LABEL: fma_load_312_v16f16:643; CHECK: # %bb.0:644; CHECK-NEXT: vfmadd132ph (%rdi), %ymm1, %ymm0645; CHECK-NEXT: retq646 %z = load <16 x half>, ptr %zp647 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %z, <16 x half> %x, <16 x half> %y)648 ret <16 x half> %a649}650 651define <16 x half> @fma_mask_123_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z, i16 %mask) {652; CHECK-LABEL: fma_mask_123_v16f16:653; CHECK: # %bb.0:654; CHECK-NEXT: kmovd %edi, %k1655; CHECK-NEXT: vfmadd132ph %ymm1, %ymm2, %ymm0 {%k1}656; CHECK-NEXT: retq657 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z)658 %b = bitcast i16 %mask to <16 x i1>659 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> %x660 ret <16 x half> %c661}662 663define <16 x half> @fma_mask_213_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z, i16 %mask) {664; CHECK-LABEL: fma_mask_213_v16f16:665; CHECK: # %bb.0:666; CHECK-NEXT: kmovd %edi, %k1667; CHECK-NEXT: vfmadd213ph %ymm2, %ymm1, %ymm0 {%k1}668; CHECK-NEXT: retq669 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %y, <16 x half> %x, <16 x half> %z)670 %b = bitcast i16 %mask to <16 x i1>671 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> %x672 ret <16 x half> %c673}674 675define <16 x half> @fma_mask_231_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z, i16 %mask) {676; CHECK-LABEL: fma_mask_231_v16f16:677; CHECK: # %bb.0:678; CHECK-NEXT: kmovd %edi, %k1679; CHECK-NEXT: vfmadd231ph %ymm2, %ymm1, %ymm0 {%k1}680; CHECK-NEXT: retq681 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %y, <16 x half> %z, <16 x half> %x)682 %b = bitcast i16 %mask to <16 x i1>683 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> %x684 ret <16 x half> %c685}686 687define <16 x half> @fma_mask_321_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z, i16 %mask) {688; CHECK-LABEL: fma_mask_321_v16f16:689; CHECK: # %bb.0:690; CHECK-NEXT: kmovd %edi, %k1691; CHECK-NEXT: vfmadd231ph %ymm1, %ymm2, %ymm0 {%k1}692; CHECK-NEXT: retq693 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %z, <16 x half> %y, <16 x half> %x)694 %b = bitcast i16 %mask to <16 x i1>695 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> %x696 ret <16 x half> %c697}698 699define <16 x half> @fma_mask_132_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z, i16 %mask) {700; CHECK-LABEL: fma_mask_132_v16f16:701; CHECK: # %bb.0:702; CHECK-NEXT: kmovd %edi, %k1703; CHECK-NEXT: vfmadd132ph %ymm2, %ymm1, %ymm0 {%k1}704; CHECK-NEXT: retq705 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %x, <16 x half> %z, <16 x half> %y)706 %b = bitcast i16 %mask to <16 x i1>707 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> %x708 ret <16 x half> %c709}710 711define <16 x half> @fma_mask_312_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z, i16 %mask) {712; CHECK-LABEL: fma_mask_312_v16f16:713; CHECK: # %bb.0:714; CHECK-NEXT: kmovd %edi, %k1715; CHECK-NEXT: vfmadd213ph %ymm1, %ymm2, %ymm0 {%k1}716; CHECK-NEXT: retq717 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %z, <16 x half> %x, <16 x half> %y)718 %b = bitcast i16 %mask to <16 x i1>719 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> %x720 ret <16 x half> %c721}722 723define <16 x half> @fma_maskz_123_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z, i16 %mask) {724; CHECK-LABEL: fma_maskz_123_v16f16:725; CHECK: # %bb.0:726; CHECK-NEXT: kmovd %edi, %k1727; CHECK-NEXT: vfmadd213ph %ymm2, %ymm1, %ymm0 {%k1} {z}728; CHECK-NEXT: retq729 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z)730 %b = bitcast i16 %mask to <16 x i1>731 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> zeroinitializer732 ret <16 x half> %c733}734 735define <16 x half> @fma_maskz_213_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z, i16 %mask) {736; CHECK-LABEL: fma_maskz_213_v16f16:737; CHECK: # %bb.0:738; CHECK-NEXT: kmovd %edi, %k1739; CHECK-NEXT: vfmadd213ph %ymm2, %ymm1, %ymm0 {%k1} {z}740; CHECK-NEXT: retq741 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %y, <16 x half> %x, <16 x half> %z)742 %b = bitcast i16 %mask to <16 x i1>743 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> zeroinitializer744 ret <16 x half> %c745}746 747define <16 x half> @fma_maskz_231_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z, i16 %mask) {748; CHECK-LABEL: fma_maskz_231_v16f16:749; CHECK: # %bb.0:750; CHECK-NEXT: kmovd %edi, %k1751; CHECK-NEXT: vfmadd231ph %ymm1, %ymm2, %ymm0 {%k1} {z}752; CHECK-NEXT: retq753 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %y, <16 x half> %z, <16 x half> %x)754 %b = bitcast i16 %mask to <16 x i1>755 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> zeroinitializer756 ret <16 x half> %c757}758 759define <16 x half> @fma_maskz_321_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z, i16 %mask) {760; CHECK-LABEL: fma_maskz_321_v16f16:761; CHECK: # %bb.0:762; CHECK-NEXT: kmovd %edi, %k1763; CHECK-NEXT: vfmadd231ph %ymm1, %ymm2, %ymm0 {%k1} {z}764; CHECK-NEXT: retq765 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %z, <16 x half> %y, <16 x half> %x)766 %b = bitcast i16 %mask to <16 x i1>767 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> zeroinitializer768 ret <16 x half> %c769}770 771define <16 x half> @fma_maskz_132_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z, i16 %mask) {772; CHECK-LABEL: fma_maskz_132_v16f16:773; CHECK: # %bb.0:774; CHECK-NEXT: kmovd %edi, %k1775; CHECK-NEXT: vfmadd213ph %ymm1, %ymm2, %ymm0 {%k1} {z}776; CHECK-NEXT: retq777 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %x, <16 x half> %z, <16 x half> %y)778 %b = bitcast i16 %mask to <16 x i1>779 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> zeroinitializer780 ret <16 x half> %c781}782 783define <16 x half> @fma_maskz_312_v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z, i16 %mask) {784; CHECK-LABEL: fma_maskz_312_v16f16:785; CHECK: # %bb.0:786; CHECK-NEXT: kmovd %edi, %k1787; CHECK-NEXT: vfmadd213ph %ymm1, %ymm2, %ymm0 {%k1} {z}788; CHECK-NEXT: retq789 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %z, <16 x half> %x, <16 x half> %y)790 %b = bitcast i16 %mask to <16 x i1>791 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> zeroinitializer792 ret <16 x half> %c793}794 795define <16 x half> @fma_mask_load_123_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp, i16 %mask) {796; CHECK-LABEL: fma_mask_load_123_v16f16:797; CHECK: # %bb.0:798; CHECK-NEXT: kmovd %esi, %k1799; CHECK-NEXT: vfmadd213ph (%rdi), %ymm1, %ymm0 {%k1}800; CHECK-NEXT: retq801 %z = load <16 x half>, ptr %zp802 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z)803 %b = bitcast i16 %mask to <16 x i1>804 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> %x805 ret <16 x half> %c806}807 808define <16 x half> @fma_mask_load_213_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp, i16 %mask) {809; CHECK-LABEL: fma_mask_load_213_v16f16:810; CHECK: # %bb.0:811; CHECK-NEXT: kmovd %esi, %k1812; CHECK-NEXT: vfmadd213ph (%rdi), %ymm1, %ymm0 {%k1}813; CHECK-NEXT: retq814 %z = load <16 x half>, ptr %zp815 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %y, <16 x half> %x, <16 x half> %z)816 %b = bitcast i16 %mask to <16 x i1>817 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> %x818 ret <16 x half> %c819}820 821define <16 x half> @fma_mask_load_231_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp, i16 %mask) {822; CHECK-LABEL: fma_mask_load_231_v16f16:823; CHECK: # %bb.0:824; CHECK-NEXT: kmovd %esi, %k1825; CHECK-NEXT: vfmadd231ph (%rdi), %ymm1, %ymm0 {%k1}826; CHECK-NEXT: retq827 %z = load <16 x half>, ptr %zp828 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %y, <16 x half> %z, <16 x half> %x)829 %b = bitcast i16 %mask to <16 x i1>830 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> %x831 ret <16 x half> %c832}833 834define <16 x half> @fma_mask_load_321_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp, i16 %mask) {835; CHECK-LABEL: fma_mask_load_321_v16f16:836; CHECK: # %bb.0:837; CHECK-NEXT: kmovd %esi, %k1838; CHECK-NEXT: vfmadd231ph (%rdi), %ymm1, %ymm0 {%k1}839; CHECK-NEXT: retq840 %z = load <16 x half>, ptr %zp841 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %z, <16 x half> %y, <16 x half> %x)842 %b = bitcast i16 %mask to <16 x i1>843 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> %x844 ret <16 x half> %c845}846 847define <16 x half> @fma_mask_load_132_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp, i16 %mask) {848; CHECK-LABEL: fma_mask_load_132_v16f16:849; CHECK: # %bb.0:850; CHECK-NEXT: kmovd %esi, %k1851; CHECK-NEXT: vfmadd132ph (%rdi), %ymm1, %ymm0 {%k1}852; CHECK-NEXT: retq853 %z = load <16 x half>, ptr %zp854 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %x, <16 x half> %z, <16 x half> %y)855 %b = bitcast i16 %mask to <16 x i1>856 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> %x857 ret <16 x half> %c858}859 860define <16 x half> @fma_mask_load_312_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp, i16 %mask) {861; CHECK-LABEL: fma_mask_load_312_v16f16:862; CHECK: # %bb.0:863; CHECK-NEXT: kmovd %esi, %k1864; CHECK-NEXT: vfmadd132ph (%rdi), %ymm1, %ymm0 {%k1}865; CHECK-NEXT: retq866 %z = load <16 x half>, ptr %zp867 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %z, <16 x half> %x, <16 x half> %y)868 %b = bitcast i16 %mask to <16 x i1>869 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> %x870 ret <16 x half> %c871}872 873define <16 x half> @fma_maskz_load_123_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp, i16 %mask) {874; CHECK-LABEL: fma_maskz_load_123_v16f16:875; CHECK: # %bb.0:876; CHECK-NEXT: kmovd %esi, %k1877; CHECK-NEXT: vfmadd213ph (%rdi), %ymm1, %ymm0 {%k1} {z}878; CHECK-NEXT: retq879 %z = load <16 x half>, ptr %zp880 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %x, <16 x half> %y, <16 x half> %z)881 %b = bitcast i16 %mask to <16 x i1>882 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> zeroinitializer883 ret <16 x half> %c884}885 886define <16 x half> @fma_maskz_load_213_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp, i16 %mask) {887; CHECK-LABEL: fma_maskz_load_213_v16f16:888; CHECK: # %bb.0:889; CHECK-NEXT: kmovd %esi, %k1890; CHECK-NEXT: vfmadd213ph (%rdi), %ymm1, %ymm0 {%k1} {z}891; CHECK-NEXT: retq892 %z = load <16 x half>, ptr %zp893 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %y, <16 x half> %x, <16 x half> %z)894 %b = bitcast i16 %mask to <16 x i1>895 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> zeroinitializer896 ret <16 x half> %c897}898 899define <16 x half> @fma_maskz_load_231_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp, i16 %mask) {900; CHECK-LABEL: fma_maskz_load_231_v16f16:901; CHECK: # %bb.0:902; CHECK-NEXT: kmovd %esi, %k1903; CHECK-NEXT: vfmadd231ph (%rdi), %ymm1, %ymm0 {%k1} {z}904; CHECK-NEXT: retq905 %z = load <16 x half>, ptr %zp906 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %y, <16 x half> %z, <16 x half> %x)907 %b = bitcast i16 %mask to <16 x i1>908 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> zeroinitializer909 ret <16 x half> %c910}911 912define <16 x half> @fma_maskz_load_321_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp, i16 %mask) {913; CHECK-LABEL: fma_maskz_load_321_v16f16:914; CHECK: # %bb.0:915; CHECK-NEXT: kmovd %esi, %k1916; CHECK-NEXT: vfmadd231ph (%rdi), %ymm1, %ymm0 {%k1} {z}917; CHECK-NEXT: retq918 %z = load <16 x half>, ptr %zp919 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %z, <16 x half> %y, <16 x half> %x)920 %b = bitcast i16 %mask to <16 x i1>921 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> zeroinitializer922 ret <16 x half> %c923}924 925define <16 x half> @fma_maskz_load_132_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp, i16 %mask) {926; CHECK-LABEL: fma_maskz_load_132_v16f16:927; CHECK: # %bb.0:928; CHECK-NEXT: kmovd %esi, %k1929; CHECK-NEXT: vfmadd132ph (%rdi), %ymm1, %ymm0 {%k1} {z}930; CHECK-NEXT: retq931 %z = load <16 x half>, ptr %zp932 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %x, <16 x half> %z, <16 x half> %y)933 %b = bitcast i16 %mask to <16 x i1>934 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> zeroinitializer935 ret <16 x half> %c936}937 938define <16 x half> @fma_maskz_load_312_v16f16(<16 x half> %x, <16 x half> %y, ptr %zp, i16 %mask) {939; CHECK-LABEL: fma_maskz_load_312_v16f16:940; CHECK: # %bb.0:941; CHECK-NEXT: kmovd %esi, %k1942; CHECK-NEXT: vfmadd132ph (%rdi), %ymm1, %ymm0 {%k1} {z}943; CHECK-NEXT: retq944 %z = load <16 x half>, ptr %zp945 %a = call <16 x half> @llvm.fma.v16f16(<16 x half> %z, <16 x half> %x, <16 x half> %y)946 %b = bitcast i16 %mask to <16 x i1>947 %c = select <16 x i1> %b, <16 x half> %a, <16 x half> zeroinitializer948 ret <16 x half> %c949}950 951define <32 x half> @fma_123_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z) {952; CHECK-LABEL: fma_123_v32f16:953; CHECK: # %bb.0:954; CHECK-NEXT: vfmadd213ph %zmm2, %zmm1, %zmm0955; CHECK-NEXT: retq956 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z)957 ret <32 x half> %a958}959 960define <32 x half> @fma_213_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z) {961; CHECK-LABEL: fma_213_v32f16:962; CHECK: # %bb.0:963; CHECK-NEXT: vfmadd213ph %zmm2, %zmm1, %zmm0964; CHECK-NEXT: retq965 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %y, <32 x half> %x, <32 x half> %z)966 ret <32 x half> %a967}968 969define <32 x half> @fma_231_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z) {970; CHECK-LABEL: fma_231_v32f16:971; CHECK: # %bb.0:972; CHECK-NEXT: vfmadd231ph %zmm1, %zmm2, %zmm0973; CHECK-NEXT: retq974 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %y, <32 x half> %z, <32 x half> %x)975 ret <32 x half> %a976}977 978define <32 x half> @fma_321_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z) {979; CHECK-LABEL: fma_321_v32f16:980; CHECK: # %bb.0:981; CHECK-NEXT: vfmadd231ph %zmm1, %zmm2, %zmm0982; CHECK-NEXT: retq983 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %z, <32 x half> %y, <32 x half> %x)984 ret <32 x half> %a985}986 987define <32 x half> @fma_132_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z) {988; CHECK-LABEL: fma_132_v32f16:989; CHECK: # %bb.0:990; CHECK-NEXT: vfmadd213ph %zmm1, %zmm2, %zmm0991; CHECK-NEXT: retq992 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %x, <32 x half> %z, <32 x half> %y)993 ret <32 x half> %a994}995 996define <32 x half> @fma_312_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z) {997; CHECK-LABEL: fma_312_v32f16:998; CHECK: # %bb.0:999; CHECK-NEXT: vfmadd213ph %zmm1, %zmm2, %zmm01000; CHECK-NEXT: retq1001 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %z, <32 x half> %x, <32 x half> %y)1002 ret <32 x half> %a1003}1004 1005define <32 x half> @fma_load_123_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp) {1006; CHECK-LABEL: fma_load_123_v32f16:1007; CHECK: # %bb.0:1008; CHECK-NEXT: vfmadd213ph (%rdi), %zmm1, %zmm01009; CHECK-NEXT: retq1010 %z = load <32 x half>, ptr %zp1011 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z)1012 ret <32 x half> %a1013}1014 1015define <32 x half> @fma_load_213_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp) {1016; CHECK-LABEL: fma_load_213_v32f16:1017; CHECK: # %bb.0:1018; CHECK-NEXT: vfmadd213ph (%rdi), %zmm1, %zmm01019; CHECK-NEXT: retq1020 %z = load <32 x half>, ptr %zp1021 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %y, <32 x half> %x, <32 x half> %z)1022 ret <32 x half> %a1023}1024 1025define <32 x half> @fma_load_231_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp) {1026; CHECK-LABEL: fma_load_231_v32f16:1027; CHECK: # %bb.0:1028; CHECK-NEXT: vfmadd231ph (%rdi), %zmm1, %zmm01029; CHECK-NEXT: retq1030 %z = load <32 x half>, ptr %zp1031 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %y, <32 x half> %z, <32 x half> %x)1032 ret <32 x half> %a1033}1034 1035define <32 x half> @fma_load_321_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp) {1036; CHECK-LABEL: fma_load_321_v32f16:1037; CHECK: # %bb.0:1038; CHECK-NEXT: vfmadd231ph (%rdi), %zmm1, %zmm01039; CHECK-NEXT: retq1040 %z = load <32 x half>, ptr %zp1041 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %z, <32 x half> %y, <32 x half> %x)1042 ret <32 x half> %a1043}1044 1045define <32 x half> @fma_load_132_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp) {1046; CHECK-LABEL: fma_load_132_v32f16:1047; CHECK: # %bb.0:1048; CHECK-NEXT: vfmadd132ph (%rdi), %zmm1, %zmm01049; CHECK-NEXT: retq1050 %z = load <32 x half>, ptr %zp1051 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %x, <32 x half> %z, <32 x half> %y)1052 ret <32 x half> %a1053}1054 1055define <32 x half> @fma_load_312_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp) {1056; CHECK-LABEL: fma_load_312_v32f16:1057; CHECK: # %bb.0:1058; CHECK-NEXT: vfmadd132ph (%rdi), %zmm1, %zmm01059; CHECK-NEXT: retq1060 %z = load <32 x half>, ptr %zp1061 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %z, <32 x half> %x, <32 x half> %y)1062 ret <32 x half> %a1063}1064 1065define <32 x half> @fma_mask_123_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z, i32 %mask) {1066; CHECK-LABEL: fma_mask_123_v32f16:1067; CHECK: # %bb.0:1068; CHECK-NEXT: kmovd %edi, %k11069; CHECK-NEXT: vfmadd132ph %zmm1, %zmm2, %zmm0 {%k1}1070; CHECK-NEXT: retq1071 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z)1072 %b = bitcast i32 %mask to <32 x i1>1073 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> %x1074 ret <32 x half> %c1075}1076 1077define <32 x half> @fma_mask_213_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z, i32 %mask) {1078; CHECK-LABEL: fma_mask_213_v32f16:1079; CHECK: # %bb.0:1080; CHECK-NEXT: kmovd %edi, %k11081; CHECK-NEXT: vfmadd213ph %zmm2, %zmm1, %zmm0 {%k1}1082; CHECK-NEXT: retq1083 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %y, <32 x half> %x, <32 x half> %z)1084 %b = bitcast i32 %mask to <32 x i1>1085 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> %x1086 ret <32 x half> %c1087}1088 1089define <32 x half> @fma_mask_231_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z, i32 %mask) {1090; CHECK-LABEL: fma_mask_231_v32f16:1091; CHECK: # %bb.0:1092; CHECK-NEXT: kmovd %edi, %k11093; CHECK-NEXT: vfmadd231ph %zmm2, %zmm1, %zmm0 {%k1}1094; CHECK-NEXT: retq1095 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %y, <32 x half> %z, <32 x half> %x)1096 %b = bitcast i32 %mask to <32 x i1>1097 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> %x1098 ret <32 x half> %c1099}1100 1101define <32 x half> @fma_mask_321_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z, i32 %mask) {1102; CHECK-LABEL: fma_mask_321_v32f16:1103; CHECK: # %bb.0:1104; CHECK-NEXT: kmovd %edi, %k11105; CHECK-NEXT: vfmadd231ph %zmm1, %zmm2, %zmm0 {%k1}1106; CHECK-NEXT: retq1107 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %z, <32 x half> %y, <32 x half> %x)1108 %b = bitcast i32 %mask to <32 x i1>1109 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> %x1110 ret <32 x half> %c1111}1112 1113define <32 x half> @fma_mask_132_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z, i32 %mask) {1114; CHECK-LABEL: fma_mask_132_v32f16:1115; CHECK: # %bb.0:1116; CHECK-NEXT: kmovd %edi, %k11117; CHECK-NEXT: vfmadd132ph %zmm2, %zmm1, %zmm0 {%k1}1118; CHECK-NEXT: retq1119 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %x, <32 x half> %z, <32 x half> %y)1120 %b = bitcast i32 %mask to <32 x i1>1121 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> %x1122 ret <32 x half> %c1123}1124 1125define <32 x half> @fma_mask_312_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z, i32 %mask) {1126; CHECK-LABEL: fma_mask_312_v32f16:1127; CHECK: # %bb.0:1128; CHECK-NEXT: kmovd %edi, %k11129; CHECK-NEXT: vfmadd213ph %zmm1, %zmm2, %zmm0 {%k1}1130; CHECK-NEXT: retq1131 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %z, <32 x half> %x, <32 x half> %y)1132 %b = bitcast i32 %mask to <32 x i1>1133 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> %x1134 ret <32 x half> %c1135}1136 1137define <32 x half> @fma_maskz_123_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z, i32 %mask) {1138; CHECK-LABEL: fma_maskz_123_v32f16:1139; CHECK: # %bb.0:1140; CHECK-NEXT: kmovd %edi, %k11141; CHECK-NEXT: vfmadd213ph %zmm2, %zmm1, %zmm0 {%k1} {z}1142; CHECK-NEXT: retq1143 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z)1144 %b = bitcast i32 %mask to <32 x i1>1145 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> zeroinitializer1146 ret <32 x half> %c1147}1148 1149define <32 x half> @fma_maskz_213_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z, i32 %mask) {1150; CHECK-LABEL: fma_maskz_213_v32f16:1151; CHECK: # %bb.0:1152; CHECK-NEXT: kmovd %edi, %k11153; CHECK-NEXT: vfmadd213ph %zmm2, %zmm1, %zmm0 {%k1} {z}1154; CHECK-NEXT: retq1155 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %y, <32 x half> %x, <32 x half> %z)1156 %b = bitcast i32 %mask to <32 x i1>1157 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> zeroinitializer1158 ret <32 x half> %c1159}1160 1161define <32 x half> @fma_maskz_231_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z, i32 %mask) {1162; CHECK-LABEL: fma_maskz_231_v32f16:1163; CHECK: # %bb.0:1164; CHECK-NEXT: kmovd %edi, %k11165; CHECK-NEXT: vfmadd231ph %zmm1, %zmm2, %zmm0 {%k1} {z}1166; CHECK-NEXT: retq1167 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %y, <32 x half> %z, <32 x half> %x)1168 %b = bitcast i32 %mask to <32 x i1>1169 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> zeroinitializer1170 ret <32 x half> %c1171}1172 1173define <32 x half> @fma_maskz_321_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z, i32 %mask) {1174; CHECK-LABEL: fma_maskz_321_v32f16:1175; CHECK: # %bb.0:1176; CHECK-NEXT: kmovd %edi, %k11177; CHECK-NEXT: vfmadd231ph %zmm1, %zmm2, %zmm0 {%k1} {z}1178; CHECK-NEXT: retq1179 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %z, <32 x half> %y, <32 x half> %x)1180 %b = bitcast i32 %mask to <32 x i1>1181 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> zeroinitializer1182 ret <32 x half> %c1183}1184 1185define <32 x half> @fma_maskz_132_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z, i32 %mask) {1186; CHECK-LABEL: fma_maskz_132_v32f16:1187; CHECK: # %bb.0:1188; CHECK-NEXT: kmovd %edi, %k11189; CHECK-NEXT: vfmadd213ph %zmm1, %zmm2, %zmm0 {%k1} {z}1190; CHECK-NEXT: retq1191 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %x, <32 x half> %z, <32 x half> %y)1192 %b = bitcast i32 %mask to <32 x i1>1193 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> zeroinitializer1194 ret <32 x half> %c1195}1196 1197define <32 x half> @fma_maskz_312_v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z, i32 %mask) {1198; CHECK-LABEL: fma_maskz_312_v32f16:1199; CHECK: # %bb.0:1200; CHECK-NEXT: kmovd %edi, %k11201; CHECK-NEXT: vfmadd213ph %zmm1, %zmm2, %zmm0 {%k1} {z}1202; CHECK-NEXT: retq1203 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %z, <32 x half> %x, <32 x half> %y)1204 %b = bitcast i32 %mask to <32 x i1>1205 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> zeroinitializer1206 ret <32 x half> %c1207}1208 1209define <32 x half> @fma_mask_load_123_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp, i32 %mask) {1210; CHECK-LABEL: fma_mask_load_123_v32f16:1211; CHECK: # %bb.0:1212; CHECK-NEXT: kmovd %esi, %k11213; CHECK-NEXT: vfmadd213ph (%rdi), %zmm1, %zmm0 {%k1}1214; CHECK-NEXT: retq1215 %z = load <32 x half>, ptr %zp1216 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z)1217 %b = bitcast i32 %mask to <32 x i1>1218 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> %x1219 ret <32 x half> %c1220}1221 1222define <32 x half> @fma_mask_load_213_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp, i32 %mask) {1223; CHECK-LABEL: fma_mask_load_213_v32f16:1224; CHECK: # %bb.0:1225; CHECK-NEXT: kmovd %esi, %k11226; CHECK-NEXT: vfmadd213ph (%rdi), %zmm1, %zmm0 {%k1}1227; CHECK-NEXT: retq1228 %z = load <32 x half>, ptr %zp1229 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %y, <32 x half> %x, <32 x half> %z)1230 %b = bitcast i32 %mask to <32 x i1>1231 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> %x1232 ret <32 x half> %c1233}1234 1235define <32 x half> @fma_mask_load_231_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp, i32 %mask) {1236; CHECK-LABEL: fma_mask_load_231_v32f16:1237; CHECK: # %bb.0:1238; CHECK-NEXT: kmovd %esi, %k11239; CHECK-NEXT: vfmadd231ph (%rdi), %zmm1, %zmm0 {%k1}1240; CHECK-NEXT: retq1241 %z = load <32 x half>, ptr %zp1242 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %y, <32 x half> %z, <32 x half> %x)1243 %b = bitcast i32 %mask to <32 x i1>1244 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> %x1245 ret <32 x half> %c1246}1247 1248define <32 x half> @fma_mask_load_321_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp, i32 %mask) {1249; CHECK-LABEL: fma_mask_load_321_v32f16:1250; CHECK: # %bb.0:1251; CHECK-NEXT: kmovd %esi, %k11252; CHECK-NEXT: vfmadd231ph (%rdi), %zmm1, %zmm0 {%k1}1253; CHECK-NEXT: retq1254 %z = load <32 x half>, ptr %zp1255 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %z, <32 x half> %y, <32 x half> %x)1256 %b = bitcast i32 %mask to <32 x i1>1257 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> %x1258 ret <32 x half> %c1259}1260 1261define <32 x half> @fma_mask_load_132_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp, i32 %mask) {1262; CHECK-LABEL: fma_mask_load_132_v32f16:1263; CHECK: # %bb.0:1264; CHECK-NEXT: kmovd %esi, %k11265; CHECK-NEXT: vfmadd132ph (%rdi), %zmm1, %zmm0 {%k1}1266; CHECK-NEXT: retq1267 %z = load <32 x half>, ptr %zp1268 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %x, <32 x half> %z, <32 x half> %y)1269 %b = bitcast i32 %mask to <32 x i1>1270 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> %x1271 ret <32 x half> %c1272}1273 1274define <32 x half> @fma_mask_load_312_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp, i32 %mask) {1275; CHECK-LABEL: fma_mask_load_312_v32f16:1276; CHECK: # %bb.0:1277; CHECK-NEXT: kmovd %esi, %k11278; CHECK-NEXT: vfmadd132ph (%rdi), %zmm1, %zmm0 {%k1}1279; CHECK-NEXT: retq1280 %z = load <32 x half>, ptr %zp1281 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %z, <32 x half> %x, <32 x half> %y)1282 %b = bitcast i32 %mask to <32 x i1>1283 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> %x1284 ret <32 x half> %c1285}1286 1287define <32 x half> @fma_maskz_load_123_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp, i32 %mask) {1288; CHECK-LABEL: fma_maskz_load_123_v32f16:1289; CHECK: # %bb.0:1290; CHECK-NEXT: kmovd %esi, %k11291; CHECK-NEXT: vfmadd213ph (%rdi), %zmm1, %zmm0 {%k1} {z}1292; CHECK-NEXT: retq1293 %z = load <32 x half>, ptr %zp1294 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %x, <32 x half> %y, <32 x half> %z)1295 %b = bitcast i32 %mask to <32 x i1>1296 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> zeroinitializer1297 ret <32 x half> %c1298}1299 1300define <32 x half> @fma_maskz_load_213_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp, i32 %mask) {1301; CHECK-LABEL: fma_maskz_load_213_v32f16:1302; CHECK: # %bb.0:1303; CHECK-NEXT: kmovd %esi, %k11304; CHECK-NEXT: vfmadd213ph (%rdi), %zmm1, %zmm0 {%k1} {z}1305; CHECK-NEXT: retq1306 %z = load <32 x half>, ptr %zp1307 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %y, <32 x half> %x, <32 x half> %z)1308 %b = bitcast i32 %mask to <32 x i1>1309 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> zeroinitializer1310 ret <32 x half> %c1311}1312 1313define <32 x half> @fma_maskz_load_231_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp, i32 %mask) {1314; CHECK-LABEL: fma_maskz_load_231_v32f16:1315; CHECK: # %bb.0:1316; CHECK-NEXT: kmovd %esi, %k11317; CHECK-NEXT: vfmadd231ph (%rdi), %zmm1, %zmm0 {%k1} {z}1318; CHECK-NEXT: retq1319 %z = load <32 x half>, ptr %zp1320 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %y, <32 x half> %z, <32 x half> %x)1321 %b = bitcast i32 %mask to <32 x i1>1322 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> zeroinitializer1323 ret <32 x half> %c1324}1325 1326define <32 x half> @fma_maskz_load_321_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp, i32 %mask) {1327; CHECK-LABEL: fma_maskz_load_321_v32f16:1328; CHECK: # %bb.0:1329; CHECK-NEXT: kmovd %esi, %k11330; CHECK-NEXT: vfmadd231ph (%rdi), %zmm1, %zmm0 {%k1} {z}1331; CHECK-NEXT: retq1332 %z = load <32 x half>, ptr %zp1333 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %z, <32 x half> %y, <32 x half> %x)1334 %b = bitcast i32 %mask to <32 x i1>1335 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> zeroinitializer1336 ret <32 x half> %c1337}1338 1339define <32 x half> @fma_maskz_load_132_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp, i32 %mask) {1340; CHECK-LABEL: fma_maskz_load_132_v32f16:1341; CHECK: # %bb.0:1342; CHECK-NEXT: kmovd %esi, %k11343; CHECK-NEXT: vfmadd132ph (%rdi), %zmm1, %zmm0 {%k1} {z}1344; CHECK-NEXT: retq1345 %z = load <32 x half>, ptr %zp1346 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %x, <32 x half> %z, <32 x half> %y)1347 %b = bitcast i32 %mask to <32 x i1>1348 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> zeroinitializer1349 ret <32 x half> %c1350}1351 1352define <32 x half> @fma_maskz_load_312_v32f16(<32 x half> %x, <32 x half> %y, ptr %zp, i32 %mask) {1353; CHECK-LABEL: fma_maskz_load_312_v32f16:1354; CHECK: # %bb.0:1355; CHECK-NEXT: kmovd %esi, %k11356; CHECK-NEXT: vfmadd132ph (%rdi), %zmm1, %zmm0 {%k1} {z}1357; CHECK-NEXT: retq1358 %z = load <32 x half>, ptr %zp1359 %a = call <32 x half> @llvm.fma.v32f16(<32 x half> %z, <32 x half> %x, <32 x half> %y)1360 %b = bitcast i32 %mask to <32 x i1>1361 %c = select <32 x i1> %b, <32 x half> %a, <32 x half> zeroinitializer1362 ret <32 x half> %c1363}1364