1174 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f --show-mc-encoding | FileCheck %s --check-prefixes=CHECK,X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f --show-mc-encoding | FileCheck %s --check-prefixes=CHECK,X644 5declare <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float>, <16 x float>, <16 x float>, i32)6declare <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double>, <8 x double>, <8 x double>, i32)7 8define <16 x float> @test_x86_vfnmadd_ps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {9; CHECK-LABEL: test_x86_vfnmadd_ps_z:10; CHECK: # %bb.0:11; CHECK-NEXT: vfnmadd213ps %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0x75,0x48,0xac,0xc2]12; CHECK-NEXT: # zmm0 = -(zmm1 * zmm0) + zmm213; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]14 %1 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a115 %2 = call <16 x float> @llvm.fma.v16f32(<16 x float> %a0, <16 x float> %1, <16 x float> %a2)16 ret <16 x float> %217}18 19define <16 x float> @test_mask_vfnmadd_ps(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i16 %mask) {20; X86-LABEL: test_mask_vfnmadd_ps:21; X86: # %bb.0:22; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]23; X86-NEXT: vfnmadd132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x9c,0xc1]24; X86-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) + zmm225; X86-NEXT: retl # encoding: [0xc3]26;27; X64-LABEL: test_mask_vfnmadd_ps:28; X64: # %bb.0:29; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]30; X64-NEXT: vfnmadd132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x9c,0xc1]31; X64-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) + zmm232; X64-NEXT: retq # encoding: [0xc3]33 %1 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a134 %2 = call <16 x float> @llvm.fma.v16f32(<16 x float> %a0, <16 x float> %1, <16 x float> %a2)35 %3 = bitcast i16 %mask to <16 x i1>36 %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %a037 ret <16 x float> %438}39 40define <8 x double> @test_x86_vfnmadd_pd_z(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {41; CHECK-LABEL: test_x86_vfnmadd_pd_z:42; CHECK: # %bb.0:43; CHECK-NEXT: vfnmadd213pd %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x48,0xac,0xc2]44; CHECK-NEXT: # zmm0 = -(zmm1 * zmm0) + zmm245; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]46 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a147 %2 = call <8 x double> @llvm.fma.v8f64(<8 x double> %a0, <8 x double> %1, <8 x double> %a2)48 ret <8 x double> %249}50 51define <8 x double> @test_mask_vfnmadd_pd(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i8 %mask) {52; X86-LABEL: test_mask_vfnmadd_pd:53; X86: # %bb.0:54; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]55; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]56; X86-NEXT: vfnmadd132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x9c,0xc1]57; X86-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) + zmm258; X86-NEXT: retl # encoding: [0xc3]59;60; X64-LABEL: test_mask_vfnmadd_pd:61; X64: # %bb.0:62; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]63; X64-NEXT: vfnmadd132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x9c,0xc1]64; X64-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) + zmm265; X64-NEXT: retq # encoding: [0xc3]66 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a167 %2 = call <8 x double> @llvm.fma.v8f64(<8 x double> %a0, <8 x double> %1, <8 x double> %a2)68 %3 = bitcast i8 %mask to <8 x i1>69 %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %a070 ret <8 x double> %471}72 73define <16 x float> @test_x86_vfnmsubps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {74; CHECK-LABEL: test_x86_vfnmsubps_z:75; CHECK: # %bb.0:76; CHECK-NEXT: vfnmsub213ps %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0x75,0x48,0xae,0xc2]77; CHECK-NEXT: # zmm0 = -(zmm1 * zmm0) - zmm278; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]79 %1 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a180 %2 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a281 %3 = call <16 x float> @llvm.fma.v16f32(<16 x float> %a0, <16 x float> %1, <16 x float> %2)82 ret <16 x float> %383}84 85define <16 x float> @test_mask_vfnmsub_ps(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i16 %mask) {86; X86-LABEL: test_mask_vfnmsub_ps:87; X86: # %bb.0:88; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]89; X86-NEXT: vfnmsub132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x9e,0xc1]90; X86-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) - zmm291; X86-NEXT: retl # encoding: [0xc3]92;93; X64-LABEL: test_mask_vfnmsub_ps:94; X64: # %bb.0:95; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]96; X64-NEXT: vfnmsub132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x9e,0xc1]97; X64-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) - zmm298; X64-NEXT: retq # encoding: [0xc3]99 %1 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a1100 %2 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a2101 %3 = call <16 x float> @llvm.fma.v16f32(<16 x float> %a0, <16 x float> %1, <16 x float> %2)102 %4 = bitcast i16 %mask to <16 x i1>103 %5 = select <16 x i1> %4, <16 x float> %3, <16 x float> %a0104 ret <16 x float> %5105}106 107define <8 x double> @test_x86_vfnmsubpd_z(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {108; CHECK-LABEL: test_x86_vfnmsubpd_z:109; CHECK: # %bb.0:110; CHECK-NEXT: vfnmsub213pd %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x48,0xae,0xc2]111; CHECK-NEXT: # zmm0 = -(zmm1 * zmm0) - zmm2112; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]113 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a1114 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a2115 %3 = call <8 x double> @llvm.fma.v8f64(<8 x double> %a0, <8 x double> %1, <8 x double> %2)116 ret <8 x double> %3117}118 119define <8 x double> @test_mask_vfnmsub_pd(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i8 %mask) {120; X86-LABEL: test_mask_vfnmsub_pd:121; X86: # %bb.0:122; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]123; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]124; X86-NEXT: vfnmsub132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x9e,0xc1]125; X86-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) - zmm2126; X86-NEXT: retl # encoding: [0xc3]127;128; X64-LABEL: test_mask_vfnmsub_pd:129; X64: # %bb.0:130; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]131; X64-NEXT: vfnmsub132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x9e,0xc1]132; X64-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) - zmm2133; X64-NEXT: retq # encoding: [0xc3]134 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a1135 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a2136 %3 = call <8 x double> @llvm.fma.v8f64(<8 x double> %a0, <8 x double> %1, <8 x double> %2)137 %4 = bitcast i8 %mask to <8 x i1>138 %5 = select <8 x i1> %4, <8 x double> %3, <8 x double> %a0139 ret <8 x double> %5140}141 142define <16 x float> @test_x86_vfmaddsubps_z(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {143; CHECK-LABEL: test_x86_vfmaddsubps_z:144; CHECK: # %bb.0:145; CHECK-NEXT: vfmaddsub213ps %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0x75,0x48,0xa6,0xc2]146; CHECK-NEXT: # zmm0 = (zmm1 * zmm0) +/- zmm2147; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]148 %res = call <16 x float> @llvm.x86.avx512.vfmaddsub.ps.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i32 4) #2149 ret <16 x float> %res150}151 152define <16 x float> @test_mask_fmaddsub_ps(<16 x float> %a, <16 x float> %b, <16 x float> %c, i16 %mask) {153; X86-LABEL: test_mask_fmaddsub_ps:154; X86: # %bb.0:155; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]156; X86-NEXT: vfmaddsub132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x96,0xc1]157; X86-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) +/- zmm2158; X86-NEXT: retl # encoding: [0xc3]159;160; X64-LABEL: test_mask_fmaddsub_ps:161; X64: # %bb.0:162; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]163; X64-NEXT: vfmaddsub132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x96,0xc1]164; X64-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) +/- zmm2165; X64-NEXT: retq # encoding: [0xc3]166 %res = call <16 x float> @llvm.x86.avx512.vfmaddsub.ps.512(<16 x float> %a, <16 x float> %b, <16 x float> %c, i32 4)167 %bc = bitcast i16 %mask to <16 x i1>168 %sel = select <16 x i1> %bc, <16 x float> %res, <16 x float> %a169 ret <16 x float> %sel170}171 172declare <16 x float> @llvm.x86.avx512.vfmaddsub.ps.512(<16 x float>, <16 x float>, <16 x float>, i32) nounwind readnone173 174define <8 x double> @test_x86_vfmaddsubpd_z(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {175; CHECK-LABEL: test_x86_vfmaddsubpd_z:176; CHECK: # %bb.0:177; CHECK-NEXT: vfmaddsub213pd %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x48,0xa6,0xc2]178; CHECK-NEXT: # zmm0 = (zmm1 * zmm0) +/- zmm2179; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]180 %res = call <8 x double> @llvm.x86.avx512.vfmaddsub.pd.512(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i32 4) #2181 ret <8 x double> %res182}183declare <8 x double> @llvm.x86.avx512.vfmaddsub.pd.512(<8 x double>, <8 x double>, <8 x double>, i32) nounwind readnone184 185define <8 x double> @test_mask_vfmaddsub_pd(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i8 %mask) {186; X86-LABEL: test_mask_vfmaddsub_pd:187; X86: # %bb.0:188; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]189; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]190; X86-NEXT: vfmaddsub132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x96,0xc1]191; X86-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) +/- zmm2192; X86-NEXT: retl # encoding: [0xc3]193;194; X64-LABEL: test_mask_vfmaddsub_pd:195; X64: # %bb.0:196; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]197; X64-NEXT: vfmaddsub132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x96,0xc1]198; X64-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) +/- zmm2199; X64-NEXT: retq # encoding: [0xc3]200 %res = call <8 x double> @llvm.x86.avx512.vfmaddsub.pd.512(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i32 4) #2201 %bc = bitcast i8 %mask to <8 x i1>202 %sel = select <8 x i1> %bc, <8 x double> %res, <8 x double> %a0203 ret <8 x double> %sel204}205 206define <8 x double>@test_int_x86_avx512_mask_vfmaddsub_pd_512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3){207; X86-LABEL: test_int_x86_avx512_mask_vfmaddsub_pd_512:208; X86: # %bb.0:209; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]210; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]211; X86-NEXT: vfmaddsub132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x96,0xc1]212; X86-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) +/- zmm2213; X86-NEXT: retl # encoding: [0xc3]214;215; X64-LABEL: test_int_x86_avx512_mask_vfmaddsub_pd_512:216; X64: # %bb.0:217; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]218; X64-NEXT: vfmaddsub132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x96,0xc1]219; X64-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) +/- zmm2220; X64-NEXT: retq # encoding: [0xc3]221 %res = call <8 x double> @llvm.x86.avx512.vfmaddsub.pd.512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i32 4)222 %bc = bitcast i8 %x3 to <8 x i1>223 %sel = select <8 x i1> %bc, <8 x double> %res, <8 x double> %x0224 ret <8 x double> %sel225}226 227define <8 x double>@test_int_x86_avx512_mask3_vfmaddsub_pd_512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3){228; X86-LABEL: test_int_x86_avx512_mask3_vfmaddsub_pd_512:229; X86: # %bb.0:230; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]231; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]232; X86-NEXT: vfmaddsub231pd %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0xb6,0xd1]233; X86-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) +/- zmm2234; X86-NEXT: vmovapd %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]235; X86-NEXT: retl # encoding: [0xc3]236;237; X64-LABEL: test_int_x86_avx512_mask3_vfmaddsub_pd_512:238; X64: # %bb.0:239; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]240; X64-NEXT: vfmaddsub231pd %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0xb6,0xd1]241; X64-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) +/- zmm2242; X64-NEXT: vmovapd %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]243; X64-NEXT: retq # encoding: [0xc3]244 %1 = call <8 x double> @llvm.fma.v8f64(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2)245 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %x2246 %3 = call <8 x double> @llvm.fma.v8f64(<8 x double> %x0, <8 x double> %x1, <8 x double> %2)247 %4 = shufflevector <8 x double> %3, <8 x double> %1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>248 %5 = bitcast i8 %x3 to <8 x i1>249 %6 = select <8 x i1> %5, <8 x double> %4, <8 x double> %x2250 ret <8 x double> %6251}252 253define <8 x double>@test_int_x86_avx512_maskz_vfmaddsub_pd_512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3){254; X86-LABEL: test_int_x86_avx512_maskz_vfmaddsub_pd_512:255; X86: # %bb.0:256; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]257; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]258; X86-NEXT: vfmaddsub213pd %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xc9,0xa6,0xc2]259; X86-NEXT: # zmm0 {%k1} {z} = (zmm1 * zmm0) +/- zmm2260; X86-NEXT: retl # encoding: [0xc3]261;262; X64-LABEL: test_int_x86_avx512_maskz_vfmaddsub_pd_512:263; X64: # %bb.0:264; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]265; X64-NEXT: vfmaddsub213pd %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xc9,0xa6,0xc2]266; X64-NEXT: # zmm0 {%k1} {z} = (zmm1 * zmm0) +/- zmm2267; X64-NEXT: retq # encoding: [0xc3]268 %1 = call <8 x double> @llvm.fma.v8f64(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2)269 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %x2270 %3 = call <8 x double> @llvm.fma.v8f64(<8 x double> %x0, <8 x double> %x1, <8 x double> %2)271 %4 = shufflevector <8 x double> %3, <8 x double> %1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>272 %5 = bitcast i8 %x3 to <8 x i1>273 %6 = select <8 x i1> %5, <8 x double> %4, <8 x double> zeroinitializer274 ret <8 x double> %6275}276 277define <16 x float>@test_int_x86_avx512_mask_vfmaddsub_ps_512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3){278; X86-LABEL: test_int_x86_avx512_mask_vfmaddsub_ps_512:279; X86: # %bb.0:280; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]281; X86-NEXT: vfmaddsub132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x96,0xc1]282; X86-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) +/- zmm2283; X86-NEXT: retl # encoding: [0xc3]284;285; X64-LABEL: test_int_x86_avx512_mask_vfmaddsub_ps_512:286; X64: # %bb.0:287; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]288; X64-NEXT: vfmaddsub132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x96,0xc1]289; X64-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) +/- zmm2290; X64-NEXT: retq # encoding: [0xc3]291 %res = call <16 x float> @llvm.x86.avx512.vfmaddsub.ps.512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i32 4)292 %bc = bitcast i16 %x3 to <16 x i1>293 %sel = select <16 x i1> %bc, <16 x float> %res, <16 x float> %x0294 ret <16 x float> %sel295}296 297define <16 x float>@test_int_x86_avx512_mask3_vfmaddsub_ps_512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3){298; X86-LABEL: test_int_x86_avx512_mask3_vfmaddsub_ps_512:299; X86: # %bb.0:300; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]301; X86-NEXT: vfmaddsub231ps %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0xb6,0xd1]302; X86-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) +/- zmm2303; X86-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]304; X86-NEXT: retl # encoding: [0xc3]305;306; X64-LABEL: test_int_x86_avx512_mask3_vfmaddsub_ps_512:307; X64: # %bb.0:308; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]309; X64-NEXT: vfmaddsub231ps %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0xb6,0xd1]310; X64-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) +/- zmm2311; X64-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]312; X64-NEXT: retq # encoding: [0xc3]313 %1 = call <16 x float> @llvm.fma.v16f32(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2)314 %2 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %x2315 %3 = call <16 x float> @llvm.fma.v16f32(<16 x float> %x0, <16 x float> %x1, <16 x float> %2)316 %4 = shufflevector <16 x float> %3, <16 x float> %1, <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>317 %5 = bitcast i16 %x3 to <16 x i1>318 %6 = select <16 x i1> %5, <16 x float> %4, <16 x float> %x2319 ret <16 x float> %6320}321 322define <16 x float>@test_int_x86_avx512_maskz_vfmaddsub_ps_512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3){323; X86-LABEL: test_int_x86_avx512_maskz_vfmaddsub_ps_512:324; X86: # %bb.0:325; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]326; X86-NEXT: vfmaddsub213ps %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xc9,0xa6,0xc2]327; X86-NEXT: # zmm0 {%k1} {z} = (zmm1 * zmm0) +/- zmm2328; X86-NEXT: retl # encoding: [0xc3]329;330; X64-LABEL: test_int_x86_avx512_maskz_vfmaddsub_ps_512:331; X64: # %bb.0:332; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]333; X64-NEXT: vfmaddsub213ps %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xc9,0xa6,0xc2]334; X64-NEXT: # zmm0 {%k1} {z} = (zmm1 * zmm0) +/- zmm2335; X64-NEXT: retq # encoding: [0xc3]336 %1 = call <16 x float> @llvm.fma.v16f32(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2)337 %2 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %x2338 %3 = call <16 x float> @llvm.fma.v16f32(<16 x float> %x0, <16 x float> %x1, <16 x float> %2)339 %4 = shufflevector <16 x float> %3, <16 x float> %1, <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>340 %5 = bitcast i16 %x3 to <16 x i1>341 %6 = select <16 x i1> %5, <16 x float> %4, <16 x float> zeroinitializer342 ret <16 x float> %6343}344 345define <8 x double>@test_int_x86_avx512_mask3_vfmsubadd_pd_512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3){346; X86-LABEL: test_int_x86_avx512_mask3_vfmsubadd_pd_512:347; X86: # %bb.0:348; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]349; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]350; X86-NEXT: vfmsubadd231pd %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0xb7,0xd1]351; X86-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) -/+ zmm2352; X86-NEXT: vmovapd %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]353; X86-NEXT: retl # encoding: [0xc3]354;355; X64-LABEL: test_int_x86_avx512_mask3_vfmsubadd_pd_512:356; X64: # %bb.0:357; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]358; X64-NEXT: vfmsubadd231pd %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0xb7,0xd1]359; X64-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) -/+ zmm2360; X64-NEXT: vmovapd %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]361; X64-NEXT: retq # encoding: [0xc3]362 %1 = call <8 x double> @llvm.fma.v8f64(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2)363 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %x2364 %3 = call <8 x double> @llvm.fma.v8f64(<8 x double> %x0, <8 x double> %x1, <8 x double> %2)365 %4 = shufflevector <8 x double> %1, <8 x double> %3, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>366 %5 = bitcast i8 %x3 to <8 x i1>367 %6 = select <8 x i1> %5, <8 x double> %4, <8 x double> %x2368 ret <8 x double> %6369}370 371define <16 x float>@test_int_x86_avx512_mask3_vfmsubadd_ps_512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3){372; X86-LABEL: test_int_x86_avx512_mask3_vfmsubadd_ps_512:373; X86: # %bb.0:374; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]375; X86-NEXT: vfmsubadd231ps %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0xb7,0xd1]376; X86-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) -/+ zmm2377; X86-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]378; X86-NEXT: retl # encoding: [0xc3]379;380; X64-LABEL: test_int_x86_avx512_mask3_vfmsubadd_ps_512:381; X64: # %bb.0:382; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]383; X64-NEXT: vfmsubadd231ps %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0xb7,0xd1]384; X64-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) -/+ zmm2385; X64-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]386; X64-NEXT: retq # encoding: [0xc3]387 %1 = call <16 x float> @llvm.fma.v16f32(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2)388 %2 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %x2389 %3 = call <16 x float> @llvm.fma.v16f32(<16 x float> %x0, <16 x float> %x1, <16 x float> %2)390 %4 = shufflevector <16 x float> %1, <16 x float> %3, <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>391 %5 = bitcast i16 %x3 to <16 x i1>392 %6 = select <16 x i1> %5, <16 x float> %4, <16 x float> %x2393 ret <16 x float> %6394}395 396define <16 x float> @test_mask_round_vfmadd512_ps_rrb_rne(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i16 %mask) {397; X86-LABEL: test_mask_round_vfmadd512_ps_rrb_rne:398; X86: # %bb.0:399; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]400; X86-NEXT: vfmadd132ps {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x19,0x98,0xc1]401; X86-NEXT: retl # encoding: [0xc3]402;403; X64-LABEL: test_mask_round_vfmadd512_ps_rrb_rne:404; X64: # %bb.0:405; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]406; X64-NEXT: vfmadd132ps {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x19,0x98,0xc1]407; X64-NEXT: retq # encoding: [0xc3]408 %res = call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i32 8) nounwind409 %bc = bitcast i16 %mask to <16 x i1>410 %sel = select <16 x i1> %bc, <16 x float> %res, <16 x float> %a0411 ret <16 x float> %sel412}413 414define <16 x float> @test_mask_round_vfmadd512_ps_rrb_rtn(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i16 %mask) {415; X86-LABEL: test_mask_round_vfmadd512_ps_rrb_rtn:416; X86: # %bb.0:417; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]418; X86-NEXT: vfmadd132ps {rd-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x39,0x98,0xc1]419; X86-NEXT: retl # encoding: [0xc3]420;421; X64-LABEL: test_mask_round_vfmadd512_ps_rrb_rtn:422; X64: # %bb.0:423; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]424; X64-NEXT: vfmadd132ps {rd-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x39,0x98,0xc1]425; X64-NEXT: retq # encoding: [0xc3]426 %res = call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i32 9) nounwind427 %bc = bitcast i16 %mask to <16 x i1>428 %sel = select <16 x i1> %bc, <16 x float> %res, <16 x float> %a0429 ret <16 x float> %sel430}431 432define <16 x float> @test_mask_round_vfmadd512_ps_rrb_rtp(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i16 %mask) {433; X86-LABEL: test_mask_round_vfmadd512_ps_rrb_rtp:434; X86: # %bb.0:435; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]436; X86-NEXT: vfmadd132ps {ru-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x59,0x98,0xc1]437; X86-NEXT: retl # encoding: [0xc3]438;439; X64-LABEL: test_mask_round_vfmadd512_ps_rrb_rtp:440; X64: # %bb.0:441; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]442; X64-NEXT: vfmadd132ps {ru-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x59,0x98,0xc1]443; X64-NEXT: retq # encoding: [0xc3]444 %res = call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i32 10) nounwind445 %bc = bitcast i16 %mask to <16 x i1>446 %sel = select <16 x i1> %bc, <16 x float> %res, <16 x float> %a0447 ret <16 x float> %sel448}449 450define <16 x float> @test_mask_round_vfmadd512_ps_rrb_rtz(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i16 %mask) {451; X86-LABEL: test_mask_round_vfmadd512_ps_rrb_rtz:452; X86: # %bb.0:453; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]454; X86-NEXT: vfmadd132ps {rz-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x79,0x98,0xc1]455; X86-NEXT: retl # encoding: [0xc3]456;457; X64-LABEL: test_mask_round_vfmadd512_ps_rrb_rtz:458; X64: # %bb.0:459; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]460; X64-NEXT: vfmadd132ps {rz-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x79,0x98,0xc1]461; X64-NEXT: retq # encoding: [0xc3]462 %res = call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i32 11) nounwind463 %bc = bitcast i16 %mask to <16 x i1>464 %sel = select <16 x i1> %bc, <16 x float> %res, <16 x float> %a0465 ret <16 x float> %sel466}467 468define <16 x float> @test_mask_round_vfmadd512_ps_rrb_current(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i16 %mask) {469; X86-LABEL: test_mask_round_vfmadd512_ps_rrb_current:470; X86: # %bb.0:471; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]472; X86-NEXT: vfmadd132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x98,0xc1]473; X86-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) + zmm2474; X86-NEXT: retl # encoding: [0xc3]475;476; X64-LABEL: test_mask_round_vfmadd512_ps_rrb_current:477; X64: # %bb.0:478; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]479; X64-NEXT: vfmadd132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x98,0xc1]480; X64-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) + zmm2481; X64-NEXT: retq # encoding: [0xc3]482 %res = call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i32 4) nounwind483 %bc = bitcast i16 %mask to <16 x i1>484 %sel = select <16 x i1> %bc, <16 x float> %res, <16 x float> %a0485 ret <16 x float> %sel486}487 488define <16 x float> @test_mask_round_vfmadd512_ps_rrbz_rne(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {489; CHECK-LABEL: test_mask_round_vfmadd512_ps_rrbz_rne:490; CHECK: # %bb.0:491; CHECK-NEXT: vfmadd213ps {rn-sae}, %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0x75,0x18,0xa8,0xc2]492; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]493 %res = call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i32 8) nounwind494 ret <16 x float> %res495}496 497define <16 x float> @test_mask_round_vfmadd512_ps_rrbz_rtn(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {498; CHECK-LABEL: test_mask_round_vfmadd512_ps_rrbz_rtn:499; CHECK: # %bb.0:500; CHECK-NEXT: vfmadd213ps {rd-sae}, %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0x75,0x38,0xa8,0xc2]501; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]502 %res = call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i32 9) nounwind503 ret <16 x float> %res504}505 506define <16 x float> @test_mask_round_vfmadd512_ps_rrbz_rtp(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {507; CHECK-LABEL: test_mask_round_vfmadd512_ps_rrbz_rtp:508; CHECK: # %bb.0:509; CHECK-NEXT: vfmadd213ps {ru-sae}, %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0x75,0x58,0xa8,0xc2]510; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]511 %res = call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i32 10) nounwind512 ret <16 x float> %res513}514 515define <16 x float> @test_mask_round_vfmadd512_ps_rrbz_rtz(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {516; CHECK-LABEL: test_mask_round_vfmadd512_ps_rrbz_rtz:517; CHECK: # %bb.0:518; CHECK-NEXT: vfmadd213ps {rz-sae}, %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0x75,0x78,0xa8,0xc2]519; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]520 %res = call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i32 11) nounwind521 ret <16 x float> %res522}523 524define <16 x float> @test_mask_round_vfmadd512_ps_rrbz_current(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {525; CHECK-LABEL: test_mask_round_vfmadd512_ps_rrbz_current:526; CHECK: # %bb.0:527; CHECK-NEXT: vfmadd213ps %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0x75,0x48,0xa8,0xc2]528; CHECK-NEXT: # zmm0 = (zmm1 * zmm0) + zmm2529; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]530 %res = call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, i32 4) nounwind531 ret <16 x float> %res532}533 534define <8 x double>@test_int_x86_avx512_mask3_vfmsub_pd_512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3){535; X86-LABEL: test_int_x86_avx512_mask3_vfmsub_pd_512:536; X86: # %bb.0:537; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]538; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]539; X86-NEXT: vfmsub231pd %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0xba,0xd1]540; X86-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) - zmm2541; X86-NEXT: vmovapd %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]542; X86-NEXT: retl # encoding: [0xc3]543;544; X64-LABEL: test_int_x86_avx512_mask3_vfmsub_pd_512:545; X64: # %bb.0:546; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]547; X64-NEXT: vfmsub231pd %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0xba,0xd1]548; X64-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) - zmm2549; X64-NEXT: vmovapd %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]550; X64-NEXT: retq # encoding: [0xc3]551 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %x2552 %2 = call <8 x double> @llvm.fma.v8f64(<8 x double> %x0, <8 x double> %x1, <8 x double> %1)553 %3 = bitcast i8 %x3 to <8 x i1>554 %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %x2555 ret <8 x double> %4556}557 558define <16 x float>@test_int_x86_avx512_mask3_vfmsub_ps_512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3){559; X86-LABEL: test_int_x86_avx512_mask3_vfmsub_ps_512:560; X86: # %bb.0:561; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]562; X86-NEXT: vfmsub231ps %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0xba,0xd1]563; X86-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) - zmm2564; X86-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]565; X86-NEXT: retl # encoding: [0xc3]566;567; X64-LABEL: test_int_x86_avx512_mask3_vfmsub_ps_512:568; X64: # %bb.0:569; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]570; X64-NEXT: vfmsub231ps %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0xba,0xd1]571; X64-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) - zmm2572; X64-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]573; X64-NEXT: retq # encoding: [0xc3]574 %1 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %x2575 %2 = call <16 x float> @llvm.fma.v16f32(<16 x float> %x0, <16 x float> %x1, <16 x float> %1)576 %3 = bitcast i16 %x3 to <16 x i1>577 %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %x2578 ret <16 x float> %4579}580 581define <8 x double> @test_mask_round_vfmadd512_pd_rrb_rne(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i8 %mask) {582; X86-LABEL: test_mask_round_vfmadd512_pd_rrb_rne:583; X86: # %bb.0:584; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]585; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]586; X86-NEXT: vfmadd132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x19,0x98,0xc1]587; X86-NEXT: retl # encoding: [0xc3]588;589; X64-LABEL: test_mask_round_vfmadd512_pd_rrb_rne:590; X64: # %bb.0:591; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]592; X64-NEXT: vfmadd132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x19,0x98,0xc1]593; X64-NEXT: retq # encoding: [0xc3]594 %res = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i32 8) nounwind595 %bc = bitcast i8 %mask to <8 x i1>596 %sel = select <8 x i1> %bc, <8 x double> %res, <8 x double> %a0597 ret <8 x double> %sel598}599 600define <8 x double> @test_mask_round_vfmadd512_pd_rrb_rtn(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i8 %mask) {601; X86-LABEL: test_mask_round_vfmadd512_pd_rrb_rtn:602; X86: # %bb.0:603; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]604; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]605; X86-NEXT: vfmadd132pd {rd-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x39,0x98,0xc1]606; X86-NEXT: retl # encoding: [0xc3]607;608; X64-LABEL: test_mask_round_vfmadd512_pd_rrb_rtn:609; X64: # %bb.0:610; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]611; X64-NEXT: vfmadd132pd {rd-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x39,0x98,0xc1]612; X64-NEXT: retq # encoding: [0xc3]613 %res = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i32 9) nounwind614 %bc = bitcast i8 %mask to <8 x i1>615 %sel = select <8 x i1> %bc, <8 x double> %res, <8 x double> %a0616 ret <8 x double> %sel617}618 619define <8 x double> @test_mask_round_vfmadd512_pd_rrb_rtp(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i8 %mask) {620; X86-LABEL: test_mask_round_vfmadd512_pd_rrb_rtp:621; X86: # %bb.0:622; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]623; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]624; X86-NEXT: vfmadd132pd {ru-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x59,0x98,0xc1]625; X86-NEXT: retl # encoding: [0xc3]626;627; X64-LABEL: test_mask_round_vfmadd512_pd_rrb_rtp:628; X64: # %bb.0:629; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]630; X64-NEXT: vfmadd132pd {ru-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x59,0x98,0xc1]631; X64-NEXT: retq # encoding: [0xc3]632 %res = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i32 10) nounwind633 %bc = bitcast i8 %mask to <8 x i1>634 %sel = select <8 x i1> %bc, <8 x double> %res, <8 x double> %a0635 ret <8 x double> %sel636}637 638define <8 x double> @test_mask_round_vfmadd512_pd_rrb_rtz(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i8 %mask) {639; X86-LABEL: test_mask_round_vfmadd512_pd_rrb_rtz:640; X86: # %bb.0:641; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]642; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]643; X86-NEXT: vfmadd132pd {rz-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x79,0x98,0xc1]644; X86-NEXT: retl # encoding: [0xc3]645;646; X64-LABEL: test_mask_round_vfmadd512_pd_rrb_rtz:647; X64: # %bb.0:648; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]649; X64-NEXT: vfmadd132pd {rz-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x79,0x98,0xc1]650; X64-NEXT: retq # encoding: [0xc3]651 %res = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i32 11) nounwind652 %bc = bitcast i8 %mask to <8 x i1>653 %sel = select <8 x i1> %bc, <8 x double> %res, <8 x double> %a0654 ret <8 x double> %sel655}656 657define <8 x double> @test_mask_round_vfmadd512_pd_rrb_current(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i8 %mask) {658; X86-LABEL: test_mask_round_vfmadd512_pd_rrb_current:659; X86: # %bb.0:660; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]661; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]662; X86-NEXT: vfmadd132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x98,0xc1]663; X86-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) + zmm2664; X86-NEXT: retl # encoding: [0xc3]665;666; X64-LABEL: test_mask_round_vfmadd512_pd_rrb_current:667; X64: # %bb.0:668; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]669; X64-NEXT: vfmadd132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x98,0xc1]670; X64-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) + zmm2671; X64-NEXT: retq # encoding: [0xc3]672 %res = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i32 4) nounwind673 %bc = bitcast i8 %mask to <8 x i1>674 %sel = select <8 x i1> %bc, <8 x double> %res, <8 x double> %a0675 ret <8 x double> %sel676}677 678define <8 x double> @test_mask_round_vfmadd512_pd_rrbz_rne(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {679; CHECK-LABEL: test_mask_round_vfmadd512_pd_rrbz_rne:680; CHECK: # %bb.0:681; CHECK-NEXT: vfmadd213pd {rn-sae}, %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x18,0xa8,0xc2]682; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]683 %res = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i32 8) nounwind684 ret <8 x double> %res685}686 687define <8 x double> @test_mask_round_vfmadd512_pd_rrbz_rtn(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {688; CHECK-LABEL: test_mask_round_vfmadd512_pd_rrbz_rtn:689; CHECK: # %bb.0:690; CHECK-NEXT: vfmadd213pd {rd-sae}, %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x38,0xa8,0xc2]691; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]692 %res = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i32 9) nounwind693 ret <8 x double> %res694}695 696define <8 x double> @test_mask_round_vfmadd512_pd_rrbz_rtp(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {697; CHECK-LABEL: test_mask_round_vfmadd512_pd_rrbz_rtp:698; CHECK: # %bb.0:699; CHECK-NEXT: vfmadd213pd {ru-sae}, %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x58,0xa8,0xc2]700; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]701 %res = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i32 10) nounwind702 ret <8 x double> %res703}704 705define <8 x double> @test_mask_round_vfmadd512_pd_rrbz_rtz(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {706; CHECK-LABEL: test_mask_round_vfmadd512_pd_rrbz_rtz:707; CHECK: # %bb.0:708; CHECK-NEXT: vfmadd213pd {rz-sae}, %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x78,0xa8,0xc2]709; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]710 %res = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i32 11) nounwind711 ret <8 x double> %res712}713 714define <8 x double> @test_mask_round_vfmadd512_pd_rrbz_current(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {715; CHECK-LABEL: test_mask_round_vfmadd512_pd_rrbz_current:716; CHECK: # %bb.0:717; CHECK-NEXT: vfmadd213pd %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x48,0xa8,0xc2]718; CHECK-NEXT: # zmm0 = (zmm1 * zmm0) + zmm2719; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]720 %res = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i32 4) nounwind721 ret <8 x double> %res722}723 724define <8 x double>@test_int_x86_avx512_mask_vfmadd_pd_512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3){725; X86-LABEL: test_int_x86_avx512_mask_vfmadd_pd_512:726; X86: # %bb.0:727; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]728; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]729; X86-NEXT: vfmadd132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x98,0xc1]730; X86-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) + zmm2731; X86-NEXT: retl # encoding: [0xc3]732;733; X64-LABEL: test_int_x86_avx512_mask_vfmadd_pd_512:734; X64: # %bb.0:735; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]736; X64-NEXT: vfmadd132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x98,0xc1]737; X64-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) + zmm2738; X64-NEXT: retq # encoding: [0xc3]739 %res = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i32 4)740 %bc = bitcast i8 %x3 to <8 x i1>741 %sel = select <8 x i1> %bc, <8 x double> %res, <8 x double> %x0742 ret <8 x double> %sel743}744 745define <8 x double>@test_int_x86_avx512_mask3_vfmadd_pd_512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3){746; X86-LABEL: test_int_x86_avx512_mask3_vfmadd_pd_512:747; X86: # %bb.0:748; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]749; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]750; X86-NEXT: vfmadd231pd %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0xb8,0xd1]751; X86-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) + zmm2752; X86-NEXT: vmovapd %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]753; X86-NEXT: retl # encoding: [0xc3]754;755; X64-LABEL: test_int_x86_avx512_mask3_vfmadd_pd_512:756; X64: # %bb.0:757; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]758; X64-NEXT: vfmadd231pd %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0xb8,0xd1]759; X64-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) + zmm2760; X64-NEXT: vmovapd %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]761; X64-NEXT: retq # encoding: [0xc3]762 %1 = call <8 x double> @llvm.fma.v8f64(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2)763 %2 = bitcast i8 %x3 to <8 x i1>764 %3 = select <8 x i1> %2, <8 x double> %1, <8 x double> %x2765 ret <8 x double> %3766}767 768define <8 x double>@test_int_x86_avx512_maskz_vfmadd_pd_512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3){769; X86-LABEL: test_int_x86_avx512_maskz_vfmadd_pd_512:770; X86: # %bb.0:771; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]772; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]773; X86-NEXT: vfmadd213pd %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xc9,0xa8,0xc2]774; X86-NEXT: # zmm0 {%k1} {z} = (zmm1 * zmm0) + zmm2775; X86-NEXT: retl # encoding: [0xc3]776;777; X64-LABEL: test_int_x86_avx512_maskz_vfmadd_pd_512:778; X64: # %bb.0:779; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]780; X64-NEXT: vfmadd213pd %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xc9,0xa8,0xc2]781; X64-NEXT: # zmm0 {%k1} {z} = (zmm1 * zmm0) + zmm2782; X64-NEXT: retq # encoding: [0xc3]783 %1 = call <8 x double> @llvm.fma.v8f64(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2)784 %2 = bitcast i8 %x3 to <8 x i1>785 %3 = select <8 x i1> %2, <8 x double> %1, <8 x double> zeroinitializer786 ret <8 x double> %3787}788 789define <16 x float>@test_int_x86_avx512_mask_vfmadd_ps_512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3){790; X86-LABEL: test_int_x86_avx512_mask_vfmadd_ps_512:791; X86: # %bb.0:792; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]793; X86-NEXT: vfmadd132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x98,0xc1]794; X86-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) + zmm2795; X86-NEXT: retl # encoding: [0xc3]796;797; X64-LABEL: test_int_x86_avx512_mask_vfmadd_ps_512:798; X64: # %bb.0:799; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]800; X64-NEXT: vfmadd132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x98,0xc1]801; X64-NEXT: # zmm0 {%k1} = (zmm0 * zmm1) + zmm2802; X64-NEXT: retq # encoding: [0xc3]803 %res = call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i32 4)804 %bc = bitcast i16 %x3 to <16 x i1>805 %sel = select <16 x i1> %bc, <16 x float> %res, <16 x float> %x0806 ret <16 x float> %sel807}808 809define <16 x float>@test_int_x86_avx512_mask3_vfmadd_ps_512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3){810; X86-LABEL: test_int_x86_avx512_mask3_vfmadd_ps_512:811; X86: # %bb.0:812; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]813; X86-NEXT: vfmadd231ps %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0xb8,0xd1]814; X86-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) + zmm2815; X86-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]816; X86-NEXT: retl # encoding: [0xc3]817;818; X64-LABEL: test_int_x86_avx512_mask3_vfmadd_ps_512:819; X64: # %bb.0:820; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]821; X64-NEXT: vfmadd231ps %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0xb8,0xd1]822; X64-NEXT: # zmm2 {%k1} = (zmm0 * zmm1) + zmm2823; X64-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]824; X64-NEXT: retq # encoding: [0xc3]825 %1 = call <16 x float> @llvm.fma.v16f32(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2)826 %2 = bitcast i16 %x3 to <16 x i1>827 %3 = select <16 x i1> %2, <16 x float> %1, <16 x float> %x2828 ret <16 x float> %3829}830 831define <16 x float> @test_int_x86_avx512_maskz_vfmadd_ps_512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3) {832; X86-LABEL: test_int_x86_avx512_maskz_vfmadd_ps_512:833; X86: # %bb.0:834; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]835; X86-NEXT: vfmadd213ps %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xc9,0xa8,0xc2]836; X86-NEXT: # zmm0 {%k1} {z} = (zmm1 * zmm0) + zmm2837; X86-NEXT: retl # encoding: [0xc3]838;839; X64-LABEL: test_int_x86_avx512_maskz_vfmadd_ps_512:840; X64: # %bb.0:841; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]842; X64-NEXT: vfmadd213ps %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xc9,0xa8,0xc2]843; X64-NEXT: # zmm0 {%k1} {z} = (zmm1 * zmm0) + zmm2844; X64-NEXT: retq # encoding: [0xc3]845 %1 = call <16 x float> @llvm.fma.v16f32(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2)846 %2 = bitcast i16 %x3 to <16 x i1>847 %3 = select <16 x i1> %2, <16 x float> %1, <16 x float> zeroinitializer848 ret <16 x float> %3849}850 851define <8 x double> @test_mask_round_vfnmsub512_pd_rrb_rne(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i8 %mask) {852; X86-LABEL: test_mask_round_vfnmsub512_pd_rrb_rne:853; X86: # %bb.0:854; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]855; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]856; X86-NEXT: vfnmsub132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x19,0x9e,0xc1]857; X86-NEXT: retl # encoding: [0xc3]858;859; X64-LABEL: test_mask_round_vfnmsub512_pd_rrb_rne:860; X64: # %bb.0:861; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]862; X64-NEXT: vfnmsub132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x19,0x9e,0xc1]863; X64-NEXT: retq # encoding: [0xc3]864 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a1865 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a2866 %3 = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %1, <8 x double> %2, i32 8)867 %4 = bitcast i8 %mask to <8 x i1>868 %5 = select <8 x i1> %4, <8 x double> %3, <8 x double> %a0869 ret <8 x double> %5870}871 872define <8 x double> @test_mask_round_vfnmsub512_pd_rrb_rtn(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i8 %mask) {873; X86-LABEL: test_mask_round_vfnmsub512_pd_rrb_rtn:874; X86: # %bb.0:875; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]876; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]877; X86-NEXT: vfnmsub132pd {rd-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x39,0x9e,0xc1]878; X86-NEXT: retl # encoding: [0xc3]879;880; X64-LABEL: test_mask_round_vfnmsub512_pd_rrb_rtn:881; X64: # %bb.0:882; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]883; X64-NEXT: vfnmsub132pd {rd-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x39,0x9e,0xc1]884; X64-NEXT: retq # encoding: [0xc3]885 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a1886 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a2887 %3 = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %1, <8 x double> %2, i32 9)888 %4 = bitcast i8 %mask to <8 x i1>889 %5 = select <8 x i1> %4, <8 x double> %3, <8 x double> %a0890 ret <8 x double> %5891}892 893define <8 x double> @test_mask_round_vfnmsub512_pd_rrb_rtp(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i8 %mask) {894; X86-LABEL: test_mask_round_vfnmsub512_pd_rrb_rtp:895; X86: # %bb.0:896; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]897; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]898; X86-NEXT: vfnmsub132pd {ru-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x59,0x9e,0xc1]899; X86-NEXT: retl # encoding: [0xc3]900;901; X64-LABEL: test_mask_round_vfnmsub512_pd_rrb_rtp:902; X64: # %bb.0:903; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]904; X64-NEXT: vfnmsub132pd {ru-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x59,0x9e,0xc1]905; X64-NEXT: retq # encoding: [0xc3]906 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a1907 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a2908 %3 = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %1, <8 x double> %2, i32 10)909 %4 = bitcast i8 %mask to <8 x i1>910 %5 = select <8 x i1> %4, <8 x double> %3, <8 x double> %a0911 ret <8 x double> %5912}913 914define <8 x double> @test_mask_round_vfnmsub512_pd_rrb_rtz(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i8 %mask) {915; X86-LABEL: test_mask_round_vfnmsub512_pd_rrb_rtz:916; X86: # %bb.0:917; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]918; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]919; X86-NEXT: vfnmsub132pd {rz-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x79,0x9e,0xc1]920; X86-NEXT: retl # encoding: [0xc3]921;922; X64-LABEL: test_mask_round_vfnmsub512_pd_rrb_rtz:923; X64: # %bb.0:924; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]925; X64-NEXT: vfnmsub132pd {rz-sae}, %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x79,0x9e,0xc1]926; X64-NEXT: retq # encoding: [0xc3]927 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a1928 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a2929 %3 = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %1, <8 x double> %2, i32 11)930 %4 = bitcast i8 %mask to <8 x i1>931 %5 = select <8 x i1> %4, <8 x double> %3, <8 x double> %a0932 ret <8 x double> %5933}934 935define <8 x double> @test_mask_round_vfnmsub512_pd_rrb_current(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2, i8 %mask) {936; X86-LABEL: test_mask_round_vfnmsub512_pd_rrb_current:937; X86: # %bb.0:938; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]939; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]940; X86-NEXT: vfnmsub132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x9e,0xc1]941; X86-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) - zmm2942; X86-NEXT: retl # encoding: [0xc3]943;944; X64-LABEL: test_mask_round_vfnmsub512_pd_rrb_current:945; X64: # %bb.0:946; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]947; X64-NEXT: vfnmsub132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x9e,0xc1]948; X64-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) - zmm2949; X64-NEXT: retq # encoding: [0xc3]950 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a1951 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a2952 %3 = call <8 x double> @llvm.fma.v8f64(<8 x double> %a0, <8 x double> %1, <8 x double> %2)953 %4 = bitcast i8 %mask to <8 x i1>954 %5 = select <8 x i1> %4, <8 x double> %3, <8 x double> %a0955 ret <8 x double> %5956}957 958define <8 x double> @test_mask_round_vfnmsub512_pd_rrbz_rne(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {959; CHECK-LABEL: test_mask_round_vfnmsub512_pd_rrbz_rne:960; CHECK: # %bb.0:961; CHECK-NEXT: vfnmsub213pd {rn-sae}, %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x18,0xae,0xc2]962; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]963 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a1964 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a2965 %3 = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %1, <8 x double> %2, i32 8)966 ret <8 x double> %3967}968 969define <8 x double> @test_mask_round_vfnmsub512_pd_rrbz_rtn(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {970; CHECK-LABEL: test_mask_round_vfnmsub512_pd_rrbz_rtn:971; CHECK: # %bb.0:972; CHECK-NEXT: vfnmsub213pd {rd-sae}, %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x38,0xae,0xc2]973; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]974 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a1975 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a2976 %3 = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %1, <8 x double> %2, i32 9)977 ret <8 x double> %3978}979 980define <8 x double> @test_mask_round_vfnmsub512_pd_rrbz_rtp(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {981; CHECK-LABEL: test_mask_round_vfnmsub512_pd_rrbz_rtp:982; CHECK: # %bb.0:983; CHECK-NEXT: vfnmsub213pd {ru-sae}, %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x58,0xae,0xc2]984; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]985 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a1986 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a2987 %3 = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %1, <8 x double> %2, i32 10)988 ret <8 x double> %3989}990 991define <8 x double> @test_mask_round_vfnmsub512_pd_rrbz_rtz(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {992; CHECK-LABEL: test_mask_round_vfnmsub512_pd_rrbz_rtz:993; CHECK: # %bb.0:994; CHECK-NEXT: vfnmsub213pd {rz-sae}, %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x78,0xae,0xc2]995; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]996 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a1997 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a2998 %3 = call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %a0, <8 x double> %1, <8 x double> %2, i32 11)999 ret <8 x double> %31000}1001 1002define <8 x double> @test_mask_round_vfnmsub512_pd_rrbz_current(<8 x double> %a0, <8 x double> %a1, <8 x double> %a2) {1003; CHECK-LABEL: test_mask_round_vfnmsub512_pd_rrbz_current:1004; CHECK: # %bb.0:1005; CHECK-NEXT: vfnmsub213pd %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x48,0xae,0xc2]1006; CHECK-NEXT: # zmm0 = -(zmm1 * zmm0) - zmm21007; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1008 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a11009 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a21010 %3 = call <8 x double> @llvm.fma.v8f64(<8 x double> %a0, <8 x double> %1, <8 x double> %2)1011 ret <8 x double> %31012}1013 1014define <8 x double>@test_int_x86_avx512_mask_vfnmsub_pd_512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3){1015; X86-LABEL: test_int_x86_avx512_mask_vfnmsub_pd_512:1016; X86: # %bb.0:1017; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1018; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1019; X86-NEXT: vfnmsub132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x9e,0xc1]1020; X86-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) - zmm21021; X86-NEXT: retl # encoding: [0xc3]1022;1023; X64-LABEL: test_int_x86_avx512_mask_vfnmsub_pd_512:1024; X64: # %bb.0:1025; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1026; X64-NEXT: vfnmsub132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x9e,0xc1]1027; X64-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) - zmm21028; X64-NEXT: retq # encoding: [0xc3]1029 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %x11030 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %x21031 %3 = call <8 x double> @llvm.fma.v8f64(<8 x double> %x0, <8 x double> %1, <8 x double> %2)1032 %4 = bitcast i8 %x3 to <8 x i1>1033 %5 = select <8 x i1> %4, <8 x double> %3, <8 x double> %x01034 ret <8 x double> %51035}1036 1037define <8 x double>@test_int_x86_avx512_mask3_vfnmsub_pd_512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3){1038; X86-LABEL: test_int_x86_avx512_mask3_vfnmsub_pd_512:1039; X86: # %bb.0:1040; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1041; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1042; X86-NEXT: vfnmsub231pd %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0xbe,0xd1]1043; X86-NEXT: # zmm2 {%k1} = -(zmm0 * zmm1) - zmm21044; X86-NEXT: vmovapd %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1045; X86-NEXT: retl # encoding: [0xc3]1046;1047; X64-LABEL: test_int_x86_avx512_mask3_vfnmsub_pd_512:1048; X64: # %bb.0:1049; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1050; X64-NEXT: vfnmsub231pd %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0xbe,0xd1]1051; X64-NEXT: # zmm2 {%k1} = -(zmm0 * zmm1) - zmm21052; X64-NEXT: vmovapd %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1053; X64-NEXT: retq # encoding: [0xc3]1054 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %x01055 %2 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %x21056 %3 = call <8 x double> @llvm.fma.v8f64(<8 x double> %1, <8 x double> %x1, <8 x double> %2)1057 %4 = bitcast i8 %x3 to <8 x i1>1058 %5 = select <8 x i1> %4, <8 x double> %3, <8 x double> %x21059 ret <8 x double> %51060}1061 1062define <16 x float>@test_int_x86_avx512_mask_vfnmsub_ps_512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3){1063; X86-LABEL: test_int_x86_avx512_mask_vfnmsub_ps_512:1064; X86: # %bb.0:1065; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1066; X86-NEXT: vfnmsub132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x9e,0xc1]1067; X86-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) - zmm21068; X86-NEXT: retl # encoding: [0xc3]1069;1070; X64-LABEL: test_int_x86_avx512_mask_vfnmsub_ps_512:1071; X64: # %bb.0:1072; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1073; X64-NEXT: vfnmsub132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x9e,0xc1]1074; X64-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) - zmm21075; X64-NEXT: retq # encoding: [0xc3]1076 %1 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %x11077 %2 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %x21078 %3 = call <16 x float> @llvm.fma.v16f32(<16 x float> %x0, <16 x float> %1, <16 x float> %2)1079 %4 = bitcast i16 %x3 to <16 x i1>1080 %5 = select <16 x i1> %4, <16 x float> %3, <16 x float> %x01081 ret <16 x float> %51082}1083 1084define <16 x float>@test_int_x86_avx512_mask3_vfnmsub_ps_512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3){1085; X86-LABEL: test_int_x86_avx512_mask3_vfnmsub_ps_512:1086; X86: # %bb.0:1087; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1088; X86-NEXT: vfnmsub231ps %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0xbe,0xd1]1089; X86-NEXT: # zmm2 {%k1} = -(zmm0 * zmm1) - zmm21090; X86-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1091; X86-NEXT: retl # encoding: [0xc3]1092;1093; X64-LABEL: test_int_x86_avx512_mask3_vfnmsub_ps_512:1094; X64: # %bb.0:1095; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1096; X64-NEXT: vfnmsub231ps %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0xbe,0xd1]1097; X64-NEXT: # zmm2 {%k1} = -(zmm0 * zmm1) - zmm21098; X64-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1099; X64-NEXT: retq # encoding: [0xc3]1100 %1 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %x01101 %2 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %x21102 %3 = call <16 x float> @llvm.fma.v16f32(<16 x float> %1, <16 x float> %x1, <16 x float> %2)1103 %4 = bitcast i16 %x3 to <16 x i1>1104 %5 = select <16 x i1> %4, <16 x float> %3, <16 x float> %x21105 ret <16 x float> %51106}1107 1108define <8 x double>@test_int_x86_avx512_mask_vfnmadd_pd_512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3){1109; X86-LABEL: test_int_x86_avx512_mask_vfnmadd_pd_512:1110; X86: # %bb.0:1111; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1112; X86-NEXT: kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1113; X86-NEXT: vfnmadd132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x9c,0xc1]1114; X86-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) + zmm21115; X86-NEXT: retl # encoding: [0xc3]1116;1117; X64-LABEL: test_int_x86_avx512_mask_vfnmadd_pd_512:1118; X64: # %bb.0:1119; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1120; X64-NEXT: vfnmadd132pd %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x49,0x9c,0xc1]1121; X64-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) + zmm21122; X64-NEXT: retq # encoding: [0xc3]1123 %1 = fsub <8 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %x11124 %2 = call <8 x double> @llvm.fma.v8f64(<8 x double> %x0, <8 x double> %1, <8 x double> %x2)1125 %3 = bitcast i8 %x3 to <8 x i1>1126 %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %x01127 ret <8 x double> %41128}1129 1130define <16 x float>@test_int_x86_avx512_mask_vfnmadd_ps_512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3){1131; X86-LABEL: test_int_x86_avx512_mask_vfnmadd_ps_512:1132; X86: # %bb.0:1133; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1134; X86-NEXT: vfnmadd132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x9c,0xc1]1135; X86-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) + zmm21136; X86-NEXT: retl # encoding: [0xc3]1137;1138; X64-LABEL: test_int_x86_avx512_mask_vfnmadd_ps_512:1139; X64: # %bb.0:1140; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1141; X64-NEXT: vfnmadd132ps %zmm1, %zmm2, %zmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x49,0x9c,0xc1]1142; X64-NEXT: # zmm0 {%k1} = -(zmm0 * zmm1) + zmm21143; X64-NEXT: retq # encoding: [0xc3]1144 %1 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %x11145 %2 = call <16 x float> @llvm.fma.v16f32(<16 x float> %x0, <16 x float> %1, <16 x float> %x2)1146 %3 = bitcast i16 %x3 to <16 x i1>1147 %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %x01148 ret <16 x float> %41149}1150 1151; This test case used to crash due to combineFMA not bitcasting results of isFNEG.1152define <4 x float> @foo() {1153; CHECK-LABEL: foo:1154; CHECK: # %bb.0: # %entry1155; CHECK-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero1156; CHECK-NEXT: # EVEX TO VEX Compression encoding: [0xc5,0xfa,0x10,0x00]1157; CHECK-NEXT: vfmsub213ss {rd-sae}, %xmm0, %xmm0, %xmm0 # encoding: [0x62,0xf2,0x7d,0x38,0xab,0xc0]1158; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1159entry:1160 %0 = load <4 x float>, ptr undef, align 161161 %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %01162 %1 = extractelement <4 x float> %sub, i64 01163 %2 = call float @llvm.x86.avx512.vfmadd.f32(float undef, float undef, float %1, i32 9)1164 %3 = select i1 extractelement (<8 x i1> bitcast (<1 x i8> <i8 1> to <8 x i1>), i64 0), float %2, float undef1165 %4 = insertelement <4 x float> undef, float %3, i64 01166 ret <4 x float> %41167}1168 1169; Function Attrs: nounwind readnone1170declare float @llvm.x86.avx512.vfmadd.f32(float, float, float, i32)1171 1172declare <16 x float> @llvm.fma.v16f32(<16 x float>, <16 x float>, <16 x float>)1173declare <8 x double> @llvm.fma.v8f64(<8 x double>, <8 x double>, <8 x double>)1174