588 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown --show-mc-encoding -mattr=+avx10.2 | FileCheck %s --check-prefixes=CHECK,X643; RUN: llc < %s -verify-machineinstrs -mtriple=i686-unknown-unknown --show-mc-encoding -mattr=+avx10.2 | FileCheck %s --check-prefixes=CHECK,X864 5define <32 x bfloat> @test_int_x86_avx10_vaddbf16512(<32 x bfloat> %x1, <32 x bfloat> %x2) {6; CHECK-LABEL: test_int_x86_avx10_vaddbf16512:7; CHECK: # %bb.0:8; CHECK-NEXT: vaddbf16 %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf5,0x7d,0x48,0x58,0xc1]9; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]10 %res = fadd <32 x bfloat> %x1, %x211 ret <32 x bfloat> %res12}13 14define <32 x bfloat> @test_int_x86_avx10_mask_add_bf16_512(<32 x bfloat> %src, <32 x bfloat> %x1, <32 x bfloat> %x2, i32 %msk, ptr %ptr) {15; X64-LABEL: test_int_x86_avx10_mask_add_bf16_512:16; X64: # %bb.0:17; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]18; X64-NEXT: vaddbf16 %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf5,0x75,0x49,0x58,0xc2]19; X64-NEXT: retq # encoding: [0xc3]20;21; X86-LABEL: test_int_x86_avx10_mask_add_bf16_512:22; X86: # %bb.0:23; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]24; X86-NEXT: vaddbf16 %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf5,0x75,0x49,0x58,0xc2]25; X86-NEXT: retl # encoding: [0xc3]26 %mask = bitcast i32 %msk to <32 x i1>27 %res0 = fadd <32 x bfloat> %x1, %x228 %res = select <32 x i1> %mask, <32 x bfloat> %res0, <32 x bfloat> %src29 ret <32 x bfloat> %res30}31 32define <32 x bfloat> @test_int_x86_avx10_maskz_add_bf16_512(<32 x bfloat> %src, <32 x bfloat> %x1, <32 x bfloat> %x2, i32 %msk, ptr %ptr) {33; X64-LABEL: test_int_x86_avx10_maskz_add_bf16_512:34; X64: # %bb.0:35; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]36; X64-NEXT: vaddbf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf5,0x75,0xc9,0x58,0xc2]37; X64-NEXT: vaddbf16 (%rsi), %zmm1, %zmm1 {%k1} {z} # encoding: [0x62,0xf5,0x75,0xc9,0x58,0x0e]38; X64-NEXT: vaddbf16 %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf5,0x7d,0x48,0x58,0xc1]39; X64-NEXT: retq # encoding: [0xc3]40;41; X86-LABEL: test_int_x86_avx10_maskz_add_bf16_512:42; X86: # %bb.0:43; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]44; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]45; X86-NEXT: vaddbf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf5,0x75,0xc9,0x58,0xc2]46; X86-NEXT: vaddbf16 (%eax), %zmm1, %zmm1 {%k1} {z} # encoding: [0x62,0xf5,0x75,0xc9,0x58,0x08]47; X86-NEXT: vaddbf16 %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf5,0x7d,0x48,0x58,0xc1]48; X86-NEXT: retl # encoding: [0xc3]49 %mask = bitcast i32 %msk to <32 x i1>50 %val = load <32 x bfloat>, ptr %ptr51 %res0 = fadd <32 x bfloat> %x1, %x252 %res1 = select <32 x i1> %mask, <32 x bfloat> %res0, <32 x bfloat> zeroinitializer53 %t2 = fadd <32 x bfloat> %x1, %val54 %res2 = select <32 x i1> %mask, <32 x bfloat> %t2, <32 x bfloat> zeroinitializer55 %res3 = fadd <32 x bfloat> %res1, %res256 ret <32 x bfloat> %res357}58 59define <32 x bfloat> @test_int_x86_avx10_sub_bf16_512(<32 x bfloat> %x1, <32 x bfloat> %x2) {60; CHECK-LABEL: test_int_x86_avx10_sub_bf16_512:61; CHECK: # %bb.0:62; CHECK-NEXT: vsubbf16 %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf5,0x7d,0x48,0x5c,0xc1]63; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]64 %res = fsub <32 x bfloat> %x1, %x265 ret <32 x bfloat> %res66}67 68define <32 x bfloat> @test_int_x86_avx10_mask_sub_bf16_512(<32 x bfloat> %src, <32 x bfloat> %x1, <32 x bfloat> %x2, i32 %msk, ptr %ptr) {69; X64-LABEL: test_int_x86_avx10_mask_sub_bf16_512:70; X64: # %bb.0:71; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]72; X64-NEXT: vsubbf16 %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf5,0x75,0x49,0x5c,0xc2]73; X64-NEXT: retq # encoding: [0xc3]74;75; X86-LABEL: test_int_x86_avx10_mask_sub_bf16_512:76; X86: # %bb.0:77; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]78; X86-NEXT: vsubbf16 %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf5,0x75,0x49,0x5c,0xc2]79; X86-NEXT: retl # encoding: [0xc3]80 %mask = bitcast i32 %msk to <32 x i1>81 %res0 = fsub <32 x bfloat> %x1, %x282 %res = select <32 x i1> %mask, <32 x bfloat> %res0, <32 x bfloat> %src83 ret <32 x bfloat> %res84}85 86define <32 x bfloat> @test_int_x86_avx10_maskz_sub_bf16_512(<32 x bfloat> %src, <32 x bfloat> %x1, <32 x bfloat> %x2, i32 %msk, ptr %ptr) {87; X64-LABEL: test_int_x86_avx10_maskz_sub_bf16_512:88; X64: # %bb.0:89; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]90; X64-NEXT: vsubbf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf5,0x75,0xc9,0x5c,0xc2]91; X64-NEXT: vsubbf16 (%rsi), %zmm1, %zmm1 # encoding: [0x62,0xf5,0x75,0x48,0x5c,0x0e]92; X64-NEXT: vsubbf16 %zmm1, %zmm0, %zmm0 {%k1} # encoding: [0x62,0xf5,0x7d,0x49,0x5c,0xc1]93; X64-NEXT: retq # encoding: [0xc3]94;95; X86-LABEL: test_int_x86_avx10_maskz_sub_bf16_512:96; X86: # %bb.0:97; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]98; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]99; X86-NEXT: vsubbf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf5,0x75,0xc9,0x5c,0xc2]100; X86-NEXT: vsubbf16 (%eax), %zmm1, %zmm1 # encoding: [0x62,0xf5,0x75,0x48,0x5c,0x08]101; X86-NEXT: vsubbf16 %zmm1, %zmm0, %zmm0 {%k1} # encoding: [0x62,0xf5,0x7d,0x49,0x5c,0xc1]102; X86-NEXT: retl # encoding: [0xc3]103 %mask = bitcast i32 %msk to <32 x i1>104 %val = load <32 x bfloat>, ptr %ptr105 %res0 = fsub <32 x bfloat> %x1, %x2106 %res1 = select <32 x i1> %mask, <32 x bfloat> %res0, <32 x bfloat> zeroinitializer107 %t2 = fsub <32 x bfloat> %x1, %val108 %res2 = select <32 x i1> %mask, <32 x bfloat> %t2, <32 x bfloat> zeroinitializer109 %res3 = fsub <32 x bfloat> %res1, %res2110 ret <32 x bfloat> %res3111}112 113declare <32 x bfloat> @llvm.x86.avx10.vmulbf16512(<32 x bfloat>, <32 x bfloat>)114 115define <32 x bfloat> @test_int_x86_avx10_mul_bf16_512(<32 x bfloat> %x1, <32 x bfloat> %x2) {116; CHECK-LABEL: test_int_x86_avx10_mul_bf16_512:117; CHECK: # %bb.0:118; CHECK-NEXT: vmulbf16 %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf5,0x7d,0x48,0x59,0xc1]119; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]120 %res = fmul <32 x bfloat> %x1, %x2121 ret <32 x bfloat> %res122}123 124define <32 x bfloat> @test_int_x86_avx10_mask_mul_bf16_512(<32 x bfloat> %src, <32 x bfloat> %x1, <32 x bfloat> %x2, i32 %msk, ptr %ptr) {125; X64-LABEL: test_int_x86_avx10_mask_mul_bf16_512:126; X64: # %bb.0:127; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]128; X64-NEXT: vmulbf16 %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf5,0x75,0x49,0x59,0xc2]129; X64-NEXT: retq # encoding: [0xc3]130;131; X86-LABEL: test_int_x86_avx10_mask_mul_bf16_512:132; X86: # %bb.0:133; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]134; X86-NEXT: vmulbf16 %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf5,0x75,0x49,0x59,0xc2]135; X86-NEXT: retl # encoding: [0xc3]136 %mask = bitcast i32 %msk to <32 x i1>137 %res0 = fmul <32 x bfloat> %x1, %x2138 %res = select <32 x i1> %mask, <32 x bfloat> %res0, <32 x bfloat> %src139 ret <32 x bfloat> %res140}141 142define <32 x bfloat> @test_int_x86_avx10_maskz_mul_bf16_512(<32 x bfloat> %src, <32 x bfloat> %x1, <32 x bfloat> %x2, i32 %msk, ptr %ptr) {143; X64-LABEL: test_int_x86_avx10_maskz_mul_bf16_512:144; X64: # %bb.0:145; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]146; X64-NEXT: vmulbf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf5,0x75,0xc9,0x59,0xc2]147; X64-NEXT: vmulbf16 (%rsi), %zmm1, %zmm1 {%k1} {z} # encoding: [0x62,0xf5,0x75,0xc9,0x59,0x0e]148; X64-NEXT: vmulbf16 %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf5,0x7d,0x48,0x59,0xc1]149; X64-NEXT: retq # encoding: [0xc3]150;151; X86-LABEL: test_int_x86_avx10_maskz_mul_bf16_512:152; X86: # %bb.0:153; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]154; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]155; X86-NEXT: vmulbf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf5,0x75,0xc9,0x59,0xc2]156; X86-NEXT: vmulbf16 (%eax), %zmm1, %zmm1 {%k1} {z} # encoding: [0x62,0xf5,0x75,0xc9,0x59,0x08]157; X86-NEXT: vmulbf16 %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf5,0x7d,0x48,0x59,0xc1]158; X86-NEXT: retl # encoding: [0xc3]159 %mask = bitcast i32 %msk to <32 x i1>160 %val = load <32 x bfloat>, ptr %ptr161 %res0 = fmul <32 x bfloat> %x1, %x2162 %res1 = select <32 x i1> %mask, <32 x bfloat> %res0, <32 x bfloat> zeroinitializer163 %t2 = fmul <32 x bfloat> %x1, %val164 %res2 = select <32 x i1> %mask, <32 x bfloat> %t2, <32 x bfloat> zeroinitializer165 %res3 = fmul <32 x bfloat> %res1, %res2166 ret <32 x bfloat> %res3167}168 169define <32 x bfloat> @test_int_x86_avx10_div_bf16_512(<32 x bfloat> %x1, <32 x bfloat> %x2) {170; CHECK-LABEL: test_int_x86_avx10_div_bf16_512:171; CHECK: # %bb.0:172; CHECK-NEXT: vdivbf16 %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf5,0x7d,0x48,0x5e,0xc1]173; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]174 %res = fdiv <32 x bfloat> %x1, %x2175 ret <32 x bfloat> %res176}177 178define <32 x bfloat> @test_int_x86_avx10_mask_div_bf16_512(<32 x bfloat> %src, <32 x bfloat> %x1, <32 x bfloat> %x2, i32 %msk, ptr %ptr) {179; X64-LABEL: test_int_x86_avx10_mask_div_bf16_512:180; X64: # %bb.0:181; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]182; X64-NEXT: vdivbf16 %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf5,0x75,0x49,0x5e,0xc2]183; X64-NEXT: retq # encoding: [0xc3]184;185; X86-LABEL: test_int_x86_avx10_mask_div_bf16_512:186; X86: # %bb.0:187; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]188; X86-NEXT: vdivbf16 %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf5,0x75,0x49,0x5e,0xc2]189; X86-NEXT: retl # encoding: [0xc3]190 %mask = bitcast i32 %msk to <32 x i1>191 %res0 = fdiv <32 x bfloat> %x1, %x2192 %res = select <32 x i1> %mask, <32 x bfloat> %res0, <32 x bfloat> %src193 ret <32 x bfloat> %res194}195 196define <32 x bfloat> @test_int_x86_avx10_maskz_div_bf16_512(<32 x bfloat> %src, <32 x bfloat> %x1, <32 x bfloat> %x2, i32 %msk, ptr %ptr) {197; X64-LABEL: test_int_x86_avx10_maskz_div_bf16_512:198; X64: # %bb.0:199; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]200; X64-NEXT: vdivbf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf5,0x75,0xc9,0x5e,0xc2]201; X64-NEXT: vdivbf16 (%rsi), %zmm1, %zmm1 {%k1} {z} # encoding: [0x62,0xf5,0x75,0xc9,0x5e,0x0e]202; X64-NEXT: vdivbf16 %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf5,0x7d,0x48,0x5e,0xc1]203; X64-NEXT: retq # encoding: [0xc3]204;205; X86-LABEL: test_int_x86_avx10_maskz_div_bf16_512:206; X86: # %bb.0:207; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x08]208; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]209; X86-NEXT: vdivbf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf5,0x75,0xc9,0x5e,0xc2]210; X86-NEXT: vdivbf16 (%eax), %zmm1, %zmm1 {%k1} {z} # encoding: [0x62,0xf5,0x75,0xc9,0x5e,0x08]211; X86-NEXT: vdivbf16 %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf5,0x7d,0x48,0x5e,0xc1]212; X86-NEXT: retl # encoding: [0xc3]213 %mask = bitcast i32 %msk to <32 x i1>214 %val = load <32 x bfloat>, ptr %ptr215 %res0 = fdiv <32 x bfloat> %x1, %x2216 %res1 = select <32 x i1> %mask, <32 x bfloat> %res0, <32 x bfloat> zeroinitializer217 %t2 = fdiv <32 x bfloat> %x1, %val218 %res2 = select <32 x i1> %mask, <32 x bfloat> %t2, <32 x bfloat> zeroinitializer219 %res3 = fdiv <32 x bfloat> %res1, %res2220 ret <32 x bfloat> %res3221}222 223define i32 @test_int_x86_avx10_vcmpbf16512(<32 x bfloat> %x1, <32 x bfloat> %x2) {224; CHECK-LABEL: test_int_x86_avx10_vcmpbf16512:225; CHECK: # %bb.0:226; CHECK-NEXT: vcmpunordbf16 %zmm1, %zmm0, %k0 # encoding: [0x62,0xf3,0x7f,0x48,0xc2,0xc1,0x03]227; CHECK-NEXT: kmovd %k0, %eax # encoding: [0xc5,0xfb,0x93,0xc0]228; CHECK-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]229; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]230 %1 = fcmp uno <32 x bfloat> %x1, %x2231 %res = bitcast <32 x i1> %1 to i32232 ret i32 %res233}234 235; FIXME: _mm512_mask_cmp_p[s|h]_mask is not using {k2} but gcc does236define i32 @test_int_x86_avx10_vcmpbf16512_mask2(<32 x bfloat> %x1, <32 x bfloat> %x2) {237; CHECK-LABEL: test_int_x86_avx10_vcmpbf16512_mask2:238; CHECK: # %bb.0:239; CHECK-NEXT: vcmpeqbf16 %zmm1, %zmm0, %k0 # encoding: [0x62,0xf3,0x7f,0x48,0xc2,0xc1,0x00]240; CHECK-NEXT: kmovd %k0, %eax # encoding: [0xc5,0xfb,0x93,0xc0]241; CHECK-NEXT: andl $3, %eax # encoding: [0x83,0xe0,0x03]242; CHECK-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]243; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]244 %1 = fcmp oeq <32 x bfloat> %x1, %x2245 %2 = and <32 x i1> %1, <i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>246 %3 = bitcast <32 x i1> %2 to i32247 ret i32 %3248}249 250define <32 x bfloat> @test_sqrt_bf16_512(<32 x bfloat> %a0) {251; CHECK-LABEL: test_sqrt_bf16_512:252; CHECK: # %bb.0:253; CHECK-NEXT: vsqrtbf16 %zmm0, %zmm0 # encoding: [0x62,0xf5,0x7d,0x48,0x51,0xc0]254; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]255 %1 = tail call <32 x bfloat> @llvm.sqrt.v32bf16(<32 x bfloat> %a0)256 ret <32 x bfloat> %1257}258 259define <32 x bfloat> @test_mm512_mask_sqrt_pbh(<32 x bfloat> %__W, i32 %__U, <32 x bfloat> %__A) {260; X64-LABEL: test_mm512_mask_sqrt_pbh:261; X64: # %bb.0: # %entry262; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]263; X64-NEXT: vsqrtbf16 %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf5,0x7d,0x49,0x51,0xc1]264; X64-NEXT: retq # encoding: [0xc3]265;266; X86-LABEL: test_mm512_mask_sqrt_pbh:267; X86: # %bb.0: # %entry268; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]269; X86-NEXT: vsqrtbf16 %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf5,0x7d,0x49,0x51,0xc1]270; X86-NEXT: retl # encoding: [0xc3]271entry:272 %0 = tail call <32 x bfloat> @llvm.sqrt.v32bf16(<32 x bfloat> %__A)273 %1 = bitcast i32 %__U to <32 x i1>274 %2 = select <32 x i1> %1, <32 x bfloat> %0, <32 x bfloat> %__W275 ret <32 x bfloat> %2276}277 278define <32 x bfloat> @test_mm512_maskz_sqrt_pbh(i32 %__U, <32 x bfloat>%__A) {279; X64-LABEL: test_mm512_maskz_sqrt_pbh:280; X64: # %bb.0: # %entry281; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]282; X64-NEXT: vsqrtbf16 %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf5,0x7d,0xc9,0x51,0xc0]283; X64-NEXT: retq # encoding: [0xc3]284;285; X86-LABEL: test_mm512_maskz_sqrt_pbh:286; X86: # %bb.0: # %entry287; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]288; X86-NEXT: vsqrtbf16 %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf5,0x7d,0xc9,0x51,0xc0]289; X86-NEXT: retl # encoding: [0xc3]290entry:291 %0 = tail call <32 x bfloat> @llvm.sqrt.v32bf16(<32 x bfloat> %__A)292 %1 = bitcast i32 %__U to <32 x i1>293 %2 = select <32 x i1> %1, <32 x bfloat> %0, <32 x bfloat> zeroinitializer294 ret <32 x bfloat> %2295}296 297define <32 x bfloat> @test_mm512_fmaddne_pbh(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C) {298; CHECK-LABEL: test_mm512_fmaddne_pbh:299; CHECK: # %bb.0: # %entry300; CHECK-NEXT: vfmadd213bf16 %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf6,0x74,0x48,0xa8,0xc2]301; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]302entry:303 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C)304 ret <32 x bfloat> %0305}306 307define <32 x bfloat> @test_mm512_mask_fmaddne_pbh(<32 x bfloat> %__A, i32 %__U, <32 x bfloat> %__B, <32 x bfloat> %__C) {308; X64-LABEL: test_mm512_mask_fmaddne_pbh:309; X64: # %bb.0: # %entry310; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]311; X64-NEXT: vfmadd132bf16 %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf6,0x6c,0x49,0x98,0xc1]312; X64-NEXT: retq # encoding: [0xc3]313;314; X86-LABEL: test_mm512_mask_fmaddne_pbh:315; X86: # %bb.0: # %entry316; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]317; X86-NEXT: vfmadd132bf16 %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf6,0x6c,0x49,0x98,0xc1]318; X86-NEXT: retl # encoding: [0xc3]319entry:320 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C)321 %1 = bitcast i32 %__U to <32 x i1>322 %2 = select <32 x i1> %1, <32 x bfloat> %0, <32 x bfloat> %__A323 ret <32 x bfloat> %2324}325 326define <32 x bfloat> @test_mm512_mask3_fmaddne_pbh(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C, i32 %__U) {327; X64-LABEL: test_mm512_mask3_fmaddne_pbh:328; X64: # %bb.0: # %entry329; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]330; X64-NEXT: vfmadd231bf16 %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf6,0x7c,0x49,0xb8,0xd1]331; X64-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]332; X64-NEXT: retq # encoding: [0xc3]333;334; X86-LABEL: test_mm512_mask3_fmaddne_pbh:335; X86: # %bb.0: # %entry336; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]337; X86-NEXT: vfmadd231bf16 %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf6,0x7c,0x49,0xb8,0xd1]338; X86-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]339; X86-NEXT: retl # encoding: [0xc3]340entry:341 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C)342 %1 = bitcast i32 %__U to <32 x i1>343 %2 = select <32 x i1> %1, <32 x bfloat> %0, <32 x bfloat> %__C344 ret <32 x bfloat> %2345}346 347define <32 x bfloat> @test_mm512_maskz_fmaddne_pbh(i32 %__U, <32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C) {348; X64-LABEL: test_mm512_maskz_fmaddne_pbh:349; X64: # %bb.0: # %entry350; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]351; X64-NEXT: vfmadd213bf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf6,0x74,0xc9,0xa8,0xc2]352; X64-NEXT: retq # encoding: [0xc3]353;354; X86-LABEL: test_mm512_maskz_fmaddne_pbh:355; X86: # %bb.0: # %entry356; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]357; X86-NEXT: vfmadd213bf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf6,0x74,0xc9,0xa8,0xc2]358; X86-NEXT: retl # encoding: [0xc3]359entry:360 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C)361 %1 = bitcast i32 %__U to <32 x i1>362 %2 = select <32 x i1> %1, <32 x bfloat> %0, <32 x bfloat> zeroinitializer363 ret <32 x bfloat> %2364}365 366define <32 x bfloat> @test_mm512_fmsubne_pbh(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C) {367; CHECK-LABEL: test_mm512_fmsubne_pbh:368; CHECK: # %bb.0: # %entry369; CHECK-NEXT: vfmsub213bf16 %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf6,0x74,0x48,0xaa,0xc2]370; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]371entry:372 %fneg.i = fneg <32 x bfloat> %__C373 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %fneg.i)374 ret <32 x bfloat> %0375}376 377define <32 x bfloat> @test_mm512_mask_fmsubne_pbh(<32 x bfloat> %__A, i32 %__U, <32 x bfloat> %__B, <32 x bfloat> %__C) {378; X64-LABEL: test_mm512_mask_fmsubne_pbh:379; X64: # %bb.0: # %entry380; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]381; X64-NEXT: vfmsub132bf16 %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf6,0x6c,0x49,0x9a,0xc1]382; X64-NEXT: retq # encoding: [0xc3]383;384; X86-LABEL: test_mm512_mask_fmsubne_pbh:385; X86: # %bb.0: # %entry386; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]387; X86-NEXT: vfmsub132bf16 %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf6,0x6c,0x49,0x9a,0xc1]388; X86-NEXT: retl # encoding: [0xc3]389entry:390 %fneg.i.i = fneg <32 x bfloat> %__C391 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %fneg.i.i)392 %1 = bitcast i32 %__U to <32 x i1>393 %2 = select <32 x i1> %1, <32 x bfloat> %0, <32 x bfloat> %__A394 ret <32 x bfloat> %2395}396 397define <32 x bfloat> @test_mm512_mask3_fmsubne_pbh(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C, i32 %__U) {398; X64-LABEL: test_mm512_mask3_fmsubne_pbh:399; X64: # %bb.0: # %entry400; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]401; X64-NEXT: vfmsub231bf16 %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf6,0x7c,0x49,0xba,0xd1]402; X64-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]403; X64-NEXT: retq # encoding: [0xc3]404;405; X86-LABEL: test_mm512_mask3_fmsubne_pbh:406; X86: # %bb.0: # %entry407; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]408; X86-NEXT: vfmsub231bf16 %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf6,0x7c,0x49,0xba,0xd1]409; X86-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]410; X86-NEXT: retl # encoding: [0xc3]411entry:412 %fneg.i.i = fneg <32 x bfloat> %__C413 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %fneg.i.i)414 %1 = bitcast i32 %__U to <32 x i1>415 %2 = select <32 x i1> %1, <32 x bfloat> %0, <32 x bfloat> %__C416 ret <32 x bfloat> %2417}418 419define <32 x bfloat> @test_mm512_maskz_fmsubne_pbh(i32 %__U, <32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C) {420; X64-LABEL: test_mm512_maskz_fmsubne_pbh:421; X64: # %bb.0: # %entry422; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]423; X64-NEXT: vfmsub213bf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf6,0x74,0xc9,0xaa,0xc2]424; X64-NEXT: retq # encoding: [0xc3]425;426; X86-LABEL: test_mm512_maskz_fmsubne_pbh:427; X86: # %bb.0: # %entry428; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]429; X86-NEXT: vfmsub213bf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf6,0x74,0xc9,0xaa,0xc2]430; X86-NEXT: retl # encoding: [0xc3]431entry:432 %fneg.i.i = fneg <32 x bfloat> %__C433 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %fneg.i.i)434 %1 = bitcast i32 %__U to <32 x i1>435 %2 = select <32 x i1> %1, <32 x bfloat> %0, <32 x bfloat> zeroinitializer436 ret <32 x bfloat> %2437}438 439define <32 x bfloat> @test_mm512_fnmaddne_pbh(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C) {440; CHECK-LABEL: test_mm512_fnmaddne_pbh:441; CHECK: # %bb.0: # %entry442; CHECK-NEXT: vfnmadd213bf16 %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf6,0x74,0x48,0xac,0xc2]443; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]444entry:445 %fneg.i = fneg <32 x bfloat> %__B446 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %fneg.i, <32 x bfloat> %__C)447 ret <32 x bfloat> %0448}449 450define <32 x bfloat> @test_mm512_mask_fnmaddne_pbh(<32 x bfloat> %__A, i32 %__U, <32 x bfloat> %__B, <32 x bfloat> %__C) {451; X64-LABEL: test_mm512_mask_fnmaddne_pbh:452; X64: # %bb.0: # %entry453; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]454; X64-NEXT: vfnmadd132bf16 %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf6,0x6c,0x49,0x9c,0xc1]455; X64-NEXT: retq # encoding: [0xc3]456;457; X86-LABEL: test_mm512_mask_fnmaddne_pbh:458; X86: # %bb.0: # %entry459; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]460; X86-NEXT: vfnmadd132bf16 %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf6,0x6c,0x49,0x9c,0xc1]461; X86-NEXT: retl # encoding: [0xc3]462entry:463 %fneg.i.i = fneg <32 x bfloat> %__B464 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %fneg.i.i, <32 x bfloat> %__C)465 %1 = bitcast i32 %__U to <32 x i1>466 %2 = select <32 x i1> %1, <32 x bfloat> %0, <32 x bfloat> %__A467 ret <32 x bfloat> %2468}469 470define <32 x bfloat> @test_mm512_mask3_fnmaddne_pbh(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C, i32 %__U) {471; X64-LABEL: test_mm512_mask3_fnmaddne_pbh:472; X64: # %bb.0: # %entry473; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]474; X64-NEXT: vfnmadd231bf16 %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf6,0x7c,0x49,0xbc,0xd1]475; X64-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]476; X64-NEXT: retq # encoding: [0xc3]477;478; X86-LABEL: test_mm512_mask3_fnmaddne_pbh:479; X86: # %bb.0: # %entry480; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]481; X86-NEXT: vfnmadd231bf16 %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf6,0x7c,0x49,0xbc,0xd1]482; X86-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]483; X86-NEXT: retl # encoding: [0xc3]484entry:485 %fneg.i.i = fneg <32 x bfloat> %__B486 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %fneg.i.i, <32 x bfloat> %__C)487 %1 = bitcast i32 %__U to <32 x i1>488 %2 = select <32 x i1> %1, <32 x bfloat> %0, <32 x bfloat> %__C489 ret <32 x bfloat> %2490}491 492define <32 x bfloat> @test_mm512_maskz_fnmaddne_pbh(i32 %__U, <32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C) {493; X64-LABEL: test_mm512_maskz_fnmaddne_pbh:494; X64: # %bb.0: # %entry495; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]496; X64-NEXT: vfnmadd213bf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf6,0x74,0xc9,0xac,0xc2]497; X64-NEXT: retq # encoding: [0xc3]498;499; X86-LABEL: test_mm512_maskz_fnmaddne_pbh:500; X86: # %bb.0: # %entry501; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]502; X86-NEXT: vfnmadd213bf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf6,0x74,0xc9,0xac,0xc2]503; X86-NEXT: retl # encoding: [0xc3]504entry:505 %fneg.i.i = fneg <32 x bfloat> %__B506 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %fneg.i.i, <32 x bfloat> %__C)507 %1 = bitcast i32 %__U to <32 x i1>508 %2 = select <32 x i1> %1, <32 x bfloat> %0, <32 x bfloat> zeroinitializer509 ret <32 x bfloat> %2510}511 512define <32 x bfloat> @test_mm512_fnmsubne_pbh(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C) {513; CHECK-LABEL: test_mm512_fnmsubne_pbh:514; CHECK: # %bb.0: # %entry515; CHECK-NEXT: vfnmsub213bf16 %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf6,0x74,0x48,0xae,0xc2]516; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]517entry:518 %fneg.i = fneg <32 x bfloat> %__B519 %fneg1.i = fneg <32 x bfloat> %__C520 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %fneg.i, <32 x bfloat> %fneg1.i)521 ret <32 x bfloat> %0522}523 524define <32 x bfloat> @test_mm512_mask_fnmsubne_pbh(<32 x bfloat> %__A, i32 %__U, <32 x bfloat> %__B, <32 x bfloat> %__C) {525; X64-LABEL: test_mm512_mask_fnmsubne_pbh:526; X64: # %bb.0: # %entry527; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]528; X64-NEXT: vfnmsub132bf16 %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf6,0x6c,0x49,0x9e,0xc1]529; X64-NEXT: retq # encoding: [0xc3]530;531; X86-LABEL: test_mm512_mask_fnmsubne_pbh:532; X86: # %bb.0: # %entry533; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]534; X86-NEXT: vfnmsub132bf16 %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf6,0x6c,0x49,0x9e,0xc1]535; X86-NEXT: retl # encoding: [0xc3]536entry:537 %fneg.i.i = fneg <32 x bfloat> %__B538 %fneg1.i.i = fneg <32 x bfloat> %__C539 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %fneg.i.i, <32 x bfloat> %fneg1.i.i)540 %1 = bitcast i32 %__U to <32 x i1>541 %2 = select <32 x i1> %1, <32 x bfloat> %0, <32 x bfloat> %__A542 ret <32 x bfloat> %2543}544 545define <32 x bfloat> @test_mm512_mask3_fnmsubne_pbh(<32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C, i32 %__U) {546; X64-LABEL: test_mm512_mask3_fnmsubne_pbh:547; X64: # %bb.0: # %entry548; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]549; X64-NEXT: vfnmsub231bf16 %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf6,0x7c,0x49,0xbe,0xd1]550; X64-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]551; X64-NEXT: retq # encoding: [0xc3]552;553; X86-LABEL: test_mm512_mask3_fnmsubne_pbh:554; X86: # %bb.0: # %entry555; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]556; X86-NEXT: vfnmsub231bf16 %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf6,0x7c,0x49,0xbe,0xd1]557; X86-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]558; X86-NEXT: retl # encoding: [0xc3]559entry:560 %fneg.i.i = fneg <32 x bfloat> %__B561 %fneg1.i.i = fneg <32 x bfloat> %__C562 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %fneg.i.i, <32 x bfloat> %fneg1.i.i)563 %1 = bitcast i32 %__U to <32 x i1>564 %2 = select <32 x i1> %1, <32 x bfloat> %0, <32 x bfloat> %__C565 ret <32 x bfloat> %2566}567 568define <32 x bfloat> @test_mm512_maskz_fnmsubne_pbh(i32 %__U, <32 x bfloat> %__A, <32 x bfloat> %__B, <32 x bfloat> %__C) {569; X64-LABEL: test_mm512_maskz_fnmsubne_pbh:570; X64: # %bb.0: # %entry571; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]572; X64-NEXT: vfnmsub213bf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf6,0x74,0xc9,0xae,0xc2]573; X64-NEXT: retq # encoding: [0xc3]574;575; X86-LABEL: test_mm512_maskz_fnmsubne_pbh:576; X86: # %bb.0: # %entry577; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]578; X86-NEXT: vfnmsub213bf16 %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf6,0x74,0xc9,0xae,0xc2]579; X86-NEXT: retl # encoding: [0xc3]580entry:581 %fneg.i.i = fneg <32 x bfloat> %__B582 %fneg1.i.i = fneg <32 x bfloat> %__C583 %0 = tail call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %__A, <32 x bfloat> %fneg.i.i, <32 x bfloat> %fneg1.i.i)584 %1 = bitcast i32 %__U to <32 x i1>585 %2 = select <32 x i1> %1, <32 x bfloat> %0, <32 x bfloat> zeroinitializer586 ret <32 x bfloat> %2587}588