3543 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=+avx512f --show-mc-encoding | FileCheck %s --check-prefixes=CHECK,X863; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512f --show-mc-encoding | FileCheck %s --check-prefixes=CHECK,X644 5; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/avx512f-builtins.c6 7define <8 x double> @test_mm512_fmadd_round_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {8; CHECK-LABEL: test_mm512_fmadd_round_pd:9; CHECK: ## %bb.0: ## %entry10; CHECK-NEXT: vfmadd213pd {rn-sae}, %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0xf5,0x18,0xa8,0xc2]11; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]12entry:13 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i32 8)14 ret <8 x double> %015}16 17declare <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double>, <8 x double>, <8 x double>, i32) #118 19define <8 x double> @test_mm512_mask_fmadd_round_pd(<8 x double> %__A, i8 zeroext %__U, <8 x double> %__B, <8 x double> %__C) {20; X86-LABEL: test_mm512_mask_fmadd_round_pd:21; X86: ## %bb.0: ## %entry22; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]23; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]24; X86-NEXT: vfmadd132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x19,0x98,0xc1]25; X86-NEXT: retl ## encoding: [0xc3]26;27; X64-LABEL: test_mm512_mask_fmadd_round_pd:28; X64: ## %bb.0: ## %entry29; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]30; X64-NEXT: vfmadd132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x19,0x98,0xc1]31; X64-NEXT: retq ## encoding: [0xc3]32entry:33 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i32 8)34 %1 = bitcast i8 %__U to <8 x i1>35 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__A36 ret <8 x double> %237}38 39define <8 x double> @test_mm512_mask3_fmadd_round_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i8 zeroext %__U) {40; X86-LABEL: test_mm512_mask3_fmadd_round_pd:41; X86: ## %bb.0: ## %entry42; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]43; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]44; X86-NEXT: vfmadd231pd {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x19,0xb8,0xd1]45; X86-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]46; X86-NEXT: retl ## encoding: [0xc3]47;48; X64-LABEL: test_mm512_mask3_fmadd_round_pd:49; X64: ## %bb.0: ## %entry50; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]51; X64-NEXT: vfmadd231pd {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x19,0xb8,0xd1]52; X64-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]53; X64-NEXT: retq ## encoding: [0xc3]54entry:55 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i32 8)56 %1 = bitcast i8 %__U to <8 x i1>57 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__C58 ret <8 x double> %259}60 61define <8 x double> @test_mm512_maskz_fmadd_round_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {62; X86-LABEL: test_mm512_maskz_fmadd_round_pd:63; X86: ## %bb.0: ## %entry64; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]65; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]66; X86-NEXT: vfmadd213pd {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x99,0xa8,0xc2]67; X86-NEXT: retl ## encoding: [0xc3]68;69; X64-LABEL: test_mm512_maskz_fmadd_round_pd:70; X64: ## %bb.0: ## %entry71; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]72; X64-NEXT: vfmadd213pd {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x99,0xa8,0xc2]73; X64-NEXT: retq ## encoding: [0xc3]74entry:75 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i32 8)76 %1 = bitcast i8 %__U to <8 x i1>77 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> zeroinitializer78 ret <8 x double> %279}80 81define <8 x double> @test_mm512_fmsub_round_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {82; CHECK-LABEL: test_mm512_fmsub_round_pd:83; CHECK: ## %bb.0: ## %entry84; CHECK-NEXT: vfmsub213pd {rn-sae}, %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0xf5,0x18,0xaa,0xc2]85; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]86entry:87 %sub = 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>, %__C88 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub, i32 8)89 ret <8 x double> %090}91 92define <8 x double> @test_mm512_mask_fmsub_round_pd(<8 x double> %__A, i8 zeroext %__U, <8 x double> %__B, <8 x double> %__C) {93; X86-LABEL: test_mm512_mask_fmsub_round_pd:94; X86: ## %bb.0: ## %entry95; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]96; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]97; X86-NEXT: vfmsub132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x19,0x9a,0xc1]98; X86-NEXT: retl ## encoding: [0xc3]99;100; X64-LABEL: test_mm512_mask_fmsub_round_pd:101; X64: ## %bb.0: ## %entry102; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]103; X64-NEXT: vfmsub132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x19,0x9a,0xc1]104; X64-NEXT: retq ## encoding: [0xc3]105entry:106 %sub = 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>, %__C107 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub, i32 8)108 %1 = bitcast i8 %__U to <8 x i1>109 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__A110 ret <8 x double> %2111}112 113define <8 x double> @test_mm512_maskz_fmsub_round_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {114; X86-LABEL: test_mm512_maskz_fmsub_round_pd:115; X86: ## %bb.0: ## %entry116; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]117; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]118; X86-NEXT: vfmsub213pd {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x99,0xaa,0xc2]119; X86-NEXT: retl ## encoding: [0xc3]120;121; X64-LABEL: test_mm512_maskz_fmsub_round_pd:122; X64: ## %bb.0: ## %entry123; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]124; X64-NEXT: vfmsub213pd {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x99,0xaa,0xc2]125; X64-NEXT: retq ## encoding: [0xc3]126entry:127 %sub = 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>, %__C128 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub, i32 8)129 %1 = bitcast i8 %__U to <8 x i1>130 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> zeroinitializer131 ret <8 x double> %2132}133 134define <8 x double> @test_mm512_fnmadd_round_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {135; CHECK-LABEL: test_mm512_fnmadd_round_pd:136; CHECK: ## %bb.0: ## %entry137; CHECK-NEXT: vfnmadd213pd {rn-sae}, %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0xf5,0x18,0xac,0xc2]138; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]139entry:140 %sub = 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>, %__A141 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %sub, <8 x double> %__B, <8 x double> %__C, i32 8)142 ret <8 x double> %0143}144 145define <8 x double> @test_mm512_mask3_fnmadd_round_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i8 zeroext %__U) {146; X86-LABEL: test_mm512_mask3_fnmadd_round_pd:147; X86: ## %bb.0: ## %entry148; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]149; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]150; X86-NEXT: vfnmadd231pd {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x19,0xbc,0xd1]151; X86-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]152; X86-NEXT: retl ## encoding: [0xc3]153;154; X64-LABEL: test_mm512_mask3_fnmadd_round_pd:155; X64: ## %bb.0: ## %entry156; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]157; X64-NEXT: vfnmadd231pd {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x19,0xbc,0xd1]158; X64-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]159; X64-NEXT: retq ## encoding: [0xc3]160entry:161 %sub = 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>, %__A162 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %sub, <8 x double> %__B, <8 x double> %__C, i32 8)163 %1 = bitcast i8 %__U to <8 x i1>164 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__C165 ret <8 x double> %2166}167 168define <8 x double> @test_mm512_maskz_fnmadd_round_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {169; X86-LABEL: test_mm512_maskz_fnmadd_round_pd:170; X86: ## %bb.0: ## %entry171; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]172; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]173; X86-NEXT: vfnmadd213pd {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x99,0xac,0xc2]174; X86-NEXT: retl ## encoding: [0xc3]175;176; X64-LABEL: test_mm512_maskz_fnmadd_round_pd:177; X64: ## %bb.0: ## %entry178; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]179; X64-NEXT: vfnmadd213pd {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x99,0xac,0xc2]180; X64-NEXT: retq ## encoding: [0xc3]181entry:182 %sub = 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>, %__A183 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %sub, <8 x double> %__B, <8 x double> %__C, i32 8)184 %1 = bitcast i8 %__U to <8 x i1>185 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> zeroinitializer186 ret <8 x double> %2187}188 189define <8 x double> @test_mm512_fnmsub_round_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {190; CHECK-LABEL: test_mm512_fnmsub_round_pd:191; CHECK: ## %bb.0: ## %entry192; CHECK-NEXT: vfnmsub213pd {rn-sae}, %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0xf5,0x18,0xae,0xc2]193; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]194entry:195 %sub = 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>, %__A196 %sub1 = 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>, %__C197 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %sub, <8 x double> %__B, <8 x double> %sub1, i32 8)198 ret <8 x double> %0199}200 201define <8 x double> @test_mm512_maskz_fnmsub_round_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {202; X86-LABEL: test_mm512_maskz_fnmsub_round_pd:203; X86: ## %bb.0: ## %entry204; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]205; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]206; X86-NEXT: vfnmsub213pd {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x99,0xae,0xc2]207; X86-NEXT: retl ## encoding: [0xc3]208;209; X64-LABEL: test_mm512_maskz_fnmsub_round_pd:210; X64: ## %bb.0: ## %entry211; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]212; X64-NEXT: vfnmsub213pd {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x99,0xae,0xc2]213; X64-NEXT: retq ## encoding: [0xc3]214entry:215 %sub = 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>, %__A216 %sub1 = 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>, %__C217 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %sub, <8 x double> %__B, <8 x double> %sub1, i32 8)218 %1 = bitcast i8 %__U to <8 x i1>219 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> zeroinitializer220 ret <8 x double> %2221}222 223define <8 x double> @test_mm512_fmadd_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {224; CHECK-LABEL: test_mm512_fmadd_pd:225; CHECK: ## %bb.0: ## %entry226; CHECK-NEXT: vfmadd213pd %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0xf5,0x48,0xa8,0xc2]227; CHECK-NEXT: ## zmm0 = (zmm1 * zmm0) + zmm2228; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]229entry:230 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) #10231 ret <8 x double> %0232}233 234define <8 x double> @test_mm512_mask_fmadd_pd(<8 x double> %__A, i8 zeroext %__U, <8 x double> %__B, <8 x double> %__C) {235; X86-LABEL: test_mm512_mask_fmadd_pd:236; X86: ## %bb.0: ## %entry237; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]238; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]239; X86-NEXT: vfmadd132pd %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x98,0xc1]240; X86-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) + zmm2241; X86-NEXT: retl ## encoding: [0xc3]242;243; X64-LABEL: test_mm512_mask_fmadd_pd:244; X64: ## %bb.0: ## %entry245; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]246; X64-NEXT: vfmadd132pd %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x98,0xc1]247; X64-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) + zmm2248; X64-NEXT: retq ## encoding: [0xc3]249entry:250 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) #10251 %1 = bitcast i8 %__U to <8 x i1>252 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__A253 ret <8 x double> %2254}255 256define <8 x double> @test_mm512_mask3_fmadd_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i8 zeroext %__U) {257; X86-LABEL: test_mm512_mask3_fmadd_pd:258; X86: ## %bb.0: ## %entry259; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]260; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]261; X86-NEXT: vfmadd231pd %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0xb8,0xd1]262; X86-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) + zmm2263; X86-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]264; X86-NEXT: retl ## encoding: [0xc3]265;266; X64-LABEL: test_mm512_mask3_fmadd_pd:267; X64: ## %bb.0: ## %entry268; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]269; X64-NEXT: vfmadd231pd %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0xb8,0xd1]270; X64-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) + zmm2271; X64-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]272; X64-NEXT: retq ## encoding: [0xc3]273entry:274 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) #10275 %1 = bitcast i8 %__U to <8 x i1>276 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__C277 ret <8 x double> %2278}279 280define <8 x double> @test_mm512_maskz_fmadd_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {281; X86-LABEL: test_mm512_maskz_fmadd_pd:282; X86: ## %bb.0: ## %entry283; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]284; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]285; X86-NEXT: vfmadd213pd %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0xc9,0xa8,0xc2]286; X86-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) + zmm2287; X86-NEXT: retl ## encoding: [0xc3]288;289; X64-LABEL: test_mm512_maskz_fmadd_pd:290; X64: ## %bb.0: ## %entry291; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]292; X64-NEXT: vfmadd213pd %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0xc9,0xa8,0xc2]293; X64-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) + zmm2294; X64-NEXT: retq ## encoding: [0xc3]295entry:296 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) #10297 %1 = bitcast i8 %__U to <8 x i1>298 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> zeroinitializer299 ret <8 x double> %2300}301 302define <8 x double> @test_mm512_fmsub_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {303; CHECK-LABEL: test_mm512_fmsub_pd:304; CHECK: ## %bb.0: ## %entry305; CHECK-NEXT: vfmsub213pd %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0xf5,0x48,0xaa,0xc2]306; CHECK-NEXT: ## zmm0 = (zmm1 * zmm0) - zmm2307; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]308entry:309 %sub.i = 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>, %__C310 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub.i) #10311 ret <8 x double> %0312}313 314define <8 x double> @test_mm512_mask_fmsub_pd(<8 x double> %__A, i8 zeroext %__U, <8 x double> %__B, <8 x double> %__C) {315; X86-LABEL: test_mm512_mask_fmsub_pd:316; X86: ## %bb.0: ## %entry317; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]318; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]319; X86-NEXT: vfmsub132pd %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x9a,0xc1]320; X86-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) - zmm2321; X86-NEXT: retl ## encoding: [0xc3]322;323; X64-LABEL: test_mm512_mask_fmsub_pd:324; X64: ## %bb.0: ## %entry325; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]326; X64-NEXT: vfmsub132pd %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x9a,0xc1]327; X64-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) - zmm2328; X64-NEXT: retq ## encoding: [0xc3]329entry:330 %sub.i = 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>, %__C331 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub.i) #10332 %1 = bitcast i8 %__U to <8 x i1>333 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__A334 ret <8 x double> %2335}336 337define <8 x double> @test_mm512_maskz_fmsub_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {338; X86-LABEL: test_mm512_maskz_fmsub_pd:339; X86: ## %bb.0: ## %entry340; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]341; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]342; X86-NEXT: vfmsub213pd %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0xc9,0xaa,0xc2]343; X86-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) - zmm2344; X86-NEXT: retl ## encoding: [0xc3]345;346; X64-LABEL: test_mm512_maskz_fmsub_pd:347; X64: ## %bb.0: ## %entry348; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]349; X64-NEXT: vfmsub213pd %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0xc9,0xaa,0xc2]350; X64-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) - zmm2351; X64-NEXT: retq ## encoding: [0xc3]352entry:353 %sub.i = 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>, %__C354 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub.i) #10355 %1 = bitcast i8 %__U to <8 x i1>356 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> zeroinitializer357 ret <8 x double> %2358}359 360define <8 x double> @test_mm512_fnmadd_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {361; CHECK-LABEL: test_mm512_fnmadd_pd:362; CHECK: ## %bb.0: ## %entry363; CHECK-NEXT: vfnmadd213pd %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0xf5,0x48,0xac,0xc2]364; CHECK-NEXT: ## zmm0 = -(zmm1 * zmm0) + zmm2365; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]366entry:367 %sub.i = 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>, %__A368 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %sub.i, <8 x double> %__B, <8 x double> %__C) #10369 ret <8 x double> %0370}371 372define <8 x double> @test_mm512_mask3_fnmadd_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i8 zeroext %__U) {373; X86-LABEL: test_mm512_mask3_fnmadd_pd:374; X86: ## %bb.0: ## %entry375; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]376; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]377; X86-NEXT: vfnmadd231pd %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0xbc,0xd1]378; X86-NEXT: ## zmm2 {%k1} = -(zmm0 * zmm1) + zmm2379; X86-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]380; X86-NEXT: retl ## encoding: [0xc3]381;382; X64-LABEL: test_mm512_mask3_fnmadd_pd:383; X64: ## %bb.0: ## %entry384; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]385; X64-NEXT: vfnmadd231pd %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0xbc,0xd1]386; X64-NEXT: ## zmm2 {%k1} = -(zmm0 * zmm1) + zmm2387; X64-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]388; X64-NEXT: retq ## encoding: [0xc3]389entry:390 %sub.i = 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>, %__A391 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %sub.i, <8 x double> %__B, <8 x double> %__C) #10392 %1 = bitcast i8 %__U to <8 x i1>393 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__C394 ret <8 x double> %2395}396 397define <8 x double> @test_mm512_maskz_fnmadd_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {398; X86-LABEL: test_mm512_maskz_fnmadd_pd:399; X86: ## %bb.0: ## %entry400; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]401; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]402; X86-NEXT: vfnmadd213pd %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0xc9,0xac,0xc2]403; X86-NEXT: ## zmm0 {%k1} {z} = -(zmm1 * zmm0) + zmm2404; X86-NEXT: retl ## encoding: [0xc3]405;406; X64-LABEL: test_mm512_maskz_fnmadd_pd:407; X64: ## %bb.0: ## %entry408; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]409; X64-NEXT: vfnmadd213pd %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0xc9,0xac,0xc2]410; X64-NEXT: ## zmm0 {%k1} {z} = -(zmm1 * zmm0) + zmm2411; X64-NEXT: retq ## encoding: [0xc3]412entry:413 %sub.i = 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>, %__A414 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %sub.i, <8 x double> %__B, <8 x double> %__C) #10415 %1 = bitcast i8 %__U to <8 x i1>416 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> zeroinitializer417 ret <8 x double> %2418}419 420define <8 x double> @test_mm512_fnmsub_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {421; CHECK-LABEL: test_mm512_fnmsub_pd:422; CHECK: ## %bb.0: ## %entry423; CHECK-NEXT: vfnmsub213pd %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0xf5,0x48,0xae,0xc2]424; CHECK-NEXT: ## zmm0 = -(zmm1 * zmm0) - zmm2425; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]426entry:427 %sub.i = 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>, %__A428 %sub1.i = 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>, %__C429 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %sub.i, <8 x double> %__B, <8 x double> %sub1.i) #10430 ret <8 x double> %0431}432 433define <8 x double> @test_mm512_maskz_fnmsub_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {434; X86-LABEL: test_mm512_maskz_fnmsub_pd:435; X86: ## %bb.0: ## %entry436; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]437; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]438; X86-NEXT: vfnmsub213pd %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0xc9,0xae,0xc2]439; X86-NEXT: ## zmm0 {%k1} {z} = -(zmm1 * zmm0) - zmm2440; X86-NEXT: retl ## encoding: [0xc3]441;442; X64-LABEL: test_mm512_maskz_fnmsub_pd:443; X64: ## %bb.0: ## %entry444; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]445; X64-NEXT: vfnmsub213pd %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0xc9,0xae,0xc2]446; X64-NEXT: ## zmm0 {%k1} {z} = -(zmm1 * zmm0) - zmm2447; X64-NEXT: retq ## encoding: [0xc3]448entry:449 %sub.i = 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>, %__A450 %sub1.i = 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>, %__C451 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %sub.i, <8 x double> %__B, <8 x double> %sub1.i) #10452 %1 = bitcast i8 %__U to <8 x i1>453 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> zeroinitializer454 ret <8 x double> %2455}456 457define <16 x float> @test_mm512_fmadd_round_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {458; CHECK-LABEL: test_mm512_fmadd_round_ps:459; CHECK: ## %bb.0: ## %entry460; CHECK-NEXT: vfmadd213ps {rn-sae}, %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0x75,0x18,0xa8,0xc2]461; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]462entry:463 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i32 8)464 ret <16 x float> %0465}466 467declare <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float>, <16 x float>, <16 x float>, i32) #1468 469define <16 x float> @test_mm512_mask_fmadd_round_ps(<16 x float> %__A, i16 zeroext %__U, <16 x float> %__B, <16 x float> %__C) {470; X86-LABEL: test_mm512_mask_fmadd_round_ps:471; X86: ## %bb.0: ## %entry472; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]473; X86-NEXT: vfmadd132ps {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x19,0x98,0xc1]474; X86-NEXT: retl ## encoding: [0xc3]475;476; X64-LABEL: test_mm512_mask_fmadd_round_ps:477; X64: ## %bb.0: ## %entry478; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]479; X64-NEXT: vfmadd132ps {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x19,0x98,0xc1]480; X64-NEXT: retq ## encoding: [0xc3]481entry:482 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i32 8)483 %1 = bitcast i16 %__U to <16 x i1>484 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__A485 ret <16 x float> %2486}487 488define <16 x float> @test_mm512_mask3_fmadd_round_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i16 zeroext %__U) {489; X86-LABEL: test_mm512_mask3_fmadd_round_ps:490; X86: ## %bb.0: ## %entry491; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]492; X86-NEXT: vfmadd231ps {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x19,0xb8,0xd1]493; X86-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]494; X86-NEXT: retl ## encoding: [0xc3]495;496; X64-LABEL: test_mm512_mask3_fmadd_round_ps:497; X64: ## %bb.0: ## %entry498; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]499; X64-NEXT: vfmadd231ps {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x19,0xb8,0xd1]500; X64-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]501; X64-NEXT: retq ## encoding: [0xc3]502entry:503 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i32 8)504 %1 = bitcast i16 %__U to <16 x i1>505 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__C506 ret <16 x float> %2507}508 509define <16 x float> @test_mm512_maskz_fmadd_round_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {510; X86-LABEL: test_mm512_maskz_fmadd_round_ps:511; X86: ## %bb.0: ## %entry512; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]513; X86-NEXT: vfmadd213ps {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x99,0xa8,0xc2]514; X86-NEXT: retl ## encoding: [0xc3]515;516; X64-LABEL: test_mm512_maskz_fmadd_round_ps:517; X64: ## %bb.0: ## %entry518; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]519; X64-NEXT: vfmadd213ps {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x99,0xa8,0xc2]520; X64-NEXT: retq ## encoding: [0xc3]521entry:522 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i32 8)523 %1 = bitcast i16 %__U to <16 x i1>524 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> zeroinitializer525 ret <16 x float> %2526}527 528define <16 x float> @test_mm512_fmsub_round_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {529; CHECK-LABEL: test_mm512_fmsub_round_ps:530; CHECK: ## %bb.0: ## %entry531; CHECK-NEXT: vfmsub213ps {rn-sae}, %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0x75,0x18,0xaa,0xc2]532; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]533entry:534 %sub = 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>, %__C535 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub, i32 8)536 ret <16 x float> %0537}538 539define <16 x float> @test_mm512_mask_fmsub_round_ps(<16 x float> %__A, i16 zeroext %__U, <16 x float> %__B, <16 x float> %__C) {540; X86-LABEL: test_mm512_mask_fmsub_round_ps:541; X86: ## %bb.0: ## %entry542; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]543; X86-NEXT: vfmsub132ps {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x19,0x9a,0xc1]544; X86-NEXT: retl ## encoding: [0xc3]545;546; X64-LABEL: test_mm512_mask_fmsub_round_ps:547; X64: ## %bb.0: ## %entry548; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]549; X64-NEXT: vfmsub132ps {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x19,0x9a,0xc1]550; X64-NEXT: retq ## encoding: [0xc3]551entry:552 %sub = 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>, %__C553 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub, i32 8)554 %1 = bitcast i16 %__U to <16 x i1>555 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__A556 ret <16 x float> %2557}558 559define <16 x float> @test_mm512_maskz_fmsub_round_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {560; X86-LABEL: test_mm512_maskz_fmsub_round_ps:561; X86: ## %bb.0: ## %entry562; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]563; X86-NEXT: vfmsub213ps {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x99,0xaa,0xc2]564; X86-NEXT: retl ## encoding: [0xc3]565;566; X64-LABEL: test_mm512_maskz_fmsub_round_ps:567; X64: ## %bb.0: ## %entry568; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]569; X64-NEXT: vfmsub213ps {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x99,0xaa,0xc2]570; X64-NEXT: retq ## encoding: [0xc3]571entry:572 %sub = 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>, %__C573 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub, i32 8)574 %1 = bitcast i16 %__U to <16 x i1>575 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> zeroinitializer576 ret <16 x float> %2577}578 579define <16 x float> @test_mm512_fnmadd_round_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {580; CHECK-LABEL: test_mm512_fnmadd_round_ps:581; CHECK: ## %bb.0: ## %entry582; CHECK-NEXT: vfnmadd213ps {rn-sae}, %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0x75,0x18,0xac,0xc2]583; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]584entry:585 %sub = 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>, %__A586 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %sub, <16 x float> %__B, <16 x float> %__C, i32 8)587 ret <16 x float> %0588}589 590define <16 x float> @test_mm512_mask3_fnmadd_round_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i16 zeroext %__U) {591; X86-LABEL: test_mm512_mask3_fnmadd_round_ps:592; X86: ## %bb.0: ## %entry593; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]594; X86-NEXT: vfnmadd231ps {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x19,0xbc,0xd1]595; X86-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]596; X86-NEXT: retl ## encoding: [0xc3]597;598; X64-LABEL: test_mm512_mask3_fnmadd_round_ps:599; X64: ## %bb.0: ## %entry600; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]601; X64-NEXT: vfnmadd231ps {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x19,0xbc,0xd1]602; X64-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]603; X64-NEXT: retq ## encoding: [0xc3]604entry:605 %sub = 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>, %__A606 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %sub, <16 x float> %__B, <16 x float> %__C, i32 8)607 %1 = bitcast i16 %__U to <16 x i1>608 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__C609 ret <16 x float> %2610}611 612define <16 x float> @test_mm512_maskz_fnmadd_round_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {613; X86-LABEL: test_mm512_maskz_fnmadd_round_ps:614; X86: ## %bb.0: ## %entry615; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]616; X86-NEXT: vfnmadd213ps {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x99,0xac,0xc2]617; X86-NEXT: retl ## encoding: [0xc3]618;619; X64-LABEL: test_mm512_maskz_fnmadd_round_ps:620; X64: ## %bb.0: ## %entry621; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]622; X64-NEXT: vfnmadd213ps {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x99,0xac,0xc2]623; X64-NEXT: retq ## encoding: [0xc3]624entry:625 %sub = 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>, %__A626 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %sub, <16 x float> %__B, <16 x float> %__C, i32 8)627 %1 = bitcast i16 %__U to <16 x i1>628 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> zeroinitializer629 ret <16 x float> %2630}631 632define <16 x float> @test_mm512_fnmsub_round_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {633; CHECK-LABEL: test_mm512_fnmsub_round_ps:634; CHECK: ## %bb.0: ## %entry635; CHECK-NEXT: vfnmsub213ps {rn-sae}, %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0x75,0x18,0xae,0xc2]636; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]637entry:638 %sub = 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>, %__A639 %sub1 = 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>, %__C640 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %sub, <16 x float> %__B, <16 x float> %sub1, i32 8)641 ret <16 x float> %0642}643 644define <16 x float> @test_mm512_maskz_fnmsub_round_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {645; X86-LABEL: test_mm512_maskz_fnmsub_round_ps:646; X86: ## %bb.0: ## %entry647; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]648; X86-NEXT: vfnmsub213ps {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x99,0xae,0xc2]649; X86-NEXT: retl ## encoding: [0xc3]650;651; X64-LABEL: test_mm512_maskz_fnmsub_round_ps:652; X64: ## %bb.0: ## %entry653; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]654; X64-NEXT: vfnmsub213ps {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x99,0xae,0xc2]655; X64-NEXT: retq ## encoding: [0xc3]656entry:657 %sub = 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>, %__A658 %sub1 = 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>, %__C659 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %sub, <16 x float> %__B, <16 x float> %sub1, i32 8)660 %1 = bitcast i16 %__U to <16 x i1>661 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> zeroinitializer662 ret <16 x float> %2663}664 665define <16 x float> @test_mm512_fmadd_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {666; CHECK-LABEL: test_mm512_fmadd_ps:667; CHECK: ## %bb.0: ## %entry668; CHECK-NEXT: vfmadd213ps %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0x75,0x48,0xa8,0xc2]669; CHECK-NEXT: ## zmm0 = (zmm1 * zmm0) + zmm2670; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]671entry:672 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) #10673 ret <16 x float> %0674}675 676define <16 x float> @test_mm512_mask_fmadd_ps(<16 x float> %__A, i16 zeroext %__U, <16 x float> %__B, <16 x float> %__C) {677; X86-LABEL: test_mm512_mask_fmadd_ps:678; X86: ## %bb.0: ## %entry679; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]680; X86-NEXT: vfmadd132ps %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x49,0x98,0xc1]681; X86-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) + zmm2682; X86-NEXT: retl ## encoding: [0xc3]683;684; X64-LABEL: test_mm512_mask_fmadd_ps:685; X64: ## %bb.0: ## %entry686; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]687; X64-NEXT: vfmadd132ps %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x49,0x98,0xc1]688; X64-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) + zmm2689; X64-NEXT: retq ## encoding: [0xc3]690entry:691 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) #10692 %1 = bitcast i16 %__U to <16 x i1>693 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__A694 ret <16 x float> %2695}696 697define <16 x float> @test_mm512_mask3_fmadd_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i16 zeroext %__U) {698; X86-LABEL: test_mm512_mask3_fmadd_ps:699; X86: ## %bb.0: ## %entry700; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]701; X86-NEXT: vfmadd231ps %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x49,0xb8,0xd1]702; X86-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) + zmm2703; X86-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]704; X86-NEXT: retl ## encoding: [0xc3]705;706; X64-LABEL: test_mm512_mask3_fmadd_ps:707; X64: ## %bb.0: ## %entry708; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]709; X64-NEXT: vfmadd231ps %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x49,0xb8,0xd1]710; X64-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) + zmm2711; X64-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]712; X64-NEXT: retq ## encoding: [0xc3]713entry:714 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) #10715 %1 = bitcast i16 %__U to <16 x i1>716 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__C717 ret <16 x float> %2718}719 720define <16 x float> @test_mm512_maskz_fmadd_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {721; X86-LABEL: test_mm512_maskz_fmadd_ps:722; X86: ## %bb.0: ## %entry723; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]724; X86-NEXT: vfmadd213ps %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0xc9,0xa8,0xc2]725; X86-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) + zmm2726; X86-NEXT: retl ## encoding: [0xc3]727;728; X64-LABEL: test_mm512_maskz_fmadd_ps:729; X64: ## %bb.0: ## %entry730; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]731; X64-NEXT: vfmadd213ps %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0xc9,0xa8,0xc2]732; X64-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) + zmm2733; X64-NEXT: retq ## encoding: [0xc3]734entry:735 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) #10736 %1 = bitcast i16 %__U to <16 x i1>737 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> zeroinitializer738 ret <16 x float> %2739}740 741define <16 x float> @test_mm512_fmsub_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {742; CHECK-LABEL: test_mm512_fmsub_ps:743; CHECK: ## %bb.0: ## %entry744; CHECK-NEXT: vfmsub213ps %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0x75,0x48,0xaa,0xc2]745; CHECK-NEXT: ## zmm0 = (zmm1 * zmm0) - zmm2746; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]747entry:748 %sub.i = 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>, %__C749 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub.i) #10750 ret <16 x float> %0751}752 753define <16 x float> @test_mm512_mask_fmsub_ps(<16 x float> %__A, i16 zeroext %__U, <16 x float> %__B, <16 x float> %__C) {754; X86-LABEL: test_mm512_mask_fmsub_ps:755; X86: ## %bb.0: ## %entry756; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]757; X86-NEXT: vfmsub132ps %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x49,0x9a,0xc1]758; X86-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) - zmm2759; X86-NEXT: retl ## encoding: [0xc3]760;761; X64-LABEL: test_mm512_mask_fmsub_ps:762; X64: ## %bb.0: ## %entry763; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]764; X64-NEXT: vfmsub132ps %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x49,0x9a,0xc1]765; X64-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) - zmm2766; X64-NEXT: retq ## encoding: [0xc3]767entry:768 %sub.i = 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>, %__C769 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub.i) #10770 %1 = bitcast i16 %__U to <16 x i1>771 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__A772 ret <16 x float> %2773}774 775define <16 x float> @test_mm512_maskz_fmsub_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {776; X86-LABEL: test_mm512_maskz_fmsub_ps:777; X86: ## %bb.0: ## %entry778; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]779; X86-NEXT: vfmsub213ps %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0xc9,0xaa,0xc2]780; X86-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) - zmm2781; X86-NEXT: retl ## encoding: [0xc3]782;783; X64-LABEL: test_mm512_maskz_fmsub_ps:784; X64: ## %bb.0: ## %entry785; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]786; X64-NEXT: vfmsub213ps %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0xc9,0xaa,0xc2]787; X64-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) - zmm2788; X64-NEXT: retq ## encoding: [0xc3]789entry:790 %sub.i = 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>, %__C791 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub.i) #10792 %1 = bitcast i16 %__U to <16 x i1>793 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> zeroinitializer794 ret <16 x float> %2795}796 797define <16 x float> @test_mm512_fnmadd_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {798; CHECK-LABEL: test_mm512_fnmadd_ps:799; CHECK: ## %bb.0: ## %entry800; CHECK-NEXT: vfnmadd213ps %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0x75,0x48,0xac,0xc2]801; CHECK-NEXT: ## zmm0 = -(zmm1 * zmm0) + zmm2802; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]803entry:804 %sub.i = 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>, %__A805 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %sub.i, <16 x float> %__B, <16 x float> %__C) #10806 ret <16 x float> %0807}808 809define <16 x float> @test_mm512_mask3_fnmadd_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i16 zeroext %__U) {810; X86-LABEL: test_mm512_mask3_fnmadd_ps:811; X86: ## %bb.0: ## %entry812; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]813; X86-NEXT: vfnmadd231ps %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x49,0xbc,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_mm512_mask3_fnmadd_ps:819; X64: ## %bb.0: ## %entry820; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]821; X64-NEXT: vfnmadd231ps %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x49,0xbc,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]825entry:826 %sub.i = 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>, %__A827 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %sub.i, <16 x float> %__B, <16 x float> %__C) #10828 %1 = bitcast i16 %__U to <16 x i1>829 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__C830 ret <16 x float> %2831}832 833define <16 x float> @test_mm512_maskz_fnmadd_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {834; X86-LABEL: test_mm512_maskz_fnmadd_ps:835; X86: ## %bb.0: ## %entry836; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]837; X86-NEXT: vfnmadd213ps %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0xc9,0xac,0xc2]838; X86-NEXT: ## zmm0 {%k1} {z} = -(zmm1 * zmm0) + zmm2839; X86-NEXT: retl ## encoding: [0xc3]840;841; X64-LABEL: test_mm512_maskz_fnmadd_ps:842; X64: ## %bb.0: ## %entry843; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]844; X64-NEXT: vfnmadd213ps %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0xc9,0xac,0xc2]845; X64-NEXT: ## zmm0 {%k1} {z} = -(zmm1 * zmm0) + zmm2846; X64-NEXT: retq ## encoding: [0xc3]847entry:848 %sub.i = 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>, %__A849 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %sub.i, <16 x float> %__B, <16 x float> %__C) #10850 %1 = bitcast i16 %__U to <16 x i1>851 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> zeroinitializer852 ret <16 x float> %2853}854 855define <16 x float> @test_mm512_fnmsub_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {856; CHECK-LABEL: test_mm512_fnmsub_ps:857; CHECK: ## %bb.0: ## %entry858; CHECK-NEXT: vfnmsub213ps %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0x75,0x48,0xae,0xc2]859; CHECK-NEXT: ## zmm0 = -(zmm1 * zmm0) - zmm2860; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]861entry:862 %sub.i = 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>, %__A863 %sub1.i = 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>, %__C864 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %sub.i, <16 x float> %__B, <16 x float> %sub1.i) #10865 ret <16 x float> %0866}867 868define <16 x float> @test_mm512_maskz_fnmsub_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {869; X86-LABEL: test_mm512_maskz_fnmsub_ps:870; X86: ## %bb.0: ## %entry871; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]872; X86-NEXT: vfnmsub213ps %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0xc9,0xae,0xc2]873; X86-NEXT: ## zmm0 {%k1} {z} = -(zmm1 * zmm0) - zmm2874; X86-NEXT: retl ## encoding: [0xc3]875;876; X64-LABEL: test_mm512_maskz_fnmsub_ps:877; X64: ## %bb.0: ## %entry878; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]879; X64-NEXT: vfnmsub213ps %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0xc9,0xae,0xc2]880; X64-NEXT: ## zmm0 {%k1} {z} = -(zmm1 * zmm0) - zmm2881; X64-NEXT: retq ## encoding: [0xc3]882entry:883 %sub.i = 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>, %__A884 %sub1.i = 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>, %__C885 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %sub.i, <16 x float> %__B, <16 x float> %sub1.i) #10886 %1 = bitcast i16 %__U to <16 x i1>887 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> zeroinitializer888 ret <16 x float> %2889}890 891define <8 x double> @test_mm512_fmaddsub_round_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {892; CHECK-LABEL: test_mm512_fmaddsub_round_pd:893; CHECK: ## %bb.0: ## %entry894; CHECK-NEXT: vfmaddsub213pd {rn-sae}, %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0xf5,0x18,0xa6,0xc2]895; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]896entry:897 %0 = tail call <8 x double> @llvm.x86.avx512.vfmaddsub.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i32 8)898 ret <8 x double> %0899}900 901declare <8 x double> @llvm.x86.avx512.vfmaddsub.pd.512(<8 x double>, <8 x double>, <8 x double>, i32) #1902 903define <8 x double> @test_mm512_mask_fmaddsub_round_pd(<8 x double> %__A, i8 zeroext %__U, <8 x double> %__B, <8 x double> %__C) {904; X86-LABEL: test_mm512_mask_fmaddsub_round_pd:905; X86: ## %bb.0: ## %entry906; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]907; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]908; X86-NEXT: vfmaddsub132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x19,0x96,0xc1]909; X86-NEXT: retl ## encoding: [0xc3]910;911; X64-LABEL: test_mm512_mask_fmaddsub_round_pd:912; X64: ## %bb.0: ## %entry913; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]914; X64-NEXT: vfmaddsub132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x19,0x96,0xc1]915; X64-NEXT: retq ## encoding: [0xc3]916entry:917 %0 = tail call <8 x double> @llvm.x86.avx512.vfmaddsub.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i32 8)918 %1 = bitcast i8 %__U to <8 x i1>919 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__A920 ret <8 x double> %2921}922 923define <8 x double> @test_mm512_mask3_fmaddsub_round_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i8 zeroext %__U) {924; X86-LABEL: test_mm512_mask3_fmaddsub_round_pd:925; X86: ## %bb.0: ## %entry926; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]927; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]928; X86-NEXT: vfmaddsub231pd {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x19,0xb6,0xd1]929; X86-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]930; X86-NEXT: retl ## encoding: [0xc3]931;932; X64-LABEL: test_mm512_mask3_fmaddsub_round_pd:933; X64: ## %bb.0: ## %entry934; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]935; X64-NEXT: vfmaddsub231pd {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x19,0xb6,0xd1]936; X64-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]937; X64-NEXT: retq ## encoding: [0xc3]938entry:939 %0 = tail call <8 x double> @llvm.x86.avx512.vfmaddsub.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i32 8)940 %1 = bitcast i8 %__U to <8 x i1>941 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__C942 ret <8 x double> %2943}944 945define <8 x double> @test_mm512_maskz_fmaddsub_round_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {946; X86-LABEL: test_mm512_maskz_fmaddsub_round_pd:947; X86: ## %bb.0: ## %entry948; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]949; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]950; X86-NEXT: vfmaddsub213pd {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x99,0xa6,0xc2]951; X86-NEXT: retl ## encoding: [0xc3]952;953; X64-LABEL: test_mm512_maskz_fmaddsub_round_pd:954; X64: ## %bb.0: ## %entry955; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]956; X64-NEXT: vfmaddsub213pd {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x99,0xa6,0xc2]957; X64-NEXT: retq ## encoding: [0xc3]958entry:959 %0 = tail call <8 x double> @llvm.x86.avx512.vfmaddsub.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i32 8)960 %1 = bitcast i8 %__U to <8 x i1>961 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> zeroinitializer962 ret <8 x double> %2963}964 965define <8 x double> @test_mm512_fmsubadd_round_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {966; CHECK-LABEL: test_mm512_fmsubadd_round_pd:967; CHECK: ## %bb.0: ## %entry968; CHECK-NEXT: vfmsubadd213pd {rn-sae}, %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0xf5,0x18,0xa7,0xc2]969; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]970entry:971 %sub = 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>, %__C972 %0 = tail call <8 x double> @llvm.x86.avx512.vfmaddsub.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub, i32 8)973 ret <8 x double> %0974}975 976define <8 x double> @test_mm512_mask_fmsubadd_round_pd(<8 x double> %__A, i8 zeroext %__U, <8 x double> %__B, <8 x double> %__C) {977; X86-LABEL: test_mm512_mask_fmsubadd_round_pd:978; X86: ## %bb.0: ## %entry979; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]980; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]981; X86-NEXT: vfmsubadd132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x19,0x97,0xc1]982; X86-NEXT: retl ## encoding: [0xc3]983;984; X64-LABEL: test_mm512_mask_fmsubadd_round_pd:985; X64: ## %bb.0: ## %entry986; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]987; X64-NEXT: vfmsubadd132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x19,0x97,0xc1]988; X64-NEXT: retq ## encoding: [0xc3]989entry:990 %sub = 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>, %__C991 %0 = tail call <8 x double> @llvm.x86.avx512.vfmaddsub.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub, i32 8)992 %1 = bitcast i8 %__U to <8 x i1>993 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__A994 ret <8 x double> %2995}996 997define <8 x double> @test_mm512_maskz_fmsubadd_round_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {998; X86-LABEL: test_mm512_maskz_fmsubadd_round_pd:999; X86: ## %bb.0: ## %entry1000; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1001; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1002; X86-NEXT: vfmsubadd213pd {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x99,0xa7,0xc2]1003; X86-NEXT: retl ## encoding: [0xc3]1004;1005; X64-LABEL: test_mm512_maskz_fmsubadd_round_pd:1006; X64: ## %bb.0: ## %entry1007; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1008; X64-NEXT: vfmsubadd213pd {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x99,0xa7,0xc2]1009; X64-NEXT: retq ## encoding: [0xc3]1010entry:1011 %sub = 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>, %__C1012 %0 = tail call <8 x double> @llvm.x86.avx512.vfmaddsub.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub, i32 8)1013 %1 = bitcast i8 %__U to <8 x i1>1014 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> zeroinitializer1015 ret <8 x double> %21016}1017 1018define <8 x double> @test_mm512_fmaddsub_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {1019; CHECK-LABEL: test_mm512_fmaddsub_pd:1020; CHECK: ## %bb.0: ## %entry1021; CHECK-NEXT: vfmaddsub213pd %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0xf5,0x48,0xa6,0xc2]1022; CHECK-NEXT: ## zmm0 = (zmm1 * zmm0) +/- zmm21023; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]1024entry:1025 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) #101026 %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>, %__C1027 %2 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %1) #101028 %3 = shufflevector <8 x double> %2, <8 x double> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1029 ret <8 x double> %31030}1031 1032define <8 x double> @test_mm512_mask_fmaddsub_pd(<8 x double> %__A, i8 zeroext %__U, <8 x double> %__B, <8 x double> %__C) {1033; X86-LABEL: test_mm512_mask_fmaddsub_pd:1034; X86: ## %bb.0: ## %entry1035; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1036; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1037; X86-NEXT: vfmaddsub132pd %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x96,0xc1]1038; X86-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) +/- zmm21039; X86-NEXT: retl ## encoding: [0xc3]1040;1041; X64-LABEL: test_mm512_mask_fmaddsub_pd:1042; X64: ## %bb.0: ## %entry1043; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1044; X64-NEXT: vfmaddsub132pd %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x96,0xc1]1045; X64-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) +/- zmm21046; X64-NEXT: retq ## encoding: [0xc3]1047entry:1048 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) #101049 %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>, %__C1050 %2 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %1) #101051 %3 = shufflevector <8 x double> %2, <8 x double> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1052 %4 = bitcast i8 %__U to <8 x i1>1053 %5 = select <8 x i1> %4, <8 x double> %3, <8 x double> %__A1054 ret <8 x double> %51055}1056 1057define <8 x double> @test_mm512_mask3_fmaddsub_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i8 zeroext %__U) {1058; X86-LABEL: test_mm512_mask3_fmaddsub_pd:1059; X86: ## %bb.0: ## %entry1060; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1061; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1062; X86-NEXT: vfmaddsub231pd %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0xb6,0xd1]1063; X86-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) +/- zmm21064; X86-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1065; X86-NEXT: retl ## encoding: [0xc3]1066;1067; X64-LABEL: test_mm512_mask3_fmaddsub_pd:1068; X64: ## %bb.0: ## %entry1069; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1070; X64-NEXT: vfmaddsub231pd %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0xb6,0xd1]1071; X64-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) +/- zmm21072; X64-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1073; X64-NEXT: retq ## encoding: [0xc3]1074entry:1075 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) #101076 %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>, %__C1077 %2 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %1) #101078 %3 = shufflevector <8 x double> %2, <8 x double> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1079 %4 = bitcast i8 %__U to <8 x i1>1080 %5 = select <8 x i1> %4, <8 x double> %3, <8 x double> %__C1081 ret <8 x double> %51082}1083 1084define <8 x double> @test_mm512_maskz_fmaddsub_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {1085; X86-LABEL: test_mm512_maskz_fmaddsub_pd:1086; X86: ## %bb.0: ## %entry1087; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1088; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1089; X86-NEXT: vfmaddsub213pd %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0xc9,0xa6,0xc2]1090; X86-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) +/- zmm21091; X86-NEXT: retl ## encoding: [0xc3]1092;1093; X64-LABEL: test_mm512_maskz_fmaddsub_pd:1094; X64: ## %bb.0: ## %entry1095; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1096; X64-NEXT: vfmaddsub213pd %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0xc9,0xa6,0xc2]1097; X64-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) +/- zmm21098; X64-NEXT: retq ## encoding: [0xc3]1099entry:1100 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) #101101 %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>, %__C1102 %2 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %1) #101103 %3 = shufflevector <8 x double> %2, <8 x double> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1104 %4 = bitcast i8 %__U to <8 x i1>1105 %5 = select <8 x i1> %4, <8 x double> %3, <8 x double> zeroinitializer1106 ret <8 x double> %51107}1108 1109define <8 x double> @test_mm512_fmsubadd_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {1110; CHECK-LABEL: test_mm512_fmsubadd_pd:1111; CHECK: ## %bb.0: ## %entry1112; CHECK-NEXT: vfmsubadd213pd %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0xf5,0x48,0xa7,0xc2]1113; CHECK-NEXT: ## zmm0 = (zmm1 * zmm0) -/+ zmm21114; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]1115entry:1116 %sub.i = 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>, %__C1117 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub.i) #101118 %1 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) #101119 %2 = shufflevector <8 x double> %1, <8 x double> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1120 ret <8 x double> %21121}1122 1123define <8 x double> @test_mm512_mask_fmsubadd_pd(<8 x double> %__A, i8 zeroext %__U, <8 x double> %__B, <8 x double> %__C) {1124; X86-LABEL: test_mm512_mask_fmsubadd_pd:1125; X86: ## %bb.0: ## %entry1126; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1127; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1128; X86-NEXT: vfmsubadd132pd %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x97,0xc1]1129; X86-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) -/+ zmm21130; X86-NEXT: retl ## encoding: [0xc3]1131;1132; X64-LABEL: test_mm512_mask_fmsubadd_pd:1133; X64: ## %bb.0: ## %entry1134; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1135; X64-NEXT: vfmsubadd132pd %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x97,0xc1]1136; X64-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) -/+ zmm21137; X64-NEXT: retq ## encoding: [0xc3]1138entry:1139 %sub.i = 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>, %__C1140 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub.i) #101141 %1 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) #101142 %2 = shufflevector <8 x double> %1, <8 x double> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1143 %3 = bitcast i8 %__U to <8 x i1>1144 %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__A1145 ret <8 x double> %41146}1147 1148define <8 x double> @test_mm512_maskz_fmsubadd_pd(i8 zeroext %__U, <8 x double> %__A, <8 x double> %__B, <8 x double> %__C) {1149; X86-LABEL: test_mm512_maskz_fmsubadd_pd:1150; X86: ## %bb.0: ## %entry1151; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1152; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1153; X86-NEXT: vfmsubadd213pd %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0xc9,0xa7,0xc2]1154; X86-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) -/+ zmm21155; X86-NEXT: retl ## encoding: [0xc3]1156;1157; X64-LABEL: test_mm512_maskz_fmsubadd_pd:1158; X64: ## %bb.0: ## %entry1159; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1160; X64-NEXT: vfmsubadd213pd %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0xc9,0xa7,0xc2]1161; X64-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) -/+ zmm21162; X64-NEXT: retq ## encoding: [0xc3]1163entry:1164 %sub.i = 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>, %__C1165 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub.i) #101166 %1 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) #101167 %2 = shufflevector <8 x double> %1, <8 x double> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1168 %3 = bitcast i8 %__U to <8 x i1>1169 %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> zeroinitializer1170 ret <8 x double> %41171}1172 1173define <16 x float> @test_mm512_fmaddsub_round_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {1174; CHECK-LABEL: test_mm512_fmaddsub_round_ps:1175; CHECK: ## %bb.0: ## %entry1176; CHECK-NEXT: vfmaddsub213ps {rn-sae}, %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0x75,0x18,0xa6,0xc2]1177; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]1178entry:1179 %0 = tail call <16 x float> @llvm.x86.avx512.vfmaddsub.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i32 8)1180 ret <16 x float> %01181}1182 1183declare <16 x float> @llvm.x86.avx512.vfmaddsub.ps.512(<16 x float>, <16 x float>, <16 x float>, i32) #11184 1185define <16 x float> @test_mm512_mask_fmaddsub_round_ps(<16 x float> %__A, i16 zeroext %__U, <16 x float> %__B, <16 x float> %__C) {1186; X86-LABEL: test_mm512_mask_fmaddsub_round_ps:1187; X86: ## %bb.0: ## %entry1188; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1189; X86-NEXT: vfmaddsub132ps {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x19,0x96,0xc1]1190; X86-NEXT: retl ## encoding: [0xc3]1191;1192; X64-LABEL: test_mm512_mask_fmaddsub_round_ps:1193; X64: ## %bb.0: ## %entry1194; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1195; X64-NEXT: vfmaddsub132ps {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x19,0x96,0xc1]1196; X64-NEXT: retq ## encoding: [0xc3]1197entry:1198 %0 = tail call <16 x float> @llvm.x86.avx512.vfmaddsub.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i32 8)1199 %1 = bitcast i16 %__U to <16 x i1>1200 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__A1201 ret <16 x float> %21202}1203 1204define <16 x float> @test_mm512_mask3_fmaddsub_round_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i16 zeroext %__U) {1205; X86-LABEL: test_mm512_mask3_fmaddsub_round_ps:1206; X86: ## %bb.0: ## %entry1207; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1208; X86-NEXT: vfmaddsub231ps {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x19,0xb6,0xd1]1209; X86-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1210; X86-NEXT: retl ## encoding: [0xc3]1211;1212; X64-LABEL: test_mm512_mask3_fmaddsub_round_ps:1213; X64: ## %bb.0: ## %entry1214; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1215; X64-NEXT: vfmaddsub231ps {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x19,0xb6,0xd1]1216; X64-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1217; X64-NEXT: retq ## encoding: [0xc3]1218entry:1219 %0 = tail call <16 x float> @llvm.x86.avx512.vfmaddsub.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i32 8)1220 %1 = bitcast i16 %__U to <16 x i1>1221 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__C1222 ret <16 x float> %21223}1224 1225define <16 x float> @test_mm512_maskz_fmaddsub_round_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {1226; X86-LABEL: test_mm512_maskz_fmaddsub_round_ps:1227; X86: ## %bb.0: ## %entry1228; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1229; X86-NEXT: vfmaddsub213ps {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x99,0xa6,0xc2]1230; X86-NEXT: retl ## encoding: [0xc3]1231;1232; X64-LABEL: test_mm512_maskz_fmaddsub_round_ps:1233; X64: ## %bb.0: ## %entry1234; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1235; X64-NEXT: vfmaddsub213ps {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x99,0xa6,0xc2]1236; X64-NEXT: retq ## encoding: [0xc3]1237entry:1238 %0 = tail call <16 x float> @llvm.x86.avx512.vfmaddsub.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i32 8)1239 %1 = bitcast i16 %__U to <16 x i1>1240 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> zeroinitializer1241 ret <16 x float> %21242}1243 1244define <16 x float> @test_mm512_fmsubadd_round_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {1245; CHECK-LABEL: test_mm512_fmsubadd_round_ps:1246; CHECK: ## %bb.0: ## %entry1247; CHECK-NEXT: vfmsubadd213ps {rn-sae}, %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0x75,0x18,0xa7,0xc2]1248; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]1249entry:1250 %sub = 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>, %__C1251 %0 = tail call <16 x float> @llvm.x86.avx512.vfmaddsub.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub, i32 8)1252 ret <16 x float> %01253}1254 1255define <16 x float> @test_mm512_mask_fmsubadd_round_ps(<16 x float> %__A, i16 zeroext %__U, <16 x float> %__B, <16 x float> %__C) {1256; X86-LABEL: test_mm512_mask_fmsubadd_round_ps:1257; X86: ## %bb.0: ## %entry1258; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1259; X86-NEXT: vfmsubadd132ps {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x19,0x97,0xc1]1260; X86-NEXT: retl ## encoding: [0xc3]1261;1262; X64-LABEL: test_mm512_mask_fmsubadd_round_ps:1263; X64: ## %bb.0: ## %entry1264; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1265; X64-NEXT: vfmsubadd132ps {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x19,0x97,0xc1]1266; X64-NEXT: retq ## encoding: [0xc3]1267entry:1268 %sub = 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>, %__C1269 %0 = tail call <16 x float> @llvm.x86.avx512.vfmaddsub.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub, i32 8)1270 %1 = bitcast i16 %__U to <16 x i1>1271 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__A1272 ret <16 x float> %21273}1274 1275define <16 x float> @test_mm512_maskz_fmsubadd_round_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {1276; X86-LABEL: test_mm512_maskz_fmsubadd_round_ps:1277; X86: ## %bb.0: ## %entry1278; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1279; X86-NEXT: vfmsubadd213ps {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x99,0xa7,0xc2]1280; X86-NEXT: retl ## encoding: [0xc3]1281;1282; X64-LABEL: test_mm512_maskz_fmsubadd_round_ps:1283; X64: ## %bb.0: ## %entry1284; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1285; X64-NEXT: vfmsubadd213ps {rn-sae}, %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x99,0xa7,0xc2]1286; X64-NEXT: retq ## encoding: [0xc3]1287entry:1288 %sub = 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>, %__C1289 %0 = tail call <16 x float> @llvm.x86.avx512.vfmaddsub.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub, i32 8)1290 %1 = bitcast i16 %__U to <16 x i1>1291 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> zeroinitializer1292 ret <16 x float> %21293}1294 1295define <16 x float> @test_mm512_fmaddsub_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {1296; CHECK-LABEL: test_mm512_fmaddsub_ps:1297; CHECK: ## %bb.0: ## %entry1298; CHECK-NEXT: vfmaddsub213ps %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0x75,0x48,0xa6,0xc2]1299; CHECK-NEXT: ## zmm0 = (zmm1 * zmm0) +/- zmm21300; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]1301entry:1302 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) #101303 %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>, %__C1304 %2 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %1) #101305 %3 = shufflevector <16 x float> %2, <16 x float> %0, <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>1306 ret <16 x float> %31307}1308 1309define <16 x float> @test_mm512_mask_fmaddsub_ps(<16 x float> %__A, i16 zeroext %__U, <16 x float> %__B, <16 x float> %__C) {1310; X86-LABEL: test_mm512_mask_fmaddsub_ps:1311; X86: ## %bb.0: ## %entry1312; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1313; X86-NEXT: vfmaddsub132ps %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x49,0x96,0xc1]1314; X86-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) +/- zmm21315; X86-NEXT: retl ## encoding: [0xc3]1316;1317; X64-LABEL: test_mm512_mask_fmaddsub_ps:1318; X64: ## %bb.0: ## %entry1319; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1320; X64-NEXT: vfmaddsub132ps %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x49,0x96,0xc1]1321; X64-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) +/- zmm21322; X64-NEXT: retq ## encoding: [0xc3]1323entry:1324 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) #101325 %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>, %__C1326 %2 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %1) #101327 %3 = shufflevector <16 x float> %2, <16 x float> %0, <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>1328 %4 = bitcast i16 %__U to <16 x i1>1329 %5 = select <16 x i1> %4, <16 x float> %3, <16 x float> %__A1330 ret <16 x float> %51331}1332 1333define <16 x float> @test_mm512_mask3_fmaddsub_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i16 zeroext %__U) {1334; X86-LABEL: test_mm512_mask3_fmaddsub_ps:1335; X86: ## %bb.0: ## %entry1336; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1337; X86-NEXT: vfmaddsub231ps %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x49,0xb6,0xd1]1338; X86-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) +/- zmm21339; X86-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1340; X86-NEXT: retl ## encoding: [0xc3]1341;1342; X64-LABEL: test_mm512_mask3_fmaddsub_ps:1343; X64: ## %bb.0: ## %entry1344; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1345; X64-NEXT: vfmaddsub231ps %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x49,0xb6,0xd1]1346; X64-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) +/- zmm21347; X64-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1348; X64-NEXT: retq ## encoding: [0xc3]1349entry:1350 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) #101351 %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>, %__C1352 %2 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %1) #101353 %3 = shufflevector <16 x float> %2, <16 x float> %0, <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>1354 %4 = bitcast i16 %__U to <16 x i1>1355 %5 = select <16 x i1> %4, <16 x float> %3, <16 x float> %__C1356 ret <16 x float> %51357}1358 1359define <16 x float> @test_mm512_maskz_fmaddsub_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {1360; X86-LABEL: test_mm512_maskz_fmaddsub_ps:1361; X86: ## %bb.0: ## %entry1362; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1363; X86-NEXT: vfmaddsub213ps %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0xc9,0xa6,0xc2]1364; X86-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) +/- zmm21365; X86-NEXT: retl ## encoding: [0xc3]1366;1367; X64-LABEL: test_mm512_maskz_fmaddsub_ps:1368; X64: ## %bb.0: ## %entry1369; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1370; X64-NEXT: vfmaddsub213ps %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0xc9,0xa6,0xc2]1371; X64-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) +/- zmm21372; X64-NEXT: retq ## encoding: [0xc3]1373entry:1374 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) #101375 %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>, %__C1376 %2 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %1) #101377 %3 = shufflevector <16 x float> %2, <16 x float> %0, <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>1378 %4 = bitcast i16 %__U to <16 x i1>1379 %5 = select <16 x i1> %4, <16 x float> %3, <16 x float> zeroinitializer1380 ret <16 x float> %51381}1382 1383define <16 x float> @test_mm512_fmsubadd_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {1384; CHECK-LABEL: test_mm512_fmsubadd_ps:1385; CHECK: ## %bb.0: ## %entry1386; CHECK-NEXT: vfmsubadd213ps %zmm2, %zmm1, %zmm0 ## encoding: [0x62,0xf2,0x75,0x48,0xa7,0xc2]1387; CHECK-NEXT: ## zmm0 = (zmm1 * zmm0) -/+ zmm21388; CHECK-NEXT: ret{{[l|q]}} ## encoding: [0xc3]1389entry:1390 %sub.i = 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>, %__C1391 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub.i) #101392 %1 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) #101393 %2 = shufflevector <16 x float> %1, <16 x float> %0, <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>1394 ret <16 x float> %21395}1396 1397define <16 x float> @test_mm512_mask_fmsubadd_ps(<16 x float> %__A, i16 zeroext %__U, <16 x float> %__B, <16 x float> %__C) {1398; X86-LABEL: test_mm512_mask_fmsubadd_ps:1399; X86: ## %bb.0: ## %entry1400; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1401; X86-NEXT: vfmsubadd132ps %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x49,0x97,0xc1]1402; X86-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) -/+ zmm21403; X86-NEXT: retl ## encoding: [0xc3]1404;1405; X64-LABEL: test_mm512_mask_fmsubadd_ps:1406; X64: ## %bb.0: ## %entry1407; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1408; X64-NEXT: vfmsubadd132ps %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x49,0x97,0xc1]1409; X64-NEXT: ## zmm0 {%k1} = (zmm0 * zmm1) -/+ zmm21410; X64-NEXT: retq ## encoding: [0xc3]1411entry:1412 %sub.i = 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>, %__C1413 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub.i) #101414 %1 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) #101415 %2 = shufflevector <16 x float> %1, <16 x float> %0, <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>1416 %3 = bitcast i16 %__U to <16 x i1>1417 %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__A1418 ret <16 x float> %41419}1420 1421define <16 x float> @test_mm512_maskz_fmsubadd_ps(i16 zeroext %__U, <16 x float> %__A, <16 x float> %__B, <16 x float> %__C) {1422; X86-LABEL: test_mm512_maskz_fmsubadd_ps:1423; X86: ## %bb.0: ## %entry1424; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1425; X86-NEXT: vfmsubadd213ps %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0xc9,0xa7,0xc2]1426; X86-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) -/+ zmm21427; X86-NEXT: retl ## encoding: [0xc3]1428;1429; X64-LABEL: test_mm512_maskz_fmsubadd_ps:1430; X64: ## %bb.0: ## %entry1431; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1432; X64-NEXT: vfmsubadd213ps %zmm2, %zmm1, %zmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0xc9,0xa7,0xc2]1433; X64-NEXT: ## zmm0 {%k1} {z} = (zmm1 * zmm0) -/+ zmm21434; X64-NEXT: retq ## encoding: [0xc3]1435entry:1436 %sub.i = 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>, %__C1437 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub.i) #101438 %1 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) #101439 %2 = shufflevector <16 x float> %1, <16 x float> %0, <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>1440 %3 = bitcast i16 %__U to <16 x i1>1441 %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> zeroinitializer1442 ret <16 x float> %41443}1444 1445define <8 x double> @test_mm512_mask3_fmsub_round_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i8 zeroext %__U) {1446; X86-LABEL: test_mm512_mask3_fmsub_round_pd:1447; X86: ## %bb.0: ## %entry1448; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1449; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1450; X86-NEXT: vfmsub231pd {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x19,0xba,0xd1]1451; X86-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1452; X86-NEXT: retl ## encoding: [0xc3]1453;1454; X64-LABEL: test_mm512_mask3_fmsub_round_pd:1455; X64: ## %bb.0: ## %entry1456; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1457; X64-NEXT: vfmsub231pd {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x19,0xba,0xd1]1458; X64-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1459; X64-NEXT: retq ## encoding: [0xc3]1460entry:1461 %sub = 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>, %__C1462 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub, i32 8)1463 %1 = bitcast i8 %__U to <8 x i1>1464 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__C1465 ret <8 x double> %21466}1467 1468define <8 x double> @test_mm512_mask3_fmsub_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i8 zeroext %__U) {1469; X86-LABEL: test_mm512_mask3_fmsub_pd:1470; X86: ## %bb.0: ## %entry1471; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1472; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1473; X86-NEXT: vfmsub231pd %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0xba,0xd1]1474; X86-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) - zmm21475; X86-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1476; X86-NEXT: retl ## encoding: [0xc3]1477;1478; X64-LABEL: test_mm512_mask3_fmsub_pd:1479; X64: ## %bb.0: ## %entry1480; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1481; X64-NEXT: vfmsub231pd %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0xba,0xd1]1482; X64-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) - zmm21483; X64-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1484; X64-NEXT: retq ## encoding: [0xc3]1485entry:1486 %sub.i = 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>, %__C1487 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub.i) #101488 %1 = bitcast i8 %__U to <8 x i1>1489 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__C1490 ret <8 x double> %21491}1492 1493define <16 x float> @test_mm512_mask3_fmsub_round_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i16 zeroext %__U) {1494; X86-LABEL: test_mm512_mask3_fmsub_round_ps:1495; X86: ## %bb.0: ## %entry1496; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1497; X86-NEXT: vfmsub231ps {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x19,0xba,0xd1]1498; X86-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1499; X86-NEXT: retl ## encoding: [0xc3]1500;1501; X64-LABEL: test_mm512_mask3_fmsub_round_ps:1502; X64: ## %bb.0: ## %entry1503; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1504; X64-NEXT: vfmsub231ps {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x19,0xba,0xd1]1505; X64-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1506; X64-NEXT: retq ## encoding: [0xc3]1507entry:1508 %sub = 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>, %__C1509 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub, i32 8)1510 %1 = bitcast i16 %__U to <16 x i1>1511 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__C1512 ret <16 x float> %21513}1514 1515define <16 x float> @test_mm512_mask3_fmsub_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i16 zeroext %__U) {1516; X86-LABEL: test_mm512_mask3_fmsub_ps:1517; X86: ## %bb.0: ## %entry1518; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1519; X86-NEXT: vfmsub231ps %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x49,0xba,0xd1]1520; X86-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) - zmm21521; X86-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1522; X86-NEXT: retl ## encoding: [0xc3]1523;1524; X64-LABEL: test_mm512_mask3_fmsub_ps:1525; X64: ## %bb.0: ## %entry1526; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1527; X64-NEXT: vfmsub231ps %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x49,0xba,0xd1]1528; X64-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) - zmm21529; X64-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1530; X64-NEXT: retq ## encoding: [0xc3]1531entry:1532 %sub.i = 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>, %__C1533 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub.i) #101534 %1 = bitcast i16 %__U to <16 x i1>1535 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__C1536 ret <16 x float> %21537}1538 1539define <8 x double> @test_mm512_mask3_fmsubadd_round_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i8 zeroext %__U) {1540; X86-LABEL: test_mm512_mask3_fmsubadd_round_pd:1541; X86: ## %bb.0: ## %entry1542; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1543; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1544; X86-NEXT: vfmsubadd231pd {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x19,0xb7,0xd1]1545; X86-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1546; X86-NEXT: retl ## encoding: [0xc3]1547;1548; X64-LABEL: test_mm512_mask3_fmsubadd_round_pd:1549; X64: ## %bb.0: ## %entry1550; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1551; X64-NEXT: vfmsubadd231pd {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x19,0xb7,0xd1]1552; X64-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1553; X64-NEXT: retq ## encoding: [0xc3]1554entry:1555 %sub = 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>, %__C1556 %0 = tail call <8 x double> @llvm.x86.avx512.vfmaddsub.pd.512(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub, i32 8)1557 %1 = bitcast i8 %__U to <8 x i1>1558 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__C1559 ret <8 x double> %21560}1561 1562define <8 x double> @test_mm512_mask3_fmsubadd_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i8 zeroext %__U) {1563; X86-LABEL: test_mm512_mask3_fmsubadd_pd:1564; X86: ## %bb.0: ## %entry1565; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1566; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1567; X86-NEXT: vfmsubadd231pd %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0xb7,0xd1]1568; X86-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) -/+ zmm21569; X86-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1570; X86-NEXT: retl ## encoding: [0xc3]1571;1572; X64-LABEL: test_mm512_mask3_fmsubadd_pd:1573; X64: ## %bb.0: ## %entry1574; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1575; X64-NEXT: vfmsubadd231pd %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0xb7,0xd1]1576; X64-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) -/+ zmm21577; X64-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1578; X64-NEXT: retq ## encoding: [0xc3]1579entry:1580 %sub.i = 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>, %__C1581 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %sub.i) #101582 %1 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C) #101583 %2 = shufflevector <8 x double> %1, <8 x double> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1584 %3 = bitcast i8 %__U to <8 x i1>1585 %4 = select <8 x i1> %3, <8 x double> %2, <8 x double> %__C1586 ret <8 x double> %41587}1588 1589define <16 x float> @test_mm512_mask3_fmsubadd_round_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i16 zeroext %__U) {1590; X86-LABEL: test_mm512_mask3_fmsubadd_round_ps:1591; X86: ## %bb.0: ## %entry1592; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1593; X86-NEXT: vfmsubadd231ps {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x19,0xb7,0xd1]1594; X86-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1595; X86-NEXT: retl ## encoding: [0xc3]1596;1597; X64-LABEL: test_mm512_mask3_fmsubadd_round_ps:1598; X64: ## %bb.0: ## %entry1599; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1600; X64-NEXT: vfmsubadd231ps {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x19,0xb7,0xd1]1601; X64-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1602; X64-NEXT: retq ## encoding: [0xc3]1603entry:1604 %sub = 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>, %__C1605 %0 = tail call <16 x float> @llvm.x86.avx512.vfmaddsub.ps.512(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub, i32 8)1606 %1 = bitcast i16 %__U to <16 x i1>1607 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__C1608 ret <16 x float> %21609}1610 1611define <16 x float> @test_mm512_mask3_fmsubadd_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i16 zeroext %__U) {1612; X86-LABEL: test_mm512_mask3_fmsubadd_ps:1613; X86: ## %bb.0: ## %entry1614; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1615; X86-NEXT: vfmsubadd231ps %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x49,0xb7,0xd1]1616; X86-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) -/+ zmm21617; X86-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1618; X86-NEXT: retl ## encoding: [0xc3]1619;1620; X64-LABEL: test_mm512_mask3_fmsubadd_ps:1621; X64: ## %bb.0: ## %entry1622; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1623; X64-NEXT: vfmsubadd231ps %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x49,0xb7,0xd1]1624; X64-NEXT: ## zmm2 {%k1} = (zmm0 * zmm1) -/+ zmm21625; X64-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1626; X64-NEXT: retq ## encoding: [0xc3]1627entry:1628 %sub.i = 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>, %__C1629 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %sub.i) #101630 %1 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C) #101631 %2 = shufflevector <16 x float> %1, <16 x float> %0, <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>1632 %3 = bitcast i16 %__U to <16 x i1>1633 %4 = select <16 x i1> %3, <16 x float> %2, <16 x float> %__C1634 ret <16 x float> %41635}1636 1637define <8 x double> @test_mm512_mask_fnmadd_round_pd(<8 x double> %__A, i8 zeroext %__U, <8 x double> %__B, <8 x double> %__C) {1638; X86-LABEL: test_mm512_mask_fnmadd_round_pd:1639; X86: ## %bb.0: ## %entry1640; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1641; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1642; X86-NEXT: vfnmadd132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x19,0x9c,0xc1]1643; X86-NEXT: retl ## encoding: [0xc3]1644;1645; X64-LABEL: test_mm512_mask_fnmadd_round_pd:1646; X64: ## %bb.0: ## %entry1647; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1648; X64-NEXT: vfnmadd132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x19,0x9c,0xc1]1649; X64-NEXT: retq ## encoding: [0xc3]1650entry:1651 %sub = 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>, %__A1652 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %sub, <8 x double> %__B, <8 x double> %__C, i32 8)1653 %1 = bitcast i8 %__U to <8 x i1>1654 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__A1655 ret <8 x double> %21656}1657 1658define <8 x double> @test_mm512_mask_fnmadd_pd(<8 x double> %__A, i8 zeroext %__U, <8 x double> %__B, <8 x double> %__C) {1659; X86-LABEL: test_mm512_mask_fnmadd_pd:1660; X86: ## %bb.0: ## %entry1661; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1662; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1663; X86-NEXT: vfnmadd132pd %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x9c,0xc1]1664; X86-NEXT: ## zmm0 {%k1} = -(zmm0 * zmm1) + zmm21665; X86-NEXT: retl ## encoding: [0xc3]1666;1667; X64-LABEL: test_mm512_mask_fnmadd_pd:1668; X64: ## %bb.0: ## %entry1669; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1670; X64-NEXT: vfnmadd132pd %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x9c,0xc1]1671; X64-NEXT: ## zmm0 {%k1} = -(zmm0 * zmm1) + zmm21672; X64-NEXT: retq ## encoding: [0xc3]1673entry:1674 %sub.i = 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>, %__A1675 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %sub.i, <8 x double> %__B, <8 x double> %__C) #101676 %1 = bitcast i8 %__U to <8 x i1>1677 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__A1678 ret <8 x double> %21679}1680 1681define <16 x float> @test_mm512_mask_fnmadd_round_ps(<16 x float> %__A, i16 zeroext %__U, <16 x float> %__B, <16 x float> %__C) {1682; X86-LABEL: test_mm512_mask_fnmadd_round_ps:1683; X86: ## %bb.0: ## %entry1684; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1685; X86-NEXT: vfnmadd132ps {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x19,0x9c,0xc1]1686; X86-NEXT: retl ## encoding: [0xc3]1687;1688; X64-LABEL: test_mm512_mask_fnmadd_round_ps:1689; X64: ## %bb.0: ## %entry1690; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1691; X64-NEXT: vfnmadd132ps {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x19,0x9c,0xc1]1692; X64-NEXT: retq ## encoding: [0xc3]1693entry:1694 %sub = 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>, %__A1695 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %sub, <16 x float> %__B, <16 x float> %__C, i32 8)1696 %1 = bitcast i16 %__U to <16 x i1>1697 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__A1698 ret <16 x float> %21699}1700 1701define <16 x float> @test_mm512_mask_fnmadd_ps(<16 x float> %__A, i16 zeroext %__U, <16 x float> %__B, <16 x float> %__C) {1702; X86-LABEL: test_mm512_mask_fnmadd_ps:1703; X86: ## %bb.0: ## %entry1704; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1705; X86-NEXT: vfnmadd132ps %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x49,0x9c,0xc1]1706; X86-NEXT: ## zmm0 {%k1} = -(zmm0 * zmm1) + zmm21707; X86-NEXT: retl ## encoding: [0xc3]1708;1709; X64-LABEL: test_mm512_mask_fnmadd_ps:1710; X64: ## %bb.0: ## %entry1711; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1712; X64-NEXT: vfnmadd132ps %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x49,0x9c,0xc1]1713; X64-NEXT: ## zmm0 {%k1} = -(zmm0 * zmm1) + zmm21714; X64-NEXT: retq ## encoding: [0xc3]1715entry:1716 %sub.i = 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>, %__A1717 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %sub.i, <16 x float> %__B, <16 x float> %__C) #101718 %1 = bitcast i16 %__U to <16 x i1>1719 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__A1720 ret <16 x float> %21721}1722 1723define <8 x double> @test_mm512_mask_fnmsub_round_pd(<8 x double> %__A, i8 zeroext %__U, <8 x double> %__B, <8 x double> %__C) {1724; X86-LABEL: test_mm512_mask_fnmsub_round_pd:1725; X86: ## %bb.0: ## %entry1726; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1727; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1728; X86-NEXT: vfnmsub132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x19,0x9e,0xc1]1729; X86-NEXT: retl ## encoding: [0xc3]1730;1731; X64-LABEL: test_mm512_mask_fnmsub_round_pd:1732; X64: ## %bb.0: ## %entry1733; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1734; X64-NEXT: vfnmsub132pd {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x19,0x9e,0xc1]1735; X64-NEXT: retq ## encoding: [0xc3]1736entry:1737 %sub = 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>, %__B1738 %sub1 = 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>, %__C1739 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %__A, <8 x double> %sub, <8 x double> %sub1, i32 8)1740 %1 = bitcast i8 %__U to <8 x i1>1741 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__A1742 ret <8 x double> %21743}1744 1745define <8 x double> @test_mm512_mask3_fnmsub_round_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i8 zeroext %__U) {1746; X86-LABEL: test_mm512_mask3_fnmsub_round_pd:1747; X86: ## %bb.0: ## %entry1748; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1749; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1750; X86-NEXT: vfnmsub231pd {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x19,0xbe,0xd1]1751; X86-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1752; X86-NEXT: retl ## encoding: [0xc3]1753;1754; X64-LABEL: test_mm512_mask3_fnmsub_round_pd:1755; X64: ## %bb.0: ## %entry1756; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1757; X64-NEXT: vfnmsub231pd {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x19,0xbe,0xd1]1758; X64-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1759; X64-NEXT: retq ## encoding: [0xc3]1760entry:1761 %sub = 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>, %__B1762 %sub1 = 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>, %__C1763 %0 = tail call <8 x double> @llvm.x86.avx512.vfmadd.pd.512(<8 x double> %__A, <8 x double> %sub, <8 x double> %sub1, i32 8)1764 %1 = bitcast i8 %__U to <8 x i1>1765 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__C1766 ret <8 x double> %21767}1768 1769define <8 x double> @test_mm512_mask_fnmsub_pd(<8 x double> %__A, i8 zeroext %__U, <8 x double> %__B, <8 x double> %__C) {1770; X86-LABEL: test_mm512_mask_fnmsub_pd:1771; X86: ## %bb.0: ## %entry1772; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1773; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1774; X86-NEXT: vfnmsub132pd %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x9e,0xc1]1775; X86-NEXT: ## zmm0 {%k1} = -(zmm0 * zmm1) - zmm21776; X86-NEXT: retl ## encoding: [0xc3]1777;1778; X64-LABEL: test_mm512_mask_fnmsub_pd:1779; X64: ## %bb.0: ## %entry1780; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1781; X64-NEXT: vfnmsub132pd %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0xed,0x49,0x9e,0xc1]1782; X64-NEXT: ## zmm0 {%k1} = -(zmm0 * zmm1) - zmm21783; X64-NEXT: retq ## encoding: [0xc3]1784entry:1785 %sub.i = 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>, %__B1786 %sub2.i = 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>, %__C1787 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %sub.i, <8 x double> %sub2.i) #101788 %1 = bitcast i8 %__U to <8 x i1>1789 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__A1790 ret <8 x double> %21791}1792 1793define <8 x double> @test_mm512_mask3_fnmsub_pd(<8 x double> %__A, <8 x double> %__B, <8 x double> %__C, i8 zeroext %__U) {1794; X86-LABEL: test_mm512_mask3_fnmsub_pd:1795; X86: ## %bb.0: ## %entry1796; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1797; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1798; X86-NEXT: vfnmsub231pd %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0xbe,0xd1]1799; X86-NEXT: ## zmm2 {%k1} = -(zmm0 * zmm1) - zmm21800; X86-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1801; X86-NEXT: retl ## encoding: [0xc3]1802;1803; X64-LABEL: test_mm512_mask3_fnmsub_pd:1804; X64: ## %bb.0: ## %entry1805; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1806; X64-NEXT: vfnmsub231pd %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x49,0xbe,0xd1]1807; X64-NEXT: ## zmm2 {%k1} = -(zmm0 * zmm1) - zmm21808; X64-NEXT: vmovapd %zmm2, %zmm0 ## encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]1809; X64-NEXT: retq ## encoding: [0xc3]1810entry:1811 %sub.i = 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>, %__B1812 %sub2.i = 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>, %__C1813 %0 = tail call <8 x double> @llvm.fma.v8f64(<8 x double> %__A, <8 x double> %sub.i, <8 x double> %sub2.i) #101814 %1 = bitcast i8 %__U to <8 x i1>1815 %2 = select <8 x i1> %1, <8 x double> %0, <8 x double> %__C1816 ret <8 x double> %21817}1818 1819define <16 x float> @test_mm512_mask_fnmsub_round_ps(<16 x float> %__A, i16 zeroext %__U, <16 x float> %__B, <16 x float> %__C) {1820; X86-LABEL: test_mm512_mask_fnmsub_round_ps:1821; X86: ## %bb.0: ## %entry1822; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1823; X86-NEXT: vfnmsub132ps {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x19,0x9e,0xc1]1824; X86-NEXT: retl ## encoding: [0xc3]1825;1826; X64-LABEL: test_mm512_mask_fnmsub_round_ps:1827; X64: ## %bb.0: ## %entry1828; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1829; X64-NEXT: vfnmsub132ps {rn-sae}, %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x19,0x9e,0xc1]1830; X64-NEXT: retq ## encoding: [0xc3]1831entry:1832 %sub = 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>, %__B1833 %sub1 = 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>, %__C1834 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %__A, <16 x float> %sub, <16 x float> %sub1, i32 8)1835 %1 = bitcast i16 %__U to <16 x i1>1836 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__A1837 ret <16 x float> %21838}1839 1840define <16 x float> @test_mm512_mask3_fnmsub_round_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i16 zeroext %__U) {1841; X86-LABEL: test_mm512_mask3_fnmsub_round_ps:1842; X86: ## %bb.0: ## %entry1843; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1844; X86-NEXT: vfnmsub231ps {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x19,0xbe,0xd1]1845; X86-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1846; X86-NEXT: retl ## encoding: [0xc3]1847;1848; X64-LABEL: test_mm512_mask3_fnmsub_round_ps:1849; X64: ## %bb.0: ## %entry1850; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1851; X64-NEXT: vfnmsub231ps {rn-sae}, %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x19,0xbe,0xd1]1852; X64-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1853; X64-NEXT: retq ## encoding: [0xc3]1854entry:1855 %sub = 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>, %__B1856 %sub1 = 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>, %__C1857 %0 = tail call <16 x float> @llvm.x86.avx512.vfmadd.ps.512(<16 x float> %__A, <16 x float> %sub, <16 x float> %sub1, i32 8)1858 %1 = bitcast i16 %__U to <16 x i1>1859 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__C1860 ret <16 x float> %21861}1862 1863define <16 x float> @test_mm512_mask_fnmsub_ps(<16 x float> %__A, i16 zeroext %__U, <16 x float> %__B, <16 x float> %__C) {1864; X86-LABEL: test_mm512_mask_fnmsub_ps:1865; X86: ## %bb.0: ## %entry1866; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1867; X86-NEXT: vfnmsub132ps %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x49,0x9e,0xc1]1868; X86-NEXT: ## zmm0 {%k1} = -(zmm0 * zmm1) - zmm21869; X86-NEXT: retl ## encoding: [0xc3]1870;1871; X64-LABEL: test_mm512_mask_fnmsub_ps:1872; X64: ## %bb.0: ## %entry1873; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1874; X64-NEXT: vfnmsub132ps %zmm1, %zmm2, %zmm0 {%k1} ## encoding: [0x62,0xf2,0x6d,0x49,0x9e,0xc1]1875; X64-NEXT: ## zmm0 {%k1} = -(zmm0 * zmm1) - zmm21876; X64-NEXT: retq ## encoding: [0xc3]1877entry:1878 %sub.i = 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>, %__B1879 %sub1.i = 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>, %__C1880 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %sub.i, <16 x float> %sub1.i) #101881 %1 = bitcast i16 %__U to <16 x i1>1882 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__A1883 ret <16 x float> %21884}1885 1886define <16 x float> @test_mm512_mask3_fnmsub_ps(<16 x float> %__A, <16 x float> %__B, <16 x float> %__C, i16 zeroext %__U) {1887; X86-LABEL: test_mm512_mask3_fnmsub_ps:1888; X86: ## %bb.0: ## %entry1889; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 ## encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1890; X86-NEXT: vfnmsub231ps %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x49,0xbe,0xd1]1891; X86-NEXT: ## zmm2 {%k1} = -(zmm0 * zmm1) - zmm21892; X86-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1893; X86-NEXT: retl ## encoding: [0xc3]1894;1895; X64-LABEL: test_mm512_mask3_fnmsub_ps:1896; X64: ## %bb.0: ## %entry1897; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1898; X64-NEXT: vfnmsub231ps %zmm1, %zmm0, %zmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x49,0xbe,0xd1]1899; X64-NEXT: ## zmm2 {%k1} = -(zmm0 * zmm1) - zmm21900; X64-NEXT: vmovaps %zmm2, %zmm0 ## encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]1901; X64-NEXT: retq ## encoding: [0xc3]1902entry:1903 %sub.i = 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>, %__B1904 %sub1.i = 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>, %__C1905 %0 = tail call <16 x float> @llvm.fma.v16f32(<16 x float> %__A, <16 x float> %sub.i, <16 x float> %sub1.i) #101906 %1 = bitcast i16 %__U to <16 x i1>1907 %2 = select <16 x i1> %1, <16 x float> %0, <16 x float> %__C1908 ret <16 x float> %21909}1910 1911define <4 x float> @test_mm_mask_fmadd_ss(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {1912; X86-LABEL: test_mm_mask_fmadd_ss:1913; X86: ## %bb.0: ## %entry1914; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1915; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1916; X86-NEXT: vfmadd213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xa9,0xc2]1917; X86-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) + xmm21918; X86-NEXT: retl ## encoding: [0xc3]1919;1920; X64-LABEL: test_mm_mask_fmadd_ss:1921; X64: ## %bb.0: ## %entry1922; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1923; X64-NEXT: vfmadd213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xa9,0xc2]1924; X64-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) + xmm21925; X64-NEXT: retq ## encoding: [0xc3]1926entry:1927 %0 = extractelement <4 x float> %__W, i64 01928 %1 = extractelement <4 x float> %__A, i64 01929 %2 = extractelement <4 x float> %__B, i64 01930 %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #101931 %4 = and i8 %__U, 11932 %tobool.i = icmp eq i8 %4, 01933 %vecext1.i = extractelement <4 x float> %__W, i32 01934 %cond.i = select i1 %tobool.i, float %vecext1.i, float %31935 %vecins.i = insertelement <4 x float> %__W, float %cond.i, i32 01936 ret <4 x float> %vecins.i1937}1938 1939define <4 x float> @test_mm_mask_fmadd_round_ss(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {1940; X86-LABEL: test_mm_mask_fmadd_round_ss:1941; X86: ## %bb.0: ## %entry1942; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1943; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1944; X86-NEXT: vfmadd213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xa9,0xc2]1945; X86-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) + xmm21946; X86-NEXT: retl ## encoding: [0xc3]1947;1948; X64-LABEL: test_mm_mask_fmadd_round_ss:1949; X64: ## %bb.0: ## %entry1950; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1951; X64-NEXT: vfmadd213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xa9,0xc2]1952; X64-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) + xmm21953; X64-NEXT: retq ## encoding: [0xc3]1954entry:1955 %0 = tail call <4 x float> @llvm.x86.avx512.mask.vfmadd.ss(<4 x float> %__W, <4 x float> %__A, <4 x float> %__B, i8 %__U, i32 4)1956 ret <4 x float> %01957}1958 1959declare <4 x float> @llvm.x86.avx512.mask.vfmadd.ss(<4 x float>, <4 x float>, <4 x float>, i8, i32) #11960 1961define <4 x float> @test_mm_maskz_fmadd_ss(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {1962; X86-LABEL: test_mm_maskz_fmadd_ss:1963; X86: ## %bb.0: ## %entry1964; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1965; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1966; X86-NEXT: vfmadd213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xa9,0xc2]1967; X86-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm21968; X86-NEXT: retl ## encoding: [0xc3]1969;1970; X64-LABEL: test_mm_maskz_fmadd_ss:1971; X64: ## %bb.0: ## %entry1972; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]1973; X64-NEXT: vfmadd213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xa9,0xc2]1974; X64-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm21975; X64-NEXT: retq ## encoding: [0xc3]1976entry:1977 %0 = extractelement <4 x float> %__A, i64 01978 %1 = extractelement <4 x float> %__B, i64 01979 %2 = extractelement <4 x float> %__C, i64 01980 %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #101981 %4 = and i8 %__U, 11982 %tobool.i = icmp eq i8 %4, 01983 %cond.i = select i1 %tobool.i, float 0.000000e+00, float %31984 %vecins.i = insertelement <4 x float> %__A, float %cond.i, i32 01985 ret <4 x float> %vecins.i1986}1987 1988define <4 x float> @test_mm_maskz_fmadd_round_ss(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {1989; X86-LABEL: test_mm_maskz_fmadd_round_ss:1990; X86: ## %bb.0: ## %entry1991; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]1992; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]1993; X86-NEXT: vfmadd213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xa9,0xc2]1994; X86-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm21995; X86-NEXT: retl ## encoding: [0xc3]1996;1997; X64-LABEL: test_mm_maskz_fmadd_round_ss:1998; X64: ## %bb.0: ## %entry1999; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2000; X64-NEXT: vfmadd213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xa9,0xc2]2001; X64-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm22002; X64-NEXT: retq ## encoding: [0xc3]2003entry:2004 %0 = tail call <4 x float> @llvm.x86.avx512.maskz.vfmadd.ss(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C, i8 %__U, i32 4)2005 ret <4 x float> %02006}2007 2008declare <4 x float> @llvm.x86.avx512.maskz.vfmadd.ss(<4 x float>, <4 x float>, <4 x float>, i8, i32) #12009 2010define <4 x float> @test_mm_mask3_fmadd_ss(<4 x float> %__W, <4 x float> %__X, <4 x float> %__Y, i8 zeroext %__U) {2011; X86-LABEL: test_mm_mask3_fmadd_ss:2012; X86: ## %bb.0: ## %entry2013; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2014; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2015; X86-NEXT: vfmadd231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xb9,0xd1]2016; X86-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) + xmm22017; X86-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2018; X86-NEXT: retl ## encoding: [0xc3]2019;2020; X64-LABEL: test_mm_mask3_fmadd_ss:2021; X64: ## %bb.0: ## %entry2022; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2023; X64-NEXT: vfmadd231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xb9,0xd1]2024; X64-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) + xmm22025; X64-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2026; X64-NEXT: retq ## encoding: [0xc3]2027entry:2028 %0 = extractelement <4 x float> %__W, i64 02029 %1 = extractelement <4 x float> %__X, i64 02030 %2 = extractelement <4 x float> %__Y, i64 02031 %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #102032 %4 = and i8 %__U, 12033 %tobool.i = icmp eq i8 %4, 02034 %vecext1.i = extractelement <4 x float> %__Y, i32 02035 %cond.i = select i1 %tobool.i, float %vecext1.i, float %32036 %vecins.i = insertelement <4 x float> %__Y, float %cond.i, i32 02037 ret <4 x float> %vecins.i2038}2039 2040define <4 x float> @test_mm_mask3_fmadd_round_ss(<4 x float> %__W, <4 x float> %__X, <4 x float> %__Y, i8 zeroext %__U) {2041; X86-LABEL: test_mm_mask3_fmadd_round_ss:2042; X86: ## %bb.0: ## %entry2043; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2044; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2045; X86-NEXT: vfmadd231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xb9,0xd1]2046; X86-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) + xmm22047; X86-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2048; X86-NEXT: retl ## encoding: [0xc3]2049;2050; X64-LABEL: test_mm_mask3_fmadd_round_ss:2051; X64: ## %bb.0: ## %entry2052; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2053; X64-NEXT: vfmadd231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xb9,0xd1]2054; X64-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) + xmm22055; X64-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2056; X64-NEXT: retq ## encoding: [0xc3]2057entry:2058 %0 = tail call <4 x float> @llvm.x86.avx512.mask3.vfmadd.ss(<4 x float> %__W, <4 x float> %__X, <4 x float> %__Y, i8 %__U, i32 4)2059 ret <4 x float> %02060}2061 2062declare <4 x float> @llvm.x86.avx512.mask3.vfmadd.ss(<4 x float>, <4 x float>, <4 x float>, i8, i32) #12063 2064define <4 x float> @test_mm_mask_fmsub_ss(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {2065; X86-LABEL: test_mm_mask_fmsub_ss:2066; X86: ## %bb.0: ## %entry2067; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2068; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2069; X86-NEXT: vfmsub213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xab,0xc2]2070; X86-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) - xmm22071; X86-NEXT: retl ## encoding: [0xc3]2072;2073; X64-LABEL: test_mm_mask_fmsub_ss:2074; X64: ## %bb.0: ## %entry2075; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2076; X64-NEXT: vfmsub213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xab,0xc2]2077; X64-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) - xmm22078; X64-NEXT: retq ## encoding: [0xc3]2079entry:2080 %0 = extractelement <4 x float> %__W, i64 02081 %1 = extractelement <4 x float> %__A, i64 02082 %.rhs.i = extractelement <4 x float> %__B, i64 02083 %2 = fsub float -0.000000e+00, %.rhs.i2084 %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #102085 %4 = and i8 %__U, 12086 %tobool.i = icmp eq i8 %4, 02087 %vecext1.i = extractelement <4 x float> %__W, i32 02088 %cond.i = select i1 %tobool.i, float %vecext1.i, float %32089 %vecins.i = insertelement <4 x float> %__W, float %cond.i, i32 02090 ret <4 x float> %vecins.i2091}2092 2093define <4 x float> @test_mm_mask_fmsub_round_ss(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {2094; X86-LABEL: test_mm_mask_fmsub_round_ss:2095; X86: ## %bb.0: ## %entry2096; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2097; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2098; X86-NEXT: vfmsub213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xab,0xc2]2099; X86-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) - xmm22100; X86-NEXT: retl ## encoding: [0xc3]2101;2102; X64-LABEL: test_mm_mask_fmsub_round_ss:2103; X64: ## %bb.0: ## %entry2104; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2105; X64-NEXT: vfmsub213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xab,0xc2]2106; X64-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) - xmm22107; X64-NEXT: retq ## encoding: [0xc3]2108entry:2109 %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__B2110 %0 = tail call <4 x float> @llvm.x86.avx512.mask.vfmadd.ss(<4 x float> %__W, <4 x float> %__A, <4 x float> %sub, i8 %__U, i32 4)2111 ret <4 x float> %02112}2113 2114define <4 x float> @test_mm_maskz_fmsub_ss(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {2115; X86-LABEL: test_mm_maskz_fmsub_ss:2116; X86: ## %bb.0: ## %entry2117; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2118; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2119; X86-NEXT: vfmsub213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xab,0xc2]2120; X86-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm22121; X86-NEXT: retl ## encoding: [0xc3]2122;2123; X64-LABEL: test_mm_maskz_fmsub_ss:2124; X64: ## %bb.0: ## %entry2125; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2126; X64-NEXT: vfmsub213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xab,0xc2]2127; X64-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm22128; X64-NEXT: retq ## encoding: [0xc3]2129entry:2130 %0 = extractelement <4 x float> %__A, i64 02131 %1 = extractelement <4 x float> %__B, i64 02132 %.rhs.i = extractelement <4 x float> %__C, i64 02133 %2 = fsub float -0.000000e+00, %.rhs.i2134 %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #102135 %4 = and i8 %__U, 12136 %tobool.i = icmp eq i8 %4, 02137 %cond.i = select i1 %tobool.i, float 0.000000e+00, float %32138 %vecins.i = insertelement <4 x float> %__A, float %cond.i, i32 02139 ret <4 x float> %vecins.i2140}2141 2142define <4 x float> @test_mm_maskz_fmsub_round_ss(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {2143; X86-LABEL: test_mm_maskz_fmsub_round_ss:2144; X86: ## %bb.0: ## %entry2145; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2146; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2147; X86-NEXT: vfmsub213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xab,0xc2]2148; X86-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm22149; X86-NEXT: retl ## encoding: [0xc3]2150;2151; X64-LABEL: test_mm_maskz_fmsub_round_ss:2152; X64: ## %bb.0: ## %entry2153; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2154; X64-NEXT: vfmsub213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xab,0xc2]2155; X64-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm22156; X64-NEXT: retq ## encoding: [0xc3]2157entry:2158 %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C2159 %0 = tail call <4 x float> @llvm.x86.avx512.maskz.vfmadd.ss(<4 x float> %__A, <4 x float> %__B, <4 x float> %sub, i8 %__U, i32 4)2160 ret <4 x float> %02161}2162 2163define <4 x float> @test_mm_mask3_fmsub_ss(<4 x float> %__W, <4 x float> %__X, <4 x float> %__Y, i8 zeroext %__U) {2164; X86-LABEL: test_mm_mask3_fmsub_ss:2165; X86: ## %bb.0: ## %entry2166; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2167; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2168; X86-NEXT: vfmsub231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xbb,0xd1]2169; X86-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) - xmm22170; X86-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2171; X86-NEXT: retl ## encoding: [0xc3]2172;2173; X64-LABEL: test_mm_mask3_fmsub_ss:2174; X64: ## %bb.0: ## %entry2175; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2176; X64-NEXT: vfmsub231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xbb,0xd1]2177; X64-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) - xmm22178; X64-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2179; X64-NEXT: retq ## encoding: [0xc3]2180entry:2181 %0 = extractelement <4 x float> %__W, i64 02182 %1 = extractelement <4 x float> %__X, i64 02183 %.rhs.i = extractelement <4 x float> %__Y, i64 02184 %2 = fsub float -0.000000e+00, %.rhs.i2185 %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #102186 %4 = and i8 %__U, 12187 %tobool.i = icmp eq i8 %4, 02188 %vecext1.i = extractelement <4 x float> %__Y, i32 02189 %cond.i = select i1 %tobool.i, float %vecext1.i, float %32190 %vecins.i = insertelement <4 x float> %__Y, float %cond.i, i32 02191 ret <4 x float> %vecins.i2192}2193 2194define <4 x float> @test_mm_mask3_fmsub_round_ss(<4 x float> %__W, <4 x float> %__X, <4 x float> %__Y, i8 zeroext %__U) {2195; X86-LABEL: test_mm_mask3_fmsub_round_ss:2196; X86: ## %bb.0: ## %entry2197; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2198; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2199; X86-NEXT: vfmsub231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xbb,0xd1]2200; X86-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) - xmm22201; X86-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2202; X86-NEXT: retl ## encoding: [0xc3]2203;2204; X64-LABEL: test_mm_mask3_fmsub_round_ss:2205; X64: ## %bb.0: ## %entry2206; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2207; X64-NEXT: vfmsub231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xbb,0xd1]2208; X64-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) - xmm22209; X64-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2210; X64-NEXT: retq ## encoding: [0xc3]2211entry:2212 %0 = tail call <4 x float> @llvm.x86.avx512.mask3.vfmsub.ss(<4 x float> %__W, <4 x float> %__X, <4 x float> %__Y, i8 %__U, i32 4)2213 ret <4 x float> %02214}2215 2216declare <4 x float> @llvm.x86.avx512.mask3.vfmsub.ss(<4 x float>, <4 x float>, <4 x float>, i8, i32) #12217 2218define <4 x float> @test_mm_mask_fnmadd_ss(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {2219; X86-LABEL: test_mm_mask_fnmadd_ss:2220; X86: ## %bb.0: ## %entry2221; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2222; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2223; X86-NEXT: vfnmadd213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xad,0xc2]2224; X86-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) + xmm22225; X86-NEXT: retl ## encoding: [0xc3]2226;2227; X64-LABEL: test_mm_mask_fnmadd_ss:2228; X64: ## %bb.0: ## %entry2229; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2230; X64-NEXT: vfnmadd213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xad,0xc2]2231; X64-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) + xmm22232; X64-NEXT: retq ## encoding: [0xc3]2233entry:2234 %0 = extractelement <4 x float> %__W, i64 02235 %.rhs.i = extractelement <4 x float> %__A, i64 02236 %1 = fsub float -0.000000e+00, %.rhs.i2237 %2 = extractelement <4 x float> %__B, i64 02238 %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #102239 %4 = and i8 %__U, 12240 %tobool.i = icmp eq i8 %4, 02241 %vecext1.i = extractelement <4 x float> %__W, i32 02242 %cond.i = select i1 %tobool.i, float %vecext1.i, float %32243 %vecins.i = insertelement <4 x float> %__W, float %cond.i, i32 02244 ret <4 x float> %vecins.i2245}2246 2247define <4 x float> @test_mm_mask_fnmadd_round_ss(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {2248; X86-LABEL: test_mm_mask_fnmadd_round_ss:2249; X86: ## %bb.0: ## %entry2250; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2251; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2252; X86-NEXT: vfnmadd213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xad,0xc2]2253; X86-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) + xmm22254; X86-NEXT: retl ## encoding: [0xc3]2255;2256; X64-LABEL: test_mm_mask_fnmadd_round_ss:2257; X64: ## %bb.0: ## %entry2258; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2259; X64-NEXT: vfnmadd213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xad,0xc2]2260; X64-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) + xmm22261; X64-NEXT: retq ## encoding: [0xc3]2262entry:2263 %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__A2264 %0 = tail call <4 x float> @llvm.x86.avx512.mask.vfmadd.ss(<4 x float> %__W, <4 x float> %sub, <4 x float> %__B, i8 %__U, i32 4)2265 ret <4 x float> %02266}2267 2268define <4 x float> @test_mm_maskz_fnmadd_ss(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {2269; X86-LABEL: test_mm_maskz_fnmadd_ss:2270; X86: ## %bb.0: ## %entry2271; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2272; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2273; X86-NEXT: vfnmadd213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xad,0xc2]2274; X86-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm22275; X86-NEXT: retl ## encoding: [0xc3]2276;2277; X64-LABEL: test_mm_maskz_fnmadd_ss:2278; X64: ## %bb.0: ## %entry2279; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2280; X64-NEXT: vfnmadd213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xad,0xc2]2281; X64-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm22282; X64-NEXT: retq ## encoding: [0xc3]2283entry:2284 %0 = extractelement <4 x float> %__A, i64 02285 %.rhs.i = extractelement <4 x float> %__B, i64 02286 %1 = fsub float -0.000000e+00, %.rhs.i2287 %2 = extractelement <4 x float> %__C, i64 02288 %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #102289 %4 = and i8 %__U, 12290 %tobool.i = icmp eq i8 %4, 02291 %cond.i = select i1 %tobool.i, float 0.000000e+00, float %32292 %vecins.i = insertelement <4 x float> %__A, float %cond.i, i32 02293 ret <4 x float> %vecins.i2294}2295 2296define <4 x float> @test_mm_maskz_fnmadd_round_ss(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {2297; X86-LABEL: test_mm_maskz_fnmadd_round_ss:2298; X86: ## %bb.0: ## %entry2299; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2300; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2301; X86-NEXT: vfnmadd213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xad,0xc2]2302; X86-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm22303; X86-NEXT: retl ## encoding: [0xc3]2304;2305; X64-LABEL: test_mm_maskz_fnmadd_round_ss:2306; X64: ## %bb.0: ## %entry2307; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2308; X64-NEXT: vfnmadd213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xad,0xc2]2309; X64-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm22310; X64-NEXT: retq ## encoding: [0xc3]2311entry:2312 %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__B2313 %0 = tail call <4 x float> @llvm.x86.avx512.maskz.vfmadd.ss(<4 x float> %__A, <4 x float> %sub, <4 x float> %__C, i8 %__U, i32 4)2314 ret <4 x float> %02315}2316 2317define <4 x float> @test_mm_mask3_fnmadd_ss(<4 x float> %__W, <4 x float> %__X, <4 x float> %__Y, i8 zeroext %__U) {2318; X86-LABEL: test_mm_mask3_fnmadd_ss:2319; X86: ## %bb.0: ## %entry2320; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2321; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2322; X86-NEXT: vfnmadd231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xbd,0xd1]2323; X86-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) + xmm22324; X86-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2325; X86-NEXT: retl ## encoding: [0xc3]2326;2327; X64-LABEL: test_mm_mask3_fnmadd_ss:2328; X64: ## %bb.0: ## %entry2329; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2330; X64-NEXT: vfnmadd231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xbd,0xd1]2331; X64-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) + xmm22332; X64-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2333; X64-NEXT: retq ## encoding: [0xc3]2334entry:2335 %0 = extractelement <4 x float> %__W, i64 02336 %.rhs.i = extractelement <4 x float> %__X, i64 02337 %1 = fsub float -0.000000e+00, %.rhs.i2338 %2 = extractelement <4 x float> %__Y, i64 02339 %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #102340 %4 = and i8 %__U, 12341 %tobool.i = icmp eq i8 %4, 02342 %vecext1.i = extractelement <4 x float> %__Y, i32 02343 %cond.i = select i1 %tobool.i, float %vecext1.i, float %32344 %vecins.i = insertelement <4 x float> %__Y, float %cond.i, i32 02345 ret <4 x float> %vecins.i2346}2347 2348define <4 x float> @test_mm_mask3_fnmadd_round_ss(<4 x float> %__W, <4 x float> %__X, <4 x float> %__Y, i8 zeroext %__U) {2349; X86-LABEL: test_mm_mask3_fnmadd_round_ss:2350; X86: ## %bb.0: ## %entry2351; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2352; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2353; X86-NEXT: vfnmadd231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xbd,0xd1]2354; X86-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) + xmm22355; X86-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2356; X86-NEXT: retl ## encoding: [0xc3]2357;2358; X64-LABEL: test_mm_mask3_fnmadd_round_ss:2359; X64: ## %bb.0: ## %entry2360; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2361; X64-NEXT: vfnmadd231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xbd,0xd1]2362; X64-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) + xmm22363; X64-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2364; X64-NEXT: retq ## encoding: [0xc3]2365entry:2366 %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__X2367 %0 = tail call <4 x float> @llvm.x86.avx512.mask3.vfmadd.ss(<4 x float> %__W, <4 x float> %sub, <4 x float> %__Y, i8 %__U, i32 4)2368 ret <4 x float> %02369}2370 2371define <4 x float> @test_mm_mask_fnmsub_ss(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {2372; X86-LABEL: test_mm_mask_fnmsub_ss:2373; X86: ## %bb.0: ## %entry2374; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2375; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2376; X86-NEXT: vfnmsub213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xaf,0xc2]2377; X86-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) - xmm22378; X86-NEXT: retl ## encoding: [0xc3]2379;2380; X64-LABEL: test_mm_mask_fnmsub_ss:2381; X64: ## %bb.0: ## %entry2382; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2383; X64-NEXT: vfnmsub213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xaf,0xc2]2384; X64-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) - xmm22385; X64-NEXT: retq ## encoding: [0xc3]2386entry:2387 %0 = extractelement <4 x float> %__W, i64 02388 %.rhs.i = extractelement <4 x float> %__A, i64 02389 %1 = fsub float -0.000000e+00, %.rhs.i2390 %.rhs7.i = extractelement <4 x float> %__B, i64 02391 %2 = fsub float -0.000000e+00, %.rhs7.i2392 %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #102393 %4 = and i8 %__U, 12394 %tobool.i = icmp eq i8 %4, 02395 %vecext2.i = extractelement <4 x float> %__W, i32 02396 %cond.i = select i1 %tobool.i, float %vecext2.i, float %32397 %vecins.i = insertelement <4 x float> %__W, float %cond.i, i32 02398 ret <4 x float> %vecins.i2399}2400 2401define <4 x float> @test_mm_mask_fnmsub_round_ss(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {2402; X86-LABEL: test_mm_mask_fnmsub_round_ss:2403; X86: ## %bb.0: ## %entry2404; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2405; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2406; X86-NEXT: vfnmsub213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xaf,0xc2]2407; X86-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) - xmm22408; X86-NEXT: retl ## encoding: [0xc3]2409;2410; X64-LABEL: test_mm_mask_fnmsub_round_ss:2411; X64: ## %bb.0: ## %entry2412; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2413; X64-NEXT: vfnmsub213ss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0x75,0x09,0xaf,0xc2]2414; X64-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) - xmm22415; X64-NEXT: retq ## encoding: [0xc3]2416entry:2417 %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__A2418 %sub1 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__B2419 %0 = tail call <4 x float> @llvm.x86.avx512.mask.vfmadd.ss(<4 x float> %__W, <4 x float> %sub, <4 x float> %sub1, i8 %__U, i32 4)2420 ret <4 x float> %02421}2422 2423define <4 x float> @test_mm_maskz_fnmsub_ss(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {2424; X86-LABEL: test_mm_maskz_fnmsub_ss:2425; X86: ## %bb.0: ## %entry2426; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2427; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2428; X86-NEXT: vfnmsub213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xaf,0xc2]2429; X86-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm22430; X86-NEXT: retl ## encoding: [0xc3]2431;2432; X64-LABEL: test_mm_maskz_fnmsub_ss:2433; X64: ## %bb.0: ## %entry2434; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2435; X64-NEXT: vfnmsub213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xaf,0xc2]2436; X64-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm22437; X64-NEXT: retq ## encoding: [0xc3]2438entry:2439 %0 = extractelement <4 x float> %__A, i64 02440 %.rhs.i = extractelement <4 x float> %__B, i64 02441 %1 = fsub float -0.000000e+00, %.rhs.i2442 %.rhs5.i = extractelement <4 x float> %__C, i64 02443 %2 = fsub float -0.000000e+00, %.rhs5.i2444 %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #102445 %4 = and i8 %__U, 12446 %tobool.i = icmp eq i8 %4, 02447 %cond.i = select i1 %tobool.i, float 0.000000e+00, float %32448 %vecins.i = insertelement <4 x float> %__A, float %cond.i, i32 02449 ret <4 x float> %vecins.i2450}2451 2452define <4 x float> @test_mm_maskz_fnmsub_round_ss(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {2453; X86-LABEL: test_mm_maskz_fnmsub_round_ss:2454; X86: ## %bb.0: ## %entry2455; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2456; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2457; X86-NEXT: vfnmsub213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xaf,0xc2]2458; X86-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm22459; X86-NEXT: retl ## encoding: [0xc3]2460;2461; X64-LABEL: test_mm_maskz_fnmsub_round_ss:2462; X64: ## %bb.0: ## %entry2463; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2464; X64-NEXT: vfnmsub213ss %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0x75,0x89,0xaf,0xc2]2465; X64-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm22466; X64-NEXT: retq ## encoding: [0xc3]2467entry:2468 %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__B2469 %sub1 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C2470 %0 = tail call <4 x float> @llvm.x86.avx512.maskz.vfmadd.ss(<4 x float> %__A, <4 x float> %sub, <4 x float> %sub1, i8 %__U, i32 4)2471 ret <4 x float> %02472}2473 2474define <4 x float> @test_mm_mask3_fnmsub_ss(<4 x float> %__W, <4 x float> %__X, <4 x float> %__Y, i8 zeroext %__U) {2475; X86-LABEL: test_mm_mask3_fnmsub_ss:2476; X86: ## %bb.0: ## %entry2477; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2478; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2479; X86-NEXT: vfnmsub231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xbf,0xd1]2480; X86-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) - xmm22481; X86-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2482; X86-NEXT: retl ## encoding: [0xc3]2483;2484; X64-LABEL: test_mm_mask3_fnmsub_ss:2485; X64: ## %bb.0: ## %entry2486; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2487; X64-NEXT: vfnmsub231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xbf,0xd1]2488; X64-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) - xmm22489; X64-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2490; X64-NEXT: retq ## encoding: [0xc3]2491entry:2492 %0 = extractelement <4 x float> %__W, i64 02493 %.rhs.i = extractelement <4 x float> %__X, i64 02494 %1 = fsub float -0.000000e+00, %.rhs.i2495 %.rhs7.i = extractelement <4 x float> %__Y, i64 02496 %2 = fsub float -0.000000e+00, %.rhs7.i2497 %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #102498 %4 = and i8 %__U, 12499 %tobool.i = icmp eq i8 %4, 02500 %vecext2.i = extractelement <4 x float> %__Y, i32 02501 %cond.i = select i1 %tobool.i, float %vecext2.i, float %32502 %vecins.i = insertelement <4 x float> %__Y, float %cond.i, i32 02503 ret <4 x float> %vecins.i2504}2505 2506define <4 x float> @test_mm_mask3_fnmsub_round_ss(<4 x float> %__W, <4 x float> %__X, <4 x float> %__Y, i8 zeroext %__U) {2507; X86-LABEL: test_mm_mask3_fnmsub_round_ss:2508; X86: ## %bb.0: ## %entry2509; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2510; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2511; X86-NEXT: vfnmsub231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xbf,0xd1]2512; X86-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) - xmm22513; X86-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2514; X86-NEXT: retl ## encoding: [0xc3]2515;2516; X64-LABEL: test_mm_mask3_fnmsub_round_ss:2517; X64: ## %bb.0: ## %entry2518; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2519; X64-NEXT: vfnmsub231ss %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0x7d,0x09,0xbf,0xd1]2520; X64-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) - xmm22521; X64-NEXT: vmovaps %xmm2, %xmm0 ## encoding: [0xc5,0xf8,0x28,0xc2]2522; X64-NEXT: retq ## encoding: [0xc3]2523entry:2524 %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__X2525 %0 = tail call <4 x float> @llvm.x86.avx512.mask3.vfmsub.ss(<4 x float> %__W, <4 x float> %sub, <4 x float> %__Y, i8 %__U, i32 4)2526 ret <4 x float> %02527}2528 2529define <2 x double> @test_mm_mask_fmadd_sd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {2530; X86-LABEL: test_mm_mask_fmadd_sd:2531; X86: ## %bb.0: ## %entry2532; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2533; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2534; X86-NEXT: vfmadd213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xa9,0xc2]2535; X86-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) + xmm22536; X86-NEXT: retl ## encoding: [0xc3]2537;2538; X64-LABEL: test_mm_mask_fmadd_sd:2539; X64: ## %bb.0: ## %entry2540; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2541; X64-NEXT: vfmadd213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xa9,0xc2]2542; X64-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) + xmm22543; X64-NEXT: retq ## encoding: [0xc3]2544entry:2545 %0 = extractelement <2 x double> %__W, i64 02546 %1 = extractelement <2 x double> %__A, i64 02547 %2 = extractelement <2 x double> %__B, i64 02548 %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #102549 %4 = and i8 %__U, 12550 %tobool.i = icmp eq i8 %4, 02551 %vecext1.i = extractelement <2 x double> %__W, i32 02552 %cond.i = select i1 %tobool.i, double %vecext1.i, double %32553 %vecins.i = insertelement <2 x double> %__W, double %cond.i, i32 02554 ret <2 x double> %vecins.i2555}2556 2557define <2 x double> @test_mm_mask_fmadd_round_sd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {2558; X86-LABEL: test_mm_mask_fmadd_round_sd:2559; X86: ## %bb.0: ## %entry2560; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2561; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2562; X86-NEXT: vfmadd213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xa9,0xc2]2563; X86-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) + xmm22564; X86-NEXT: retl ## encoding: [0xc3]2565;2566; X64-LABEL: test_mm_mask_fmadd_round_sd:2567; X64: ## %bb.0: ## %entry2568; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2569; X64-NEXT: vfmadd213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xa9,0xc2]2570; X64-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) + xmm22571; X64-NEXT: retq ## encoding: [0xc3]2572entry:2573 %0 = tail call <2 x double> @llvm.x86.avx512.mask.vfmadd.sd(<2 x double> %__W, <2 x double> %__A, <2 x double> %__B, i8 %__U, i32 4)2574 ret <2 x double> %02575}2576 2577declare <2 x double> @llvm.x86.avx512.mask.vfmadd.sd(<2 x double>, <2 x double>, <2 x double>, i8, i32) #12578 2579define <2 x double> @test_mm_maskz_fmadd_sd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {2580; X86-LABEL: test_mm_maskz_fmadd_sd:2581; X86: ## %bb.0: ## %entry2582; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2583; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2584; X86-NEXT: vfmadd213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xa9,0xc2]2585; X86-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm22586; X86-NEXT: retl ## encoding: [0xc3]2587;2588; X64-LABEL: test_mm_maskz_fmadd_sd:2589; X64: ## %bb.0: ## %entry2590; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2591; X64-NEXT: vfmadd213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xa9,0xc2]2592; X64-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm22593; X64-NEXT: retq ## encoding: [0xc3]2594entry:2595 %0 = extractelement <2 x double> %__A, i64 02596 %1 = extractelement <2 x double> %__B, i64 02597 %2 = extractelement <2 x double> %__C, i64 02598 %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #102599 %4 = and i8 %__U, 12600 %tobool.i = icmp eq i8 %4, 02601 %cond.i = select i1 %tobool.i, double 0.000000e+00, double %32602 %vecins.i = insertelement <2 x double> %__A, double %cond.i, i32 02603 ret <2 x double> %vecins.i2604}2605 2606define <2 x double> @test_mm_maskz_fmadd_round_sd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {2607; X86-LABEL: test_mm_maskz_fmadd_round_sd:2608; X86: ## %bb.0: ## %entry2609; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2610; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2611; X86-NEXT: vfmadd213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xa9,0xc2]2612; X86-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm22613; X86-NEXT: retl ## encoding: [0xc3]2614;2615; X64-LABEL: test_mm_maskz_fmadd_round_sd:2616; X64: ## %bb.0: ## %entry2617; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2618; X64-NEXT: vfmadd213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xa9,0xc2]2619; X64-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm22620; X64-NEXT: retq ## encoding: [0xc3]2621entry:2622 %0 = tail call <2 x double> @llvm.x86.avx512.maskz.vfmadd.sd(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C, i8 %__U, i32 4)2623 ret <2 x double> %02624}2625 2626declare <2 x double> @llvm.x86.avx512.maskz.vfmadd.sd(<2 x double>, <2 x double>, <2 x double>, i8, i32) #12627 2628define <2 x double> @test_mm_mask3_fmadd_sd(<2 x double> %__W, <2 x double> %__X, <2 x double> %__Y, i8 zeroext %__U) {2629; X86-LABEL: test_mm_mask3_fmadd_sd:2630; X86: ## %bb.0: ## %entry2631; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2632; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2633; X86-NEXT: vfmadd231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xb9,0xd1]2634; X86-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) + xmm22635; X86-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]2636; X86-NEXT: retl ## encoding: [0xc3]2637;2638; X64-LABEL: test_mm_mask3_fmadd_sd:2639; X64: ## %bb.0: ## %entry2640; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2641; X64-NEXT: vfmadd231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xb9,0xd1]2642; X64-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) + xmm22643; X64-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]2644; X64-NEXT: retq ## encoding: [0xc3]2645entry:2646 %0 = extractelement <2 x double> %__W, i64 02647 %1 = extractelement <2 x double> %__X, i64 02648 %2 = extractelement <2 x double> %__Y, i64 02649 %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #102650 %4 = and i8 %__U, 12651 %tobool.i = icmp eq i8 %4, 02652 %vecext1.i = extractelement <2 x double> %__Y, i32 02653 %cond.i = select i1 %tobool.i, double %vecext1.i, double %32654 %vecins.i = insertelement <2 x double> %__Y, double %cond.i, i32 02655 ret <2 x double> %vecins.i2656}2657 2658define <2 x double> @test_mm_mask3_fmadd_round_sd(<2 x double> %__W, <2 x double> %__X, <2 x double> %__Y, i8 zeroext %__U) {2659; X86-LABEL: test_mm_mask3_fmadd_round_sd:2660; X86: ## %bb.0: ## %entry2661; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2662; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2663; X86-NEXT: vfmadd231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xb9,0xd1]2664; X86-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) + xmm22665; X86-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]2666; X86-NEXT: retl ## encoding: [0xc3]2667;2668; X64-LABEL: test_mm_mask3_fmadd_round_sd:2669; X64: ## %bb.0: ## %entry2670; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2671; X64-NEXT: vfmadd231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xb9,0xd1]2672; X64-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) + xmm22673; X64-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]2674; X64-NEXT: retq ## encoding: [0xc3]2675entry:2676 %0 = tail call <2 x double> @llvm.x86.avx512.mask3.vfmadd.sd(<2 x double> %__W, <2 x double> %__X, <2 x double> %__Y, i8 %__U, i32 4)2677 ret <2 x double> %02678}2679 2680declare <2 x double> @llvm.x86.avx512.mask3.vfmadd.sd(<2 x double>, <2 x double>, <2 x double>, i8, i32) #12681 2682define <2 x double> @test_mm_mask_fmsub_sd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {2683; X86-LABEL: test_mm_mask_fmsub_sd:2684; X86: ## %bb.0: ## %entry2685; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2686; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2687; X86-NEXT: vfmsub213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xab,0xc2]2688; X86-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) - xmm22689; X86-NEXT: retl ## encoding: [0xc3]2690;2691; X64-LABEL: test_mm_mask_fmsub_sd:2692; X64: ## %bb.0: ## %entry2693; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2694; X64-NEXT: vfmsub213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xab,0xc2]2695; X64-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) - xmm22696; X64-NEXT: retq ## encoding: [0xc3]2697entry:2698 %0 = extractelement <2 x double> %__W, i64 02699 %1 = extractelement <2 x double> %__A, i64 02700 %.rhs.i = extractelement <2 x double> %__B, i64 02701 %2 = fsub double -0.000000e+00, %.rhs.i2702 %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #102703 %4 = and i8 %__U, 12704 %tobool.i = icmp eq i8 %4, 02705 %vecext1.i = extractelement <2 x double> %__W, i32 02706 %cond.i = select i1 %tobool.i, double %vecext1.i, double %32707 %vecins.i = insertelement <2 x double> %__W, double %cond.i, i32 02708 ret <2 x double> %vecins.i2709}2710 2711define <2 x double> @test_mm_mask_fmsub_round_sd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {2712; X86-LABEL: test_mm_mask_fmsub_round_sd:2713; X86: ## %bb.0: ## %entry2714; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2715; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2716; X86-NEXT: vfmsub213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xab,0xc2]2717; X86-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) - xmm22718; X86-NEXT: retl ## encoding: [0xc3]2719;2720; X64-LABEL: test_mm_mask_fmsub_round_sd:2721; X64: ## %bb.0: ## %entry2722; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2723; X64-NEXT: vfmsub213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xab,0xc2]2724; X64-NEXT: ## xmm0 {%k1} = (xmm1 * xmm0) - xmm22725; X64-NEXT: retq ## encoding: [0xc3]2726entry:2727 %sub = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__B2728 %0 = tail call <2 x double> @llvm.x86.avx512.mask.vfmadd.sd(<2 x double> %__W, <2 x double> %__A, <2 x double> %sub, i8 %__U, i32 4)2729 ret <2 x double> %02730}2731 2732define <2 x double> @test_mm_maskz_fmsub_sd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {2733; X86-LABEL: test_mm_maskz_fmsub_sd:2734; X86: ## %bb.0: ## %entry2735; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2736; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2737; X86-NEXT: vfmsub213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xab,0xc2]2738; X86-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm22739; X86-NEXT: retl ## encoding: [0xc3]2740;2741; X64-LABEL: test_mm_maskz_fmsub_sd:2742; X64: ## %bb.0: ## %entry2743; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2744; X64-NEXT: vfmsub213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xab,0xc2]2745; X64-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm22746; X64-NEXT: retq ## encoding: [0xc3]2747entry:2748 %0 = extractelement <2 x double> %__A, i64 02749 %1 = extractelement <2 x double> %__B, i64 02750 %.rhs.i = extractelement <2 x double> %__C, i64 02751 %2 = fsub double -0.000000e+00, %.rhs.i2752 %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #102753 %4 = and i8 %__U, 12754 %tobool.i = icmp eq i8 %4, 02755 %cond.i = select i1 %tobool.i, double 0.000000e+00, double %32756 %vecins.i = insertelement <2 x double> %__A, double %cond.i, i32 02757 ret <2 x double> %vecins.i2758}2759 2760define <2 x double> @test_mm_maskz_fmsub_round_sd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {2761; X86-LABEL: test_mm_maskz_fmsub_round_sd:2762; X86: ## %bb.0: ## %entry2763; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2764; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2765; X86-NEXT: vfmsub213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xab,0xc2]2766; X86-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm22767; X86-NEXT: retl ## encoding: [0xc3]2768;2769; X64-LABEL: test_mm_maskz_fmsub_round_sd:2770; X64: ## %bb.0: ## %entry2771; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2772; X64-NEXT: vfmsub213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xab,0xc2]2773; X64-NEXT: ## xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm22774; X64-NEXT: retq ## encoding: [0xc3]2775entry:2776 %sub = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C2777 %0 = tail call <2 x double> @llvm.x86.avx512.maskz.vfmadd.sd(<2 x double> %__A, <2 x double> %__B, <2 x double> %sub, i8 %__U, i32 4)2778 ret <2 x double> %02779}2780 2781define <2 x double> @test_mm_mask3_fmsub_sd(<2 x double> %__W, <2 x double> %__X, <2 x double> %__Y, i8 zeroext %__U) {2782; X86-LABEL: test_mm_mask3_fmsub_sd:2783; X86: ## %bb.0: ## %entry2784; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2785; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2786; X86-NEXT: vfmsub231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xbb,0xd1]2787; X86-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) - xmm22788; X86-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]2789; X86-NEXT: retl ## encoding: [0xc3]2790;2791; X64-LABEL: test_mm_mask3_fmsub_sd:2792; X64: ## %bb.0: ## %entry2793; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2794; X64-NEXT: vfmsub231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xbb,0xd1]2795; X64-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) - xmm22796; X64-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]2797; X64-NEXT: retq ## encoding: [0xc3]2798entry:2799 %0 = extractelement <2 x double> %__W, i64 02800 %1 = extractelement <2 x double> %__X, i64 02801 %.rhs.i = extractelement <2 x double> %__Y, i64 02802 %2 = fsub double -0.000000e+00, %.rhs.i2803 %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #102804 %4 = and i8 %__U, 12805 %tobool.i = icmp eq i8 %4, 02806 %vecext1.i = extractelement <2 x double> %__Y, i32 02807 %cond.i = select i1 %tobool.i, double %vecext1.i, double %32808 %vecins.i = insertelement <2 x double> %__Y, double %cond.i, i32 02809 ret <2 x double> %vecins.i2810}2811 2812define <2 x double> @test_mm_mask3_fmsub_round_sd(<2 x double> %__W, <2 x double> %__X, <2 x double> %__Y, i8 zeroext %__U) {2813; X86-LABEL: test_mm_mask3_fmsub_round_sd:2814; X86: ## %bb.0: ## %entry2815; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2816; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2817; X86-NEXT: vfmsub231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xbb,0xd1]2818; X86-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) - xmm22819; X86-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]2820; X86-NEXT: retl ## encoding: [0xc3]2821;2822; X64-LABEL: test_mm_mask3_fmsub_round_sd:2823; X64: ## %bb.0: ## %entry2824; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2825; X64-NEXT: vfmsub231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xbb,0xd1]2826; X64-NEXT: ## xmm2 {%k1} = (xmm0 * xmm1) - xmm22827; X64-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]2828; X64-NEXT: retq ## encoding: [0xc3]2829entry:2830 %0 = tail call <2 x double> @llvm.x86.avx512.mask3.vfmsub.sd(<2 x double> %__W, <2 x double> %__X, <2 x double> %__Y, i8 %__U, i32 4)2831 ret <2 x double> %02832}2833 2834declare <2 x double> @llvm.x86.avx512.mask3.vfmsub.sd(<2 x double>, <2 x double>, <2 x double>, i8, i32) #12835 2836define <2 x double> @test_mm_mask_fnmadd_sd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {2837; X86-LABEL: test_mm_mask_fnmadd_sd:2838; X86: ## %bb.0: ## %entry2839; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2840; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2841; X86-NEXT: vfnmadd213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xad,0xc2]2842; X86-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) + xmm22843; X86-NEXT: retl ## encoding: [0xc3]2844;2845; X64-LABEL: test_mm_mask_fnmadd_sd:2846; X64: ## %bb.0: ## %entry2847; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2848; X64-NEXT: vfnmadd213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xad,0xc2]2849; X64-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) + xmm22850; X64-NEXT: retq ## encoding: [0xc3]2851entry:2852 %0 = extractelement <2 x double> %__W, i64 02853 %.rhs.i = extractelement <2 x double> %__A, i64 02854 %1 = fsub double -0.000000e+00, %.rhs.i2855 %2 = extractelement <2 x double> %__B, i64 02856 %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #102857 %4 = and i8 %__U, 12858 %tobool.i = icmp eq i8 %4, 02859 %vecext1.i = extractelement <2 x double> %__W, i32 02860 %cond.i = select i1 %tobool.i, double %vecext1.i, double %32861 %vecins.i = insertelement <2 x double> %__W, double %cond.i, i32 02862 ret <2 x double> %vecins.i2863}2864 2865define <2 x double> @test_mm_mask_fnmadd_round_sd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {2866; X86-LABEL: test_mm_mask_fnmadd_round_sd:2867; X86: ## %bb.0: ## %entry2868; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2869; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2870; X86-NEXT: vfnmadd213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xad,0xc2]2871; X86-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) + xmm22872; X86-NEXT: retl ## encoding: [0xc3]2873;2874; X64-LABEL: test_mm_mask_fnmadd_round_sd:2875; X64: ## %bb.0: ## %entry2876; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2877; X64-NEXT: vfnmadd213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xad,0xc2]2878; X64-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) + xmm22879; X64-NEXT: retq ## encoding: [0xc3]2880entry:2881 %sub = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__A2882 %0 = tail call <2 x double> @llvm.x86.avx512.mask.vfmadd.sd(<2 x double> %__W, <2 x double> %sub, <2 x double> %__B, i8 %__U, i32 4)2883 ret <2 x double> %02884}2885 2886define <2 x double> @test_mm_maskz_fnmadd_sd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {2887; X86-LABEL: test_mm_maskz_fnmadd_sd:2888; X86: ## %bb.0: ## %entry2889; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2890; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2891; X86-NEXT: vfnmadd213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xad,0xc2]2892; X86-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm22893; X86-NEXT: retl ## encoding: [0xc3]2894;2895; X64-LABEL: test_mm_maskz_fnmadd_sd:2896; X64: ## %bb.0: ## %entry2897; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2898; X64-NEXT: vfnmadd213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xad,0xc2]2899; X64-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm22900; X64-NEXT: retq ## encoding: [0xc3]2901entry:2902 %0 = extractelement <2 x double> %__A, i64 02903 %.rhs.i = extractelement <2 x double> %__B, i64 02904 %1 = fsub double -0.000000e+00, %.rhs.i2905 %2 = extractelement <2 x double> %__C, i64 02906 %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #102907 %4 = and i8 %__U, 12908 %tobool.i = icmp eq i8 %4, 02909 %cond.i = select i1 %tobool.i, double 0.000000e+00, double %32910 %vecins.i = insertelement <2 x double> %__A, double %cond.i, i32 02911 ret <2 x double> %vecins.i2912}2913 2914define <2 x double> @test_mm_maskz_fnmadd_round_sd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {2915; X86-LABEL: test_mm_maskz_fnmadd_round_sd:2916; X86: ## %bb.0: ## %entry2917; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2918; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2919; X86-NEXT: vfnmadd213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xad,0xc2]2920; X86-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm22921; X86-NEXT: retl ## encoding: [0xc3]2922;2923; X64-LABEL: test_mm_maskz_fnmadd_round_sd:2924; X64: ## %bb.0: ## %entry2925; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2926; X64-NEXT: vfnmadd213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xad,0xc2]2927; X64-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm22928; X64-NEXT: retq ## encoding: [0xc3]2929entry:2930 %sub = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__B2931 %0 = tail call <2 x double> @llvm.x86.avx512.maskz.vfmadd.sd(<2 x double> %__A, <2 x double> %sub, <2 x double> %__C, i8 %__U, i32 4)2932 ret <2 x double> %02933}2934 2935define <2 x double> @test_mm_mask3_fnmadd_sd(<2 x double> %__W, <2 x double> %__X, <2 x double> %__Y, i8 zeroext %__U) {2936; X86-LABEL: test_mm_mask3_fnmadd_sd:2937; X86: ## %bb.0: ## %entry2938; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2939; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2940; X86-NEXT: vfnmadd231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xbd,0xd1]2941; X86-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) + xmm22942; X86-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]2943; X86-NEXT: retl ## encoding: [0xc3]2944;2945; X64-LABEL: test_mm_mask3_fnmadd_sd:2946; X64: ## %bb.0: ## %entry2947; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2948; X64-NEXT: vfnmadd231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xbd,0xd1]2949; X64-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) + xmm22950; X64-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]2951; X64-NEXT: retq ## encoding: [0xc3]2952entry:2953 %0 = extractelement <2 x double> %__W, i64 02954 %.rhs.i = extractelement <2 x double> %__X, i64 02955 %1 = fsub double -0.000000e+00, %.rhs.i2956 %2 = extractelement <2 x double> %__Y, i64 02957 %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #102958 %4 = and i8 %__U, 12959 %tobool.i = icmp eq i8 %4, 02960 %vecext1.i = extractelement <2 x double> %__Y, i32 02961 %cond.i = select i1 %tobool.i, double %vecext1.i, double %32962 %vecins.i = insertelement <2 x double> %__Y, double %cond.i, i32 02963 ret <2 x double> %vecins.i2964}2965 2966define <2 x double> @test_mm_mask3_fnmadd_round_sd(<2 x double> %__W, <2 x double> %__X, <2 x double> %__Y, i8 zeroext %__U) {2967; X86-LABEL: test_mm_mask3_fnmadd_round_sd:2968; X86: ## %bb.0: ## %entry2969; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2970; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2971; X86-NEXT: vfnmadd231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xbd,0xd1]2972; X86-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) + xmm22973; X86-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]2974; X86-NEXT: retl ## encoding: [0xc3]2975;2976; X64-LABEL: test_mm_mask3_fnmadd_round_sd:2977; X64: ## %bb.0: ## %entry2978; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]2979; X64-NEXT: vfnmadd231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xbd,0xd1]2980; X64-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) + xmm22981; X64-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]2982; X64-NEXT: retq ## encoding: [0xc3]2983entry:2984 %sub = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__X2985 %0 = tail call <2 x double> @llvm.x86.avx512.mask3.vfmadd.sd(<2 x double> %__W, <2 x double> %sub, <2 x double> %__Y, i8 %__U, i32 4)2986 ret <2 x double> %02987}2988 2989define <2 x double> @test_mm_mask_fnmsub_sd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {2990; X86-LABEL: test_mm_mask_fnmsub_sd:2991; X86: ## %bb.0: ## %entry2992; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]2993; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]2994; X86-NEXT: vfnmsub213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xaf,0xc2]2995; X86-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) - xmm22996; X86-NEXT: retl ## encoding: [0xc3]2997;2998; X64-LABEL: test_mm_mask_fnmsub_sd:2999; X64: ## %bb.0: ## %entry3000; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3001; X64-NEXT: vfnmsub213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xaf,0xc2]3002; X64-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) - xmm23003; X64-NEXT: retq ## encoding: [0xc3]3004entry:3005 %0 = extractelement <2 x double> %__W, i64 03006 %.rhs.i = extractelement <2 x double> %__A, i64 03007 %1 = fsub double -0.000000e+00, %.rhs.i3008 %.rhs7.i = extractelement <2 x double> %__B, i64 03009 %2 = fsub double -0.000000e+00, %.rhs7.i3010 %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #103011 %4 = and i8 %__U, 13012 %tobool.i = icmp eq i8 %4, 03013 %vecext2.i = extractelement <2 x double> %__W, i32 03014 %cond.i = select i1 %tobool.i, double %vecext2.i, double %33015 %vecins.i = insertelement <2 x double> %__W, double %cond.i, i32 03016 ret <2 x double> %vecins.i3017}3018 3019define <2 x double> @test_mm_mask_fnmsub_round_sd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {3020; X86-LABEL: test_mm_mask_fnmsub_round_sd:3021; X86: ## %bb.0: ## %entry3022; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3023; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3024; X86-NEXT: vfnmsub213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xaf,0xc2]3025; X86-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) - xmm23026; X86-NEXT: retl ## encoding: [0xc3]3027;3028; X64-LABEL: test_mm_mask_fnmsub_round_sd:3029; X64: ## %bb.0: ## %entry3030; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3031; X64-NEXT: vfnmsub213sd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf2,0xf5,0x09,0xaf,0xc2]3032; X64-NEXT: ## xmm0 {%k1} = -(xmm1 * xmm0) - xmm23033; X64-NEXT: retq ## encoding: [0xc3]3034entry:3035 %sub = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__A3036 %sub1 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__B3037 %0 = tail call <2 x double> @llvm.x86.avx512.mask.vfmadd.sd(<2 x double> %__W, <2 x double> %sub, <2 x double> %sub1, i8 %__U, i32 4)3038 ret <2 x double> %03039}3040 3041define <2 x double> @test_mm_maskz_fnmsub_sd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {3042; X86-LABEL: test_mm_maskz_fnmsub_sd:3043; X86: ## %bb.0: ## %entry3044; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3045; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3046; X86-NEXT: vfnmsub213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xaf,0xc2]3047; X86-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm23048; X86-NEXT: retl ## encoding: [0xc3]3049;3050; X64-LABEL: test_mm_maskz_fnmsub_sd:3051; X64: ## %bb.0: ## %entry3052; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3053; X64-NEXT: vfnmsub213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xaf,0xc2]3054; X64-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm23055; X64-NEXT: retq ## encoding: [0xc3]3056entry:3057 %0 = extractelement <2 x double> %__A, i64 03058 %.rhs.i = extractelement <2 x double> %__B, i64 03059 %1 = fsub double -0.000000e+00, %.rhs.i3060 %.rhs5.i = extractelement <2 x double> %__C, i64 03061 %2 = fsub double -0.000000e+00, %.rhs5.i3062 %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #103063 %4 = and i8 %__U, 13064 %tobool.i = icmp eq i8 %4, 03065 %cond.i = select i1 %tobool.i, double 0.000000e+00, double %33066 %vecins.i = insertelement <2 x double> %__A, double %cond.i, i32 03067 ret <2 x double> %vecins.i3068}3069 3070define <2 x double> @test_mm_maskz_fnmsub_round_sd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {3071; X86-LABEL: test_mm_maskz_fnmsub_round_sd:3072; X86: ## %bb.0: ## %entry3073; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3074; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3075; X86-NEXT: vfnmsub213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xaf,0xc2]3076; X86-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm23077; X86-NEXT: retl ## encoding: [0xc3]3078;3079; X64-LABEL: test_mm_maskz_fnmsub_round_sd:3080; X64: ## %bb.0: ## %entry3081; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3082; X64-NEXT: vfnmsub213sd %xmm2, %xmm1, %xmm0 {%k1} {z} ## encoding: [0x62,0xf2,0xf5,0x89,0xaf,0xc2]3083; X64-NEXT: ## xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm23084; X64-NEXT: retq ## encoding: [0xc3]3085entry:3086 %sub = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__B3087 %sub1 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C3088 %0 = tail call <2 x double> @llvm.x86.avx512.maskz.vfmadd.sd(<2 x double> %__A, <2 x double> %sub, <2 x double> %sub1, i8 %__U, i32 4)3089 ret <2 x double> %03090}3091 3092define <2 x double> @test_mm_mask3_fnmsub_sd(<2 x double> %__W, <2 x double> %__X, <2 x double> %__Y, i8 zeroext %__U) {3093; X86-LABEL: test_mm_mask3_fnmsub_sd:3094; X86: ## %bb.0: ## %entry3095; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3096; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3097; X86-NEXT: vfnmsub231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xbf,0xd1]3098; X86-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) - xmm23099; X86-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]3100; X86-NEXT: retl ## encoding: [0xc3]3101;3102; X64-LABEL: test_mm_mask3_fnmsub_sd:3103; X64: ## %bb.0: ## %entry3104; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3105; X64-NEXT: vfnmsub231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xbf,0xd1]3106; X64-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) - xmm23107; X64-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]3108; X64-NEXT: retq ## encoding: [0xc3]3109entry:3110 %0 = extractelement <2 x double> %__W, i64 03111 %.rhs.i = extractelement <2 x double> %__X, i64 03112 %1 = fsub double -0.000000e+00, %.rhs.i3113 %.rhs7.i = extractelement <2 x double> %__Y, i64 03114 %2 = fsub double -0.000000e+00, %.rhs7.i3115 %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #103116 %4 = and i8 %__U, 13117 %tobool.i = icmp eq i8 %4, 03118 %vecext2.i = extractelement <2 x double> %__Y, i32 03119 %cond.i = select i1 %tobool.i, double %vecext2.i, double %33120 %vecins.i = insertelement <2 x double> %__Y, double %cond.i, i32 03121 ret <2 x double> %vecins.i3122}3123 3124define <2 x double> @test_mm_mask3_fnmsub_round_sd(<2 x double> %__W, <2 x double> %__X, <2 x double> %__Y, i8 zeroext %__U) {3125; X86-LABEL: test_mm_mask3_fnmsub_round_sd:3126; X86: ## %bb.0: ## %entry3127; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3128; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3129; X86-NEXT: vfnmsub231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xbf,0xd1]3130; X86-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) - xmm23131; X86-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]3132; X86-NEXT: retl ## encoding: [0xc3]3133;3134; X64-LABEL: test_mm_mask3_fnmsub_round_sd:3135; X64: ## %bb.0: ## %entry3136; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3137; X64-NEXT: vfnmsub231sd %xmm1, %xmm0, %xmm2 {%k1} ## encoding: [0x62,0xf2,0xfd,0x09,0xbf,0xd1]3138; X64-NEXT: ## xmm2 {%k1} = -(xmm0 * xmm1) - xmm23139; X64-NEXT: vmovapd %xmm2, %xmm0 ## encoding: [0xc5,0xf9,0x28,0xc2]3140; X64-NEXT: retq ## encoding: [0xc3]3141entry:3142 %sub = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__X3143 %0 = tail call <2 x double> @llvm.x86.avx512.mask3.vfmsub.sd(<2 x double> %__W, <2 x double> %sub, <2 x double> %__Y, i8 %__U, i32 4)3144 ret <2 x double> %03145}3146 3147define <4 x float> @test_mm_mask_add_ss(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {3148; X86-LABEL: test_mm_mask_add_ss:3149; X86: ## %bb.0: ## %entry3150; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3151; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3152; X86-NEXT: vaddss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0x76,0x09,0x58,0xc2]3153; X86-NEXT: retl ## encoding: [0xc3]3154;3155; X64-LABEL: test_mm_mask_add_ss:3156; X64: ## %bb.0: ## %entry3157; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3158; X64-NEXT: vaddss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0x76,0x09,0x58,0xc2]3159; X64-NEXT: retq ## encoding: [0xc3]3160entry:3161 %vecext.i.i = extractelement <4 x float> %__B, i32 03162 %vecext1.i.i = extractelement <4 x float> %__A, i32 03163 %add.i.i = fadd float %vecext1.i.i, %vecext.i.i3164 %0 = and i8 %__U, 13165 %tobool.i = icmp eq i8 %0, 03166 %vecext1.i = extractelement <4 x float> %__W, i32 03167 %cond.i = select i1 %tobool.i, float %vecext1.i, float %add.i.i3168 %vecins.i = insertelement <4 x float> %__A, float %cond.i, i32 03169 ret <4 x float> %vecins.i3170}3171 3172define <4 x float> @test_mm_maskz_add_ss(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {3173; X86-LABEL: test_mm_maskz_add_ss:3174; X86: ## %bb.0: ## %entry3175; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3176; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3177; X86-NEXT: vaddss %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0x7e,0x89,0x58,0xc1]3178; X86-NEXT: retl ## encoding: [0xc3]3179;3180; X64-LABEL: test_mm_maskz_add_ss:3181; X64: ## %bb.0: ## %entry3182; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3183; X64-NEXT: vaddss %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0x7e,0x89,0x58,0xc1]3184; X64-NEXT: retq ## encoding: [0xc3]3185entry:3186 %vecext.i.i = extractelement <4 x float> %__B, i32 03187 %vecext1.i.i = extractelement <4 x float> %__A, i32 03188 %add.i.i = fadd float %vecext1.i.i, %vecext.i.i3189 %0 = and i8 %__U, 13190 %tobool.i = icmp eq i8 %0, 03191 %cond.i = select i1 %tobool.i, float 0.000000e+00, float %add.i.i3192 %vecins.i = insertelement <4 x float> %__A, float %cond.i, i32 03193 ret <4 x float> %vecins.i3194}3195 3196define <2 x double> @test_mm_mask_add_sd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {3197; X86-LABEL: test_mm_mask_add_sd:3198; X86: ## %bb.0: ## %entry3199; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3200; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3201; X86-NEXT: vaddsd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0xf7,0x09,0x58,0xc2]3202; X86-NEXT: retl ## encoding: [0xc3]3203;3204; X64-LABEL: test_mm_mask_add_sd:3205; X64: ## %bb.0: ## %entry3206; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3207; X64-NEXT: vaddsd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0xf7,0x09,0x58,0xc2]3208; X64-NEXT: retq ## encoding: [0xc3]3209entry:3210 %vecext.i.i = extractelement <2 x double> %__B, i32 03211 %vecext1.i.i = extractelement <2 x double> %__A, i32 03212 %add.i.i = fadd double %vecext1.i.i, %vecext.i.i3213 %0 = and i8 %__U, 13214 %tobool.i = icmp eq i8 %0, 03215 %vecext1.i = extractelement <2 x double> %__W, i32 03216 %cond.i = select i1 %tobool.i, double %vecext1.i, double %add.i.i3217 %vecins.i = insertelement <2 x double> %__A, double %cond.i, i32 03218 ret <2 x double> %vecins.i3219}3220 3221define <2 x double> @test_mm_maskz_add_sd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {3222; X86-LABEL: test_mm_maskz_add_sd:3223; X86: ## %bb.0: ## %entry3224; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3225; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3226; X86-NEXT: vaddsd %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0xff,0x89,0x58,0xc1]3227; X86-NEXT: retl ## encoding: [0xc3]3228;3229; X64-LABEL: test_mm_maskz_add_sd:3230; X64: ## %bb.0: ## %entry3231; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3232; X64-NEXT: vaddsd %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0xff,0x89,0x58,0xc1]3233; X64-NEXT: retq ## encoding: [0xc3]3234entry:3235 %vecext.i.i = extractelement <2 x double> %__B, i32 03236 %vecext1.i.i = extractelement <2 x double> %__A, i32 03237 %add.i.i = fadd double %vecext1.i.i, %vecext.i.i3238 %0 = and i8 %__U, 13239 %tobool.i = icmp eq i8 %0, 03240 %cond.i = select i1 %tobool.i, double 0.000000e+00, double %add.i.i3241 %vecins.i = insertelement <2 x double> %__A, double %cond.i, i32 03242 ret <2 x double> %vecins.i3243}3244 3245define <4 x float> @test_mm_mask_sub_ss(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {3246; X86-LABEL: test_mm_mask_sub_ss:3247; X86: ## %bb.0: ## %entry3248; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3249; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3250; X86-NEXT: vsubss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0x76,0x09,0x5c,0xc2]3251; X86-NEXT: retl ## encoding: [0xc3]3252;3253; X64-LABEL: test_mm_mask_sub_ss:3254; X64: ## %bb.0: ## %entry3255; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3256; X64-NEXT: vsubss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0x76,0x09,0x5c,0xc2]3257; X64-NEXT: retq ## encoding: [0xc3]3258entry:3259 %vecext.i.i = extractelement <4 x float> %__B, i32 03260 %vecext1.i.i = extractelement <4 x float> %__A, i32 03261 %sub.i.i = fsub float %vecext1.i.i, %vecext.i.i3262 %0 = and i8 %__U, 13263 %tobool.i = icmp eq i8 %0, 03264 %vecext1.i = extractelement <4 x float> %__W, i32 03265 %cond.i = select i1 %tobool.i, float %vecext1.i, float %sub.i.i3266 %vecins.i = insertelement <4 x float> %__A, float %cond.i, i32 03267 ret <4 x float> %vecins.i3268}3269 3270define <4 x float> @test_mm_maskz_sub_ss(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {3271; X86-LABEL: test_mm_maskz_sub_ss:3272; X86: ## %bb.0: ## %entry3273; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3274; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3275; X86-NEXT: vsubss %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0x7e,0x89,0x5c,0xc1]3276; X86-NEXT: retl ## encoding: [0xc3]3277;3278; X64-LABEL: test_mm_maskz_sub_ss:3279; X64: ## %bb.0: ## %entry3280; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3281; X64-NEXT: vsubss %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0x7e,0x89,0x5c,0xc1]3282; X64-NEXT: retq ## encoding: [0xc3]3283entry:3284 %vecext.i.i = extractelement <4 x float> %__B, i32 03285 %vecext1.i.i = extractelement <4 x float> %__A, i32 03286 %sub.i.i = fsub float %vecext1.i.i, %vecext.i.i3287 %0 = and i8 %__U, 13288 %tobool.i = icmp eq i8 %0, 03289 %cond.i = select i1 %tobool.i, float 0.000000e+00, float %sub.i.i3290 %vecins.i = insertelement <4 x float> %__A, float %cond.i, i32 03291 ret <4 x float> %vecins.i3292}3293 3294define <2 x double> @test_mm_mask_sub_sd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {3295; X86-LABEL: test_mm_mask_sub_sd:3296; X86: ## %bb.0: ## %entry3297; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3298; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3299; X86-NEXT: vsubsd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0xf7,0x09,0x5c,0xc2]3300; X86-NEXT: retl ## encoding: [0xc3]3301;3302; X64-LABEL: test_mm_mask_sub_sd:3303; X64: ## %bb.0: ## %entry3304; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3305; X64-NEXT: vsubsd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0xf7,0x09,0x5c,0xc2]3306; X64-NEXT: retq ## encoding: [0xc3]3307entry:3308 %vecext.i.i = extractelement <2 x double> %__B, i32 03309 %vecext1.i.i = extractelement <2 x double> %__A, i32 03310 %sub.i.i = fsub double %vecext1.i.i, %vecext.i.i3311 %0 = and i8 %__U, 13312 %tobool.i = icmp eq i8 %0, 03313 %vecext1.i = extractelement <2 x double> %__W, i32 03314 %cond.i = select i1 %tobool.i, double %vecext1.i, double %sub.i.i3315 %vecins.i = insertelement <2 x double> %__A, double %cond.i, i32 03316 ret <2 x double> %vecins.i3317}3318 3319define <2 x double> @test_mm_maskz_sub_sd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {3320; X86-LABEL: test_mm_maskz_sub_sd:3321; X86: ## %bb.0: ## %entry3322; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3323; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3324; X86-NEXT: vsubsd %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0xff,0x89,0x5c,0xc1]3325; X86-NEXT: retl ## encoding: [0xc3]3326;3327; X64-LABEL: test_mm_maskz_sub_sd:3328; X64: ## %bb.0: ## %entry3329; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3330; X64-NEXT: vsubsd %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0xff,0x89,0x5c,0xc1]3331; X64-NEXT: retq ## encoding: [0xc3]3332entry:3333 %vecext.i.i = extractelement <2 x double> %__B, i32 03334 %vecext1.i.i = extractelement <2 x double> %__A, i32 03335 %sub.i.i = fsub double %vecext1.i.i, %vecext.i.i3336 %0 = and i8 %__U, 13337 %tobool.i = icmp eq i8 %0, 03338 %cond.i = select i1 %tobool.i, double 0.000000e+00, double %sub.i.i3339 %vecins.i = insertelement <2 x double> %__A, double %cond.i, i32 03340 ret <2 x double> %vecins.i3341}3342 3343define <4 x float> @test_mm_mask_mul_ss(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {3344; X86-LABEL: test_mm_mask_mul_ss:3345; X86: ## %bb.0: ## %entry3346; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3347; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3348; X86-NEXT: vmulss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0x76,0x09,0x59,0xc2]3349; X86-NEXT: retl ## encoding: [0xc3]3350;3351; X64-LABEL: test_mm_mask_mul_ss:3352; X64: ## %bb.0: ## %entry3353; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3354; X64-NEXT: vmulss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0x76,0x09,0x59,0xc2]3355; X64-NEXT: retq ## encoding: [0xc3]3356entry:3357 %vecext.i.i = extractelement <4 x float> %__B, i32 03358 %vecext1.i.i = extractelement <4 x float> %__A, i32 03359 %mul.i.i = fmul float %vecext1.i.i, %vecext.i.i3360 %0 = and i8 %__U, 13361 %tobool.i = icmp eq i8 %0, 03362 %vecext1.i = extractelement <4 x float> %__W, i32 03363 %cond.i = select i1 %tobool.i, float %vecext1.i, float %mul.i.i3364 %vecins.i = insertelement <4 x float> %__A, float %cond.i, i32 03365 ret <4 x float> %vecins.i3366}3367 3368define <4 x float> @test_mm_maskz_mul_ss(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {3369; X86-LABEL: test_mm_maskz_mul_ss:3370; X86: ## %bb.0: ## %entry3371; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3372; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3373; X86-NEXT: vmulss %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0x7e,0x89,0x59,0xc1]3374; X86-NEXT: retl ## encoding: [0xc3]3375;3376; X64-LABEL: test_mm_maskz_mul_ss:3377; X64: ## %bb.0: ## %entry3378; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3379; X64-NEXT: vmulss %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0x7e,0x89,0x59,0xc1]3380; X64-NEXT: retq ## encoding: [0xc3]3381entry:3382 %vecext.i.i = extractelement <4 x float> %__B, i32 03383 %vecext1.i.i = extractelement <4 x float> %__A, i32 03384 %mul.i.i = fmul float %vecext1.i.i, %vecext.i.i3385 %0 = and i8 %__U, 13386 %tobool.i = icmp eq i8 %0, 03387 %cond.i = select i1 %tobool.i, float 0.000000e+00, float %mul.i.i3388 %vecins.i = insertelement <4 x float> %__A, float %cond.i, i32 03389 ret <4 x float> %vecins.i3390}3391 3392define <2 x double> @test_mm_mask_mul_sd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {3393; X86-LABEL: test_mm_mask_mul_sd:3394; X86: ## %bb.0: ## %entry3395; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3396; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3397; X86-NEXT: vmulsd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0xf7,0x09,0x59,0xc2]3398; X86-NEXT: retl ## encoding: [0xc3]3399;3400; X64-LABEL: test_mm_mask_mul_sd:3401; X64: ## %bb.0: ## %entry3402; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3403; X64-NEXT: vmulsd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0xf7,0x09,0x59,0xc2]3404; X64-NEXT: retq ## encoding: [0xc3]3405entry:3406 %vecext.i.i = extractelement <2 x double> %__B, i32 03407 %vecext1.i.i = extractelement <2 x double> %__A, i32 03408 %mul.i.i = fmul double %vecext1.i.i, %vecext.i.i3409 %0 = and i8 %__U, 13410 %tobool.i = icmp eq i8 %0, 03411 %vecext1.i = extractelement <2 x double> %__W, i32 03412 %cond.i = select i1 %tobool.i, double %vecext1.i, double %mul.i.i3413 %vecins.i = insertelement <2 x double> %__A, double %cond.i, i32 03414 ret <2 x double> %vecins.i3415}3416 3417define <2 x double> @test_mm_maskz_mul_sd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {3418; X86-LABEL: test_mm_maskz_mul_sd:3419; X86: ## %bb.0: ## %entry3420; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3421; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3422; X86-NEXT: vmulsd %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0xff,0x89,0x59,0xc1]3423; X86-NEXT: retl ## encoding: [0xc3]3424;3425; X64-LABEL: test_mm_maskz_mul_sd:3426; X64: ## %bb.0: ## %entry3427; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3428; X64-NEXT: vmulsd %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0xff,0x89,0x59,0xc1]3429; X64-NEXT: retq ## encoding: [0xc3]3430entry:3431 %vecext.i.i = extractelement <2 x double> %__B, i32 03432 %vecext1.i.i = extractelement <2 x double> %__A, i32 03433 %mul.i.i = fmul double %vecext1.i.i, %vecext.i.i3434 %0 = and i8 %__U, 13435 %tobool.i = icmp eq i8 %0, 03436 %cond.i = select i1 %tobool.i, double 0.000000e+00, double %mul.i.i3437 %vecins.i = insertelement <2 x double> %__A, double %cond.i, i32 03438 ret <2 x double> %vecins.i3439}3440 3441define <4 x float> @test_mm_mask_div_ss(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {3442; X86-LABEL: test_mm_mask_div_ss:3443; X86: ## %bb.0: ## %entry3444; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3445; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3446; X86-NEXT: vdivss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0x76,0x09,0x5e,0xc2]3447; X86-NEXT: retl ## encoding: [0xc3]3448;3449; X64-LABEL: test_mm_mask_div_ss:3450; X64: ## %bb.0: ## %entry3451; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3452; X64-NEXT: vdivss %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0x76,0x09,0x5e,0xc2]3453; X64-NEXT: retq ## encoding: [0xc3]3454entry:3455 %0 = extractelement <4 x float> %__A, i64 03456 %1 = extractelement <4 x float> %__B, i64 03457 %2 = extractelement <4 x float> %__W, i64 03458 %3 = fdiv float %0, %13459 %4 = bitcast i8 %__U to <8 x i1>3460 %5 = extractelement <8 x i1> %4, i64 03461 %6 = select i1 %5, float %3, float %23462 %7 = insertelement <4 x float> %__A, float %6, i64 03463 ret <4 x float> %73464}3465 3466define <4 x float> @test_mm_maskz_div_ss(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {3467; X86-LABEL: test_mm_maskz_div_ss:3468; X86: ## %bb.0: ## %entry3469; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3470; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3471; X86-NEXT: vdivss %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0x7e,0x89,0x5e,0xc1]3472; X86-NEXT: retl ## encoding: [0xc3]3473;3474; X64-LABEL: test_mm_maskz_div_ss:3475; X64: ## %bb.0: ## %entry3476; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3477; X64-NEXT: vdivss %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0x7e,0x89,0x5e,0xc1]3478; X64-NEXT: retq ## encoding: [0xc3]3479entry:3480 %0 = extractelement <4 x float> %__A, i64 03481 %1 = extractelement <4 x float> %__B, i64 03482 %2 = fdiv float %0, %13483 %3 = bitcast i8 %__U to <8 x i1>3484 %4 = extractelement <8 x i1> %3, i64 03485 %5 = select i1 %4, float %2, float 0.000000e+003486 %6 = insertelement <4 x float> %__A, float %5, i64 03487 ret <4 x float> %63488}3489 3490define <2 x double> @test_mm_mask_div_sd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {3491; X86-LABEL: test_mm_mask_div_sd:3492; X86: ## %bb.0: ## %entry3493; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3494; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3495; X86-NEXT: vdivsd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0xf7,0x09,0x5e,0xc2]3496; X86-NEXT: retl ## encoding: [0xc3]3497;3498; X64-LABEL: test_mm_mask_div_sd:3499; X64: ## %bb.0: ## %entry3500; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3501; X64-NEXT: vdivsd %xmm2, %xmm1, %xmm0 {%k1} ## encoding: [0x62,0xf1,0xf7,0x09,0x5e,0xc2]3502; X64-NEXT: retq ## encoding: [0xc3]3503entry:3504 %0 = extractelement <2 x double> %__A, i64 03505 %1 = extractelement <2 x double> %__B, i64 03506 %2 = extractelement <2 x double> %__W, i64 03507 %3 = fdiv double %0, %13508 %4 = bitcast i8 %__U to <8 x i1>3509 %5 = extractelement <8 x i1> %4, i64 03510 %6 = select i1 %5, double %3, double %23511 %7 = insertelement <2 x double> %__A, double %6, i64 03512 ret <2 x double> %73513}3514 3515define <2 x double> @test_mm_maskz_div_sd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {3516; X86-LABEL: test_mm_maskz_div_sd:3517; X86: ## %bb.0: ## %entry3518; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax ## encoding: [0x0f,0xb6,0x44,0x24,0x04]3519; X86-NEXT: kmovw %eax, %k1 ## encoding: [0xc5,0xf8,0x92,0xc8]3520; X86-NEXT: vdivsd %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0xff,0x89,0x5e,0xc1]3521; X86-NEXT: retl ## encoding: [0xc3]3522;3523; X64-LABEL: test_mm_maskz_div_sd:3524; X64: ## %bb.0: ## %entry3525; X64-NEXT: kmovw %edi, %k1 ## encoding: [0xc5,0xf8,0x92,0xcf]3526; X64-NEXT: vdivsd %xmm1, %xmm0, %xmm0 {%k1} {z} ## encoding: [0x62,0xf1,0xff,0x89,0x5e,0xc1]3527; X64-NEXT: retq ## encoding: [0xc3]3528entry:3529 %0 = extractelement <2 x double> %__A, i64 03530 %1 = extractelement <2 x double> %__B, i64 03531 %2 = fdiv double %0, %13532 %3 = bitcast i8 %__U to <8 x i1>3533 %4 = extractelement <8 x i1> %3, i64 03534 %5 = select i1 %4, double %2, double 0.000000e+003535 %6 = insertelement <2 x double> %__A, double %5, i64 03536 ret <2 x double> %63537}3538 3539declare <8 x double> @llvm.fma.v8f64(<8 x double>, <8 x double>, <8 x double>) #93540declare <16 x float> @llvm.fma.v16f32(<16 x float>, <16 x float>, <16 x float>) #93541declare float @llvm.fma.f32(float, float, float) #93542declare double @llvm.fma.f64(double, double, double) #93543