brintos

brintos / llvm-project-archived public Read only

0
0
Text · 101.6 KiB · 73681b2 Raw
1817 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512vl --show-mc-encoding | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl --show-mc-encoding | FileCheck %s --check-prefix=X644 5; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/avx512vl-builtins.c6 7define <2 x double> @test_mm_mask_fmadd_pd(<2 x double> %__A, i8 zeroext %__U, <2 x double> %__B, <2 x double> %__C) {8; X86-LABEL: test_mm_mask_fmadd_pd:9; X86:       # %bb.0: # %entry10; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]11; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]12; X86-NEXT:    vfmadd132pd %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x09,0x98,0xc1]13; X86-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) + xmm214; X86-NEXT:    retl # encoding: [0xc3]15;16; X64-LABEL: test_mm_mask_fmadd_pd:17; X64:       # %bb.0: # %entry18; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]19; X64-NEXT:    vfmadd132pd %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x09,0x98,0xc1]20; X64-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) + xmm221; X64-NEXT:    retq # encoding: [0xc3]22entry:23  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #924  %1 = bitcast i8 %__U to <8 x i1>25  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>26  %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__A27  ret <2 x double> %228}29 30define <2 x double> @test_mm_mask_fmsub_pd(<2 x double> %__A, i8 zeroext %__U, <2 x double> %__B, <2 x double> %__C) {31; X86-LABEL: test_mm_mask_fmsub_pd:32; X86:       # %bb.0: # %entry33; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]34; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]35; X86-NEXT:    vfmsub132pd %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x09,0x9a,0xc1]36; X86-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) - xmm237; X86-NEXT:    retl # encoding: [0xc3]38;39; X64-LABEL: test_mm_mask_fmsub_pd:40; X64:       # %bb.0: # %entry41; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]42; X64-NEXT:    vfmsub132pd %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x09,0x9a,0xc1]43; X64-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) - xmm244; X64-NEXT:    retq # encoding: [0xc3]45entry:46  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C47  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %sub.i) #948  %1 = bitcast i8 %__U to <8 x i1>49  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>50  %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__A51  ret <2 x double> %252}53 54define <2 x double> @test_mm_mask3_fmadd_pd(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C, i8 zeroext %__U) {55; X86-LABEL: test_mm_mask3_fmadd_pd:56; X86:       # %bb.0: # %entry57; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]58; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]59; X86-NEXT:    vfmadd231pd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xb8,0xd1]60; X86-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) + xmm261; X86-NEXT:    vmovapd %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc2]62; X86-NEXT:    retl # encoding: [0xc3]63;64; X64-LABEL: test_mm_mask3_fmadd_pd:65; X64:       # %bb.0: # %entry66; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]67; X64-NEXT:    vfmadd231pd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xb8,0xd1]68; X64-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) + xmm269; X64-NEXT:    vmovapd %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc2]70; X64-NEXT:    retq # encoding: [0xc3]71entry:72  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #973  %1 = bitcast i8 %__U to <8 x i1>74  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>75  %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__C76  ret <2 x double> %277}78 79define <2 x double> @test_mm_mask3_fnmadd_pd(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C, i8 zeroext %__U) {80; X86-LABEL: test_mm_mask3_fnmadd_pd:81; X86:       # %bb.0: # %entry82; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]83; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]84; X86-NEXT:    vfnmadd231pd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xbc,0xd1]85; X86-NEXT:    # xmm2 {%k1} = -(xmm0 * xmm1) + xmm286; X86-NEXT:    vmovapd %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc2]87; X86-NEXT:    retl # encoding: [0xc3]88;89; X64-LABEL: test_mm_mask3_fnmadd_pd:90; X64:       # %bb.0: # %entry91; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]92; X64-NEXT:    vfnmadd231pd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xbc,0xd1]93; X64-NEXT:    # xmm2 {%k1} = -(xmm0 * xmm1) + xmm294; X64-NEXT:    vmovapd %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc2]95; X64-NEXT:    retq # encoding: [0xc3]96entry:97  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__A98  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %sub.i, <2 x double> %__B, <2 x double> %__C) #999  %1 = bitcast i8 %__U to <8 x i1>100  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>101  %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__C102  ret <2 x double> %2103}104 105define <2 x double> @test_mm_maskz_fmadd_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {106; X86-LABEL: test_mm_maskz_fmadd_pd:107; X86:       # %bb.0: # %entry108; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]109; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]110; X86-NEXT:    vfmadd213pd %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0x89,0xa8,0xc2]111; X86-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm2112; X86-NEXT:    retl # encoding: [0xc3]113;114; X64-LABEL: test_mm_maskz_fmadd_pd:115; X64:       # %bb.0: # %entry116; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]117; X64-NEXT:    vfmadd213pd %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0x89,0xa8,0xc2]118; X64-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm2119; X64-NEXT:    retq # encoding: [0xc3]120entry:121  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #9122  %1 = bitcast i8 %__U to <8 x i1>123  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>124  %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> zeroinitializer125  ret <2 x double> %2126}127 128define <2 x double> @test_mm_maskz_fmsub_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {129; X86-LABEL: test_mm_maskz_fmsub_pd:130; X86:       # %bb.0: # %entry131; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]132; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]133; X86-NEXT:    vfmsub213pd %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0x89,0xaa,0xc2]134; X86-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm2135; X86-NEXT:    retl # encoding: [0xc3]136;137; X64-LABEL: test_mm_maskz_fmsub_pd:138; X64:       # %bb.0: # %entry139; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]140; X64-NEXT:    vfmsub213pd %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0x89,0xaa,0xc2]141; X64-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm2142; X64-NEXT:    retq # encoding: [0xc3]143entry:144  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C145  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %sub.i) #9146  %1 = bitcast i8 %__U to <8 x i1>147  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>148  %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> zeroinitializer149  ret <2 x double> %2150}151 152define <2 x double> @test_mm_maskz_fnmadd_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {153; X86-LABEL: test_mm_maskz_fnmadd_pd:154; X86:       # %bb.0: # %entry155; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]156; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]157; X86-NEXT:    vfnmadd213pd %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0x89,0xac,0xc2]158; X86-NEXT:    # xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm2159; X86-NEXT:    retl # encoding: [0xc3]160;161; X64-LABEL: test_mm_maskz_fnmadd_pd:162; X64:       # %bb.0: # %entry163; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]164; X64-NEXT:    vfnmadd213pd %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0x89,0xac,0xc2]165; X64-NEXT:    # xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm2166; X64-NEXT:    retq # encoding: [0xc3]167entry:168  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__A169  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %sub.i, <2 x double> %__B, <2 x double> %__C) #9170  %1 = bitcast i8 %__U to <8 x i1>171  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>172  %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> zeroinitializer173  ret <2 x double> %2174}175 176define <2 x double> @test_mm_maskz_fnmsub_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {177; X86-LABEL: test_mm_maskz_fnmsub_pd:178; X86:       # %bb.0: # %entry179; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]180; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]181; X86-NEXT:    vfnmsub213pd %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0x89,0xae,0xc2]182; X86-NEXT:    # xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm2183; X86-NEXT:    retl # encoding: [0xc3]184;185; X64-LABEL: test_mm_maskz_fnmsub_pd:186; X64:       # %bb.0: # %entry187; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]188; X64-NEXT:    vfnmsub213pd %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0x89,0xae,0xc2]189; X64-NEXT:    # xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm2190; X64-NEXT:    retq # encoding: [0xc3]191entry:192  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__A193  %sub1.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C194  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %sub.i, <2 x double> %__B, <2 x double> %sub1.i) #9195  %1 = bitcast i8 %__U to <8 x i1>196  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>197  %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> zeroinitializer198  ret <2 x double> %2199}200 201define <4 x double> @test_mm256_mask_fmadd_pd(<4 x double> %__A, i8 zeroext %__U, <4 x double> %__B, <4 x double> %__C) {202; X86-LABEL: test_mm256_mask_fmadd_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:    vfmadd132pd %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0xed,0x29,0x98,0xc1]207; X86-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) + ymm2208; X86-NEXT:    retl # encoding: [0xc3]209;210; X64-LABEL: test_mm256_mask_fmadd_pd:211; X64:       # %bb.0: # %entry212; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]213; X64-NEXT:    vfmadd132pd %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0xed,0x29,0x98,0xc1]214; X64-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) + ymm2215; X64-NEXT:    retq # encoding: [0xc3]216entry:217  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #9218  %1 = bitcast i8 %__U to <8 x i1>219  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>220  %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__A221  ret <4 x double> %2222}223 224define <4 x double> @test_mm256_mask_fmsub_pd(<4 x double> %__A, i8 zeroext %__U, <4 x double> %__B, <4 x double> %__C) {225; X86-LABEL: test_mm256_mask_fmsub_pd:226; X86:       # %bb.0: # %entry227; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]228; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]229; X86-NEXT:    vfmsub132pd %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0xed,0x29,0x9a,0xc1]230; X86-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) - ymm2231; X86-NEXT:    retl # encoding: [0xc3]232;233; X64-LABEL: test_mm256_mask_fmsub_pd:234; X64:       # %bb.0: # %entry235; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]236; X64-NEXT:    vfmsub132pd %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0xed,0x29,0x9a,0xc1]237; X64-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) - ymm2238; X64-NEXT:    retq # encoding: [0xc3]239entry:240  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C241  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %sub.i) #9242  %1 = bitcast i8 %__U to <8 x i1>243  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>244  %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__A245  ret <4 x double> %2246}247 248define <4 x double> @test_mm256_mask3_fmadd_pd(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C, i8 zeroext %__U) {249; X86-LABEL: test_mm256_mask3_fmadd_pd:250; X86:       # %bb.0: # %entry251; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]252; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]253; X86-NEXT:    vfmadd231pd %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x29,0xb8,0xd1]254; X86-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) + ymm2255; X86-NEXT:    vmovapd %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfd,0x28,0xc2]256; X86-NEXT:    retl # encoding: [0xc3]257;258; X64-LABEL: test_mm256_mask3_fmadd_pd:259; X64:       # %bb.0: # %entry260; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]261; X64-NEXT:    vfmadd231pd %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x29,0xb8,0xd1]262; X64-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) + ymm2263; X64-NEXT:    vmovapd %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfd,0x28,0xc2]264; X64-NEXT:    retq # encoding: [0xc3]265entry:266  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #9267  %1 = bitcast i8 %__U to <8 x i1>268  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>269  %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__C270  ret <4 x double> %2271}272 273define <4 x double> @test_mm256_mask3_fnmadd_pd(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C, i8 zeroext %__U) {274; X86-LABEL: test_mm256_mask3_fnmadd_pd:275; X86:       # %bb.0: # %entry276; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]277; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]278; X86-NEXT:    vfnmadd231pd %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x29,0xbc,0xd1]279; X86-NEXT:    # ymm2 {%k1} = -(ymm0 * ymm1) + ymm2280; X86-NEXT:    vmovapd %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfd,0x28,0xc2]281; X86-NEXT:    retl # encoding: [0xc3]282;283; X64-LABEL: test_mm256_mask3_fnmadd_pd:284; X64:       # %bb.0: # %entry285; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]286; X64-NEXT:    vfnmadd231pd %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x29,0xbc,0xd1]287; X64-NEXT:    # ymm2 {%k1} = -(ymm0 * ymm1) + ymm2288; X64-NEXT:    vmovapd %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfd,0x28,0xc2]289; X64-NEXT:    retq # encoding: [0xc3]290entry:291  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__A292  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %sub.i, <4 x double> %__B, <4 x double> %__C) #9293  %1 = bitcast i8 %__U to <8 x i1>294  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>295  %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__C296  ret <4 x double> %2297}298 299define <4 x double> @test_mm256_maskz_fmadd_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B, <4 x double> %__C) {300; X86-LABEL: test_mm256_maskz_fmadd_pd:301; X86:       # %bb.0: # %entry302; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]303; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]304; X86-NEXT:    vfmadd213pd %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xa9,0xa8,0xc2]305; X86-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) + ymm2306; X86-NEXT:    retl # encoding: [0xc3]307;308; X64-LABEL: test_mm256_maskz_fmadd_pd:309; X64:       # %bb.0: # %entry310; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]311; X64-NEXT:    vfmadd213pd %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xa9,0xa8,0xc2]312; X64-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) + ymm2313; X64-NEXT:    retq # encoding: [0xc3]314entry:315  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #9316  %1 = bitcast i8 %__U to <8 x i1>317  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>318  %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> zeroinitializer319  ret <4 x double> %2320}321 322define <4 x double> @test_mm256_maskz_fmsub_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B, <4 x double> %__C) {323; X86-LABEL: test_mm256_maskz_fmsub_pd:324; X86:       # %bb.0: # %entry325; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]326; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]327; X86-NEXT:    vfmsub213pd %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xa9,0xaa,0xc2]328; X86-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) - ymm2329; X86-NEXT:    retl # encoding: [0xc3]330;331; X64-LABEL: test_mm256_maskz_fmsub_pd:332; X64:       # %bb.0: # %entry333; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]334; X64-NEXT:    vfmsub213pd %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xa9,0xaa,0xc2]335; X64-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) - ymm2336; X64-NEXT:    retq # encoding: [0xc3]337entry:338  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C339  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %sub.i) #9340  %1 = bitcast i8 %__U to <8 x i1>341  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>342  %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> zeroinitializer343  ret <4 x double> %2344}345 346define <4 x double> @test_mm256_maskz_fnmadd_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B, <4 x double> %__C) {347; X86-LABEL: test_mm256_maskz_fnmadd_pd:348; X86:       # %bb.0: # %entry349; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]350; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]351; X86-NEXT:    vfnmadd213pd %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xa9,0xac,0xc2]352; X86-NEXT:    # ymm0 {%k1} {z} = -(ymm1 * ymm0) + ymm2353; X86-NEXT:    retl # encoding: [0xc3]354;355; X64-LABEL: test_mm256_maskz_fnmadd_pd:356; X64:       # %bb.0: # %entry357; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]358; X64-NEXT:    vfnmadd213pd %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xa9,0xac,0xc2]359; X64-NEXT:    # ymm0 {%k1} {z} = -(ymm1 * ymm0) + ymm2360; X64-NEXT:    retq # encoding: [0xc3]361entry:362  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__A363  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %sub.i, <4 x double> %__B, <4 x double> %__C) #9364  %1 = bitcast i8 %__U to <8 x i1>365  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>366  %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> zeroinitializer367  ret <4 x double> %2368}369 370define <4 x double> @test_mm256_maskz_fnmsub_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B, <4 x double> %__C) {371; X86-LABEL: test_mm256_maskz_fnmsub_pd:372; X86:       # %bb.0: # %entry373; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]374; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]375; X86-NEXT:    vfnmsub213pd %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xa9,0xae,0xc2]376; X86-NEXT:    # ymm0 {%k1} {z} = -(ymm1 * ymm0) - ymm2377; X86-NEXT:    retl # encoding: [0xc3]378;379; X64-LABEL: test_mm256_maskz_fnmsub_pd:380; X64:       # %bb.0: # %entry381; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]382; X64-NEXT:    vfnmsub213pd %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xa9,0xae,0xc2]383; X64-NEXT:    # ymm0 {%k1} {z} = -(ymm1 * ymm0) - ymm2384; X64-NEXT:    retq # encoding: [0xc3]385entry:386  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__A387  %sub1.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C388  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %sub.i, <4 x double> %__B, <4 x double> %sub1.i) #9389  %1 = bitcast i8 %__U to <8 x i1>390  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>391  %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> zeroinitializer392  ret <4 x double> %2393}394 395define <4 x float> @test_mm_mask_fmadd_ps(<4 x float> %__A, i8 zeroext %__U, <4 x float> %__B, <4 x float> %__C) {396; X86-LABEL: test_mm_mask_fmadd_ps:397; X86:       # %bb.0: # %entry398; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]399; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]400; X86-NEXT:    vfmadd132ps %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x09,0x98,0xc1]401; X86-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) + xmm2402; X86-NEXT:    retl # encoding: [0xc3]403;404; X64-LABEL: test_mm_mask_fmadd_ps:405; X64:       # %bb.0: # %entry406; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]407; X64-NEXT:    vfmadd132ps %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x09,0x98,0xc1]408; X64-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) + xmm2409; X64-NEXT:    retq # encoding: [0xc3]410entry:411  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #9412  %1 = bitcast i8 %__U to <8 x i1>413  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>414  %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__A415  ret <4 x float> %2416}417 418define <4 x float> @test_mm_mask_fmsub_ps(<4 x float> %__A, i8 zeroext %__U, <4 x float> %__B, <4 x float> %__C) {419; X86-LABEL: test_mm_mask_fmsub_ps:420; X86:       # %bb.0: # %entry421; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]422; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]423; X86-NEXT:    vfmsub132ps %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x09,0x9a,0xc1]424; X86-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) - xmm2425; X86-NEXT:    retl # encoding: [0xc3]426;427; X64-LABEL: test_mm_mask_fmsub_ps:428; X64:       # %bb.0: # %entry429; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]430; X64-NEXT:    vfmsub132ps %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x09,0x9a,0xc1]431; X64-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) - xmm2432; X64-NEXT:    retq # encoding: [0xc3]433entry:434  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C435  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %sub.i) #9436  %1 = bitcast i8 %__U to <8 x i1>437  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>438  %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__A439  ret <4 x float> %2440}441 442define <4 x float> @test_mm_mask3_fmadd_ps(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C, i8 zeroext %__U) {443; X86-LABEL: test_mm_mask3_fmadd_ps:444; X86:       # %bb.0: # %entry445; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]446; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]447; X86-NEXT:    vfmadd231ps %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xb8,0xd1]448; X86-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) + xmm2449; X86-NEXT:    vmovaps %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc2]450; X86-NEXT:    retl # encoding: [0xc3]451;452; X64-LABEL: test_mm_mask3_fmadd_ps:453; X64:       # %bb.0: # %entry454; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]455; X64-NEXT:    vfmadd231ps %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xb8,0xd1]456; X64-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) + xmm2457; X64-NEXT:    vmovaps %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc2]458; X64-NEXT:    retq # encoding: [0xc3]459entry:460  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #9461  %1 = bitcast i8 %__U to <8 x i1>462  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>463  %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__C464  ret <4 x float> %2465}466 467define <4 x float> @test_mm_mask3_fnmadd_ps(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C, i8 zeroext %__U) {468; X86-LABEL: test_mm_mask3_fnmadd_ps:469; X86:       # %bb.0: # %entry470; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]471; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]472; X86-NEXT:    vfnmadd231ps %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xbc,0xd1]473; X86-NEXT:    # xmm2 {%k1} = -(xmm0 * xmm1) + xmm2474; X86-NEXT:    vmovaps %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc2]475; X86-NEXT:    retl # encoding: [0xc3]476;477; X64-LABEL: test_mm_mask3_fnmadd_ps:478; X64:       # %bb.0: # %entry479; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]480; X64-NEXT:    vfnmadd231ps %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xbc,0xd1]481; X64-NEXT:    # xmm2 {%k1} = -(xmm0 * xmm1) + xmm2482; X64-NEXT:    vmovaps %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc2]483; X64-NEXT:    retq # encoding: [0xc3]484entry:485  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__A486  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %sub.i, <4 x float> %__B, <4 x float> %__C) #9487  %1 = bitcast i8 %__U to <8 x i1>488  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>489  %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__C490  ret <4 x float> %2491}492 493define <4 x float> @test_mm_maskz_fmadd_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {494; X86-LABEL: test_mm_maskz_fmadd_ps:495; X86:       # %bb.0: # %entry496; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]497; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]498; X86-NEXT:    vfmadd213ps %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0x89,0xa8,0xc2]499; X86-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm2500; X86-NEXT:    retl # encoding: [0xc3]501;502; X64-LABEL: test_mm_maskz_fmadd_ps:503; X64:       # %bb.0: # %entry504; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]505; X64-NEXT:    vfmadd213ps %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0x89,0xa8,0xc2]506; X64-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm2507; X64-NEXT:    retq # encoding: [0xc3]508entry:509  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #9510  %1 = bitcast i8 %__U to <8 x i1>511  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>512  %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> zeroinitializer513  ret <4 x float> %2514}515 516define <4 x float> @test_mm_maskz_fmsub_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {517; X86-LABEL: test_mm_maskz_fmsub_ps:518; X86:       # %bb.0: # %entry519; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]520; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]521; X86-NEXT:    vfmsub213ps %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0x89,0xaa,0xc2]522; X86-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm2523; X86-NEXT:    retl # encoding: [0xc3]524;525; X64-LABEL: test_mm_maskz_fmsub_ps:526; X64:       # %bb.0: # %entry527; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]528; X64-NEXT:    vfmsub213ps %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0x89,0xaa,0xc2]529; X64-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm2530; X64-NEXT:    retq # encoding: [0xc3]531entry:532  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C533  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %sub.i) #9534  %1 = bitcast i8 %__U to <8 x i1>535  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>536  %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> zeroinitializer537  ret <4 x float> %2538}539 540define <4 x float> @test_mm_maskz_fnmadd_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {541; X86-LABEL: test_mm_maskz_fnmadd_ps:542; X86:       # %bb.0: # %entry543; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]544; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]545; X86-NEXT:    vfnmadd213ps %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0x89,0xac,0xc2]546; X86-NEXT:    # xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm2547; X86-NEXT:    retl # encoding: [0xc3]548;549; X64-LABEL: test_mm_maskz_fnmadd_ps:550; X64:       # %bb.0: # %entry551; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]552; X64-NEXT:    vfnmadd213ps %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0x89,0xac,0xc2]553; X64-NEXT:    # xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm2554; X64-NEXT:    retq # encoding: [0xc3]555entry:556  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__A557  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %sub.i, <4 x float> %__B, <4 x float> %__C) #9558  %1 = bitcast i8 %__U to <8 x i1>559  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>560  %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> zeroinitializer561  ret <4 x float> %2562}563 564define <4 x float> @test_mm_maskz_fnmsub_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {565; X86-LABEL: test_mm_maskz_fnmsub_ps:566; X86:       # %bb.0: # %entry567; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]568; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]569; X86-NEXT:    vfnmsub213ps %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0x89,0xae,0xc2]570; X86-NEXT:    # xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm2571; X86-NEXT:    retl # encoding: [0xc3]572;573; X64-LABEL: test_mm_maskz_fnmsub_ps:574; X64:       # %bb.0: # %entry575; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]576; X64-NEXT:    vfnmsub213ps %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0x89,0xae,0xc2]577; X64-NEXT:    # xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm2578; X64-NEXT:    retq # encoding: [0xc3]579entry:580  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__A581  %sub1.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C582  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %sub.i, <4 x float> %__B, <4 x float> %sub1.i) #9583  %1 = bitcast i8 %__U to <8 x i1>584  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>585  %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> zeroinitializer586  ret <4 x float> %2587}588 589define <8 x float> @test_mm256_mask_fmadd_ps(<8 x float> %__A, i8 zeroext %__U, <8 x float> %__B, <8 x float> %__C) {590; X86-LABEL: test_mm256_mask_fmadd_ps:591; X86:       # %bb.0: # %entry592; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]593; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]594; X86-NEXT:    vfmadd132ps %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x29,0x98,0xc1]595; X86-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) + ymm2596; X86-NEXT:    retl # encoding: [0xc3]597;598; X64-LABEL: test_mm256_mask_fmadd_ps:599; X64:       # %bb.0: # %entry600; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]601; X64-NEXT:    vfmadd132ps %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x29,0x98,0xc1]602; X64-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) + ymm2603; X64-NEXT:    retq # encoding: [0xc3]604entry:605  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #9606  %1 = bitcast i8 %__U to <8 x i1>607  %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__A608  ret <8 x float> %2609}610 611define <8 x float> @test_mm256_mask_fmsub_ps(<8 x float> %__A, i8 zeroext %__U, <8 x float> %__B, <8 x float> %__C) {612; X86-LABEL: test_mm256_mask_fmsub_ps:613; X86:       # %bb.0: # %entry614; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]615; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]616; X86-NEXT:    vfmsub132ps %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x29,0x9a,0xc1]617; X86-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) - ymm2618; X86-NEXT:    retl # encoding: [0xc3]619;620; X64-LABEL: test_mm256_mask_fmsub_ps:621; X64:       # %bb.0: # %entry622; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]623; X64-NEXT:    vfmsub132ps %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x29,0x9a,0xc1]624; X64-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) - ymm2625; X64-NEXT:    retq # encoding: [0xc3]626entry:627  %sub.i = fsub <8 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>, %__C628  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %sub.i) #9629  %1 = bitcast i8 %__U to <8 x i1>630  %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__A631  ret <8 x float> %2632}633 634define <8 x float> @test_mm256_mask3_fmadd_ps(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C, i8 zeroext %__U) {635; X86-LABEL: test_mm256_mask3_fmadd_ps:636; X86:       # %bb.0: # %entry637; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]638; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]639; X86-NEXT:    vfmadd231ps %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x29,0xb8,0xd1]640; X86-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) + ymm2641; X86-NEXT:    vmovaps %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfc,0x28,0xc2]642; X86-NEXT:    retl # encoding: [0xc3]643;644; X64-LABEL: test_mm256_mask3_fmadd_ps:645; X64:       # %bb.0: # %entry646; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]647; X64-NEXT:    vfmadd231ps %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x29,0xb8,0xd1]648; X64-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) + ymm2649; X64-NEXT:    vmovaps %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfc,0x28,0xc2]650; X64-NEXT:    retq # encoding: [0xc3]651entry:652  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #9653  %1 = bitcast i8 %__U to <8 x i1>654  %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__C655  ret <8 x float> %2656}657 658define <8 x float> @test_mm256_mask3_fnmadd_ps(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C, i8 zeroext %__U) {659; X86-LABEL: test_mm256_mask3_fnmadd_ps:660; X86:       # %bb.0: # %entry661; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]662; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]663; X86-NEXT:    vfnmadd231ps %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x29,0xbc,0xd1]664; X86-NEXT:    # ymm2 {%k1} = -(ymm0 * ymm1) + ymm2665; X86-NEXT:    vmovaps %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfc,0x28,0xc2]666; X86-NEXT:    retl # encoding: [0xc3]667;668; X64-LABEL: test_mm256_mask3_fnmadd_ps:669; X64:       # %bb.0: # %entry670; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]671; X64-NEXT:    vfnmadd231ps %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x29,0xbc,0xd1]672; X64-NEXT:    # ymm2 {%k1} = -(ymm0 * ymm1) + ymm2673; X64-NEXT:    vmovaps %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfc,0x28,0xc2]674; X64-NEXT:    retq # encoding: [0xc3]675entry:676  %sub.i = fsub <8 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>, %__A677  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %sub.i, <8 x float> %__B, <8 x float> %__C) #9678  %1 = bitcast i8 %__U to <8 x i1>679  %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__C680  ret <8 x float> %2681}682 683define <8 x float> @test_mm256_maskz_fmadd_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B, <8 x float> %__C) {684; X86-LABEL: test_mm256_maskz_fmadd_ps:685; X86:       # %bb.0: # %entry686; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]687; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]688; X86-NEXT:    vfmadd213ps %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xa9,0xa8,0xc2]689; X86-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) + ymm2690; X86-NEXT:    retl # encoding: [0xc3]691;692; X64-LABEL: test_mm256_maskz_fmadd_ps:693; X64:       # %bb.0: # %entry694; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]695; X64-NEXT:    vfmadd213ps %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xa9,0xa8,0xc2]696; X64-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) + ymm2697; X64-NEXT:    retq # encoding: [0xc3]698entry:699  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #9700  %1 = bitcast i8 %__U to <8 x i1>701  %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> zeroinitializer702  ret <8 x float> %2703}704 705define <8 x float> @test_mm256_maskz_fmsub_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B, <8 x float> %__C) {706; X86-LABEL: test_mm256_maskz_fmsub_ps:707; X86:       # %bb.0: # %entry708; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]709; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]710; X86-NEXT:    vfmsub213ps %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xa9,0xaa,0xc2]711; X86-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) - ymm2712; X86-NEXT:    retl # encoding: [0xc3]713;714; X64-LABEL: test_mm256_maskz_fmsub_ps:715; X64:       # %bb.0: # %entry716; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]717; X64-NEXT:    vfmsub213ps %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xa9,0xaa,0xc2]718; X64-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) - ymm2719; X64-NEXT:    retq # encoding: [0xc3]720entry:721  %sub.i = fsub <8 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>, %__C722  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %sub.i) #9723  %1 = bitcast i8 %__U to <8 x i1>724  %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> zeroinitializer725  ret <8 x float> %2726}727 728define <8 x float> @test_mm256_maskz_fnmadd_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B, <8 x float> %__C) {729; X86-LABEL: test_mm256_maskz_fnmadd_ps:730; X86:       # %bb.0: # %entry731; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]732; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]733; X86-NEXT:    vfnmadd213ps %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xa9,0xac,0xc2]734; X86-NEXT:    # ymm0 {%k1} {z} = -(ymm1 * ymm0) + ymm2735; X86-NEXT:    retl # encoding: [0xc3]736;737; X64-LABEL: test_mm256_maskz_fnmadd_ps:738; X64:       # %bb.0: # %entry739; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]740; X64-NEXT:    vfnmadd213ps %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xa9,0xac,0xc2]741; X64-NEXT:    # ymm0 {%k1} {z} = -(ymm1 * ymm0) + ymm2742; X64-NEXT:    retq # encoding: [0xc3]743entry:744  %sub.i = fsub <8 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>, %__A745  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %sub.i, <8 x float> %__B, <8 x float> %__C) #9746  %1 = bitcast i8 %__U to <8 x i1>747  %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> zeroinitializer748  ret <8 x float> %2749}750 751define <8 x float> @test_mm256_maskz_fnmsub_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B, <8 x float> %__C) {752; X86-LABEL: test_mm256_maskz_fnmsub_ps:753; X86:       # %bb.0: # %entry754; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]755; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]756; X86-NEXT:    vfnmsub213ps %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xa9,0xae,0xc2]757; X86-NEXT:    # ymm0 {%k1} {z} = -(ymm1 * ymm0) - ymm2758; X86-NEXT:    retl # encoding: [0xc3]759;760; X64-LABEL: test_mm256_maskz_fnmsub_ps:761; X64:       # %bb.0: # %entry762; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]763; X64-NEXT:    vfnmsub213ps %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xa9,0xae,0xc2]764; X64-NEXT:    # ymm0 {%k1} {z} = -(ymm1 * ymm0) - ymm2765; X64-NEXT:    retq # encoding: [0xc3]766entry:767  %sub.i = fsub <8 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>, %__A768  %sub1.i = fsub <8 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>, %__C769  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %sub.i, <8 x float> %__B, <8 x float> %sub1.i) #9770  %1 = bitcast i8 %__U to <8 x i1>771  %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> zeroinitializer772  ret <8 x float> %2773}774 775define <2 x double> @test_mm_mask_fmaddsub_pd(<2 x double> %__A, i8 zeroext %__U, <2 x double> %__B, <2 x double> %__C) {776; X86-LABEL: test_mm_mask_fmaddsub_pd:777; X86:       # %bb.0: # %entry778; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]779; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]780; X86-NEXT:    vfmaddsub132pd %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x09,0x96,0xc1]781; X86-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) +/- xmm2782; X86-NEXT:    retl # encoding: [0xc3]783;784; X64-LABEL: test_mm_mask_fmaddsub_pd:785; X64:       # %bb.0: # %entry786; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]787; X64-NEXT:    vfmaddsub132pd %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x09,0x96,0xc1]788; X64-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) +/- xmm2789; X64-NEXT:    retq # encoding: [0xc3]790entry:791  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #9792  %1 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C793  %2 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %1) #9794  %3 = shufflevector <2 x double> %2, <2 x double> %0, <2 x i32> <i32 0, i32 3>795  %4 = bitcast i8 %__U to <8 x i1>796  %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <2 x i32> <i32 0, i32 1>797  %5 = select <2 x i1> %extract.i, <2 x double> %3, <2 x double> %__A798  ret <2 x double> %5799}800 801define <2 x double> @test_mm_mask_fmsubadd_pd(<2 x double> %__A, i8 zeroext %__U, <2 x double> %__B, <2 x double> %__C) {802; X86-LABEL: test_mm_mask_fmsubadd_pd:803; X86:       # %bb.0: # %entry804; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]805; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]806; X86-NEXT:    vfmsubadd132pd %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x09,0x97,0xc1]807; X86-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) -/+ xmm2808; X86-NEXT:    retl # encoding: [0xc3]809;810; X64-LABEL: test_mm_mask_fmsubadd_pd:811; X64:       # %bb.0: # %entry812; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]813; X64-NEXT:    vfmsubadd132pd %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x09,0x97,0xc1]814; X64-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) -/+ xmm2815; X64-NEXT:    retq # encoding: [0xc3]816entry:817  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C818  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %sub.i) #9819  %1 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #9820  %2 = shufflevector <2 x double> %1, <2 x double> %0, <2 x i32> <i32 0, i32 3>821  %3 = bitcast i8 %__U to <8 x i1>822  %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>823  %4 = select <2 x i1> %extract.i, <2 x double> %2, <2 x double> %__A824  ret <2 x double> %4825}826 827define <2 x double> @test_mm_mask3_fmaddsub_pd(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C, i8 zeroext %__U) {828; X86-LABEL: test_mm_mask3_fmaddsub_pd:829; X86:       # %bb.0: # %entry830; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]831; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]832; X86-NEXT:    vfmaddsub231pd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xb6,0xd1]833; X86-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) +/- xmm2834; X86-NEXT:    vmovapd %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc2]835; X86-NEXT:    retl # encoding: [0xc3]836;837; X64-LABEL: test_mm_mask3_fmaddsub_pd:838; X64:       # %bb.0: # %entry839; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]840; X64-NEXT:    vfmaddsub231pd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xb6,0xd1]841; X64-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) +/- xmm2842; X64-NEXT:    vmovapd %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc2]843; X64-NEXT:    retq # encoding: [0xc3]844entry:845  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #9846  %1 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C847  %2 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %1) #9848  %3 = shufflevector <2 x double> %2, <2 x double> %0, <2 x i32> <i32 0, i32 3>849  %4 = bitcast i8 %__U to <8 x i1>850  %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <2 x i32> <i32 0, i32 1>851  %5 = select <2 x i1> %extract.i, <2 x double> %3, <2 x double> %__C852  ret <2 x double> %5853}854 855define <2 x double> @test_mm_maskz_fmaddsub_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {856; X86-LABEL: test_mm_maskz_fmaddsub_pd:857; X86:       # %bb.0: # %entry858; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]859; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]860; X86-NEXT:    vfmaddsub213pd %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0x89,0xa6,0xc2]861; X86-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) +/- xmm2862; X86-NEXT:    retl # encoding: [0xc3]863;864; X64-LABEL: test_mm_maskz_fmaddsub_pd:865; X64:       # %bb.0: # %entry866; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]867; X64-NEXT:    vfmaddsub213pd %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0x89,0xa6,0xc2]868; X64-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) +/- xmm2869; X64-NEXT:    retq # encoding: [0xc3]870entry:871  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #9872  %1 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C873  %2 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %1) #9874  %3 = shufflevector <2 x double> %2, <2 x double> %0, <2 x i32> <i32 0, i32 3>875  %4 = bitcast i8 %__U to <8 x i1>876  %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <2 x i32> <i32 0, i32 1>877  %5 = select <2 x i1> %extract.i, <2 x double> %3, <2 x double> zeroinitializer878  ret <2 x double> %5879}880 881define <2 x double> @test_mm_maskz_fmsubadd_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {882; X86-LABEL: test_mm_maskz_fmsubadd_pd:883; X86:       # %bb.0: # %entry884; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]885; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]886; X86-NEXT:    vfmsubadd213pd %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0x89,0xa7,0xc2]887; X86-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) -/+ xmm2888; X86-NEXT:    retl # encoding: [0xc3]889;890; X64-LABEL: test_mm_maskz_fmsubadd_pd:891; X64:       # %bb.0: # %entry892; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]893; X64-NEXT:    vfmsubadd213pd %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0x89,0xa7,0xc2]894; X64-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) -/+ xmm2895; X64-NEXT:    retq # encoding: [0xc3]896entry:897  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C898  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %sub.i) #9899  %1 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #9900  %2 = shufflevector <2 x double> %1, <2 x double> %0, <2 x i32> <i32 0, i32 3>901  %3 = bitcast i8 %__U to <8 x i1>902  %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>903  %4 = select <2 x i1> %extract.i, <2 x double> %2, <2 x double> zeroinitializer904  ret <2 x double> %4905}906 907define <4 x double> @test_mm256_mask_fmaddsub_pd(<4 x double> %__A, i8 zeroext %__U, <4 x double> %__B, <4 x double> %__C) {908; X86-LABEL: test_mm256_mask_fmaddsub_pd:909; X86:       # %bb.0: # %entry910; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]911; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]912; X86-NEXT:    vfmaddsub132pd %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0xed,0x29,0x96,0xc1]913; X86-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) +/- ymm2914; X86-NEXT:    retl # encoding: [0xc3]915;916; X64-LABEL: test_mm256_mask_fmaddsub_pd:917; X64:       # %bb.0: # %entry918; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]919; X64-NEXT:    vfmaddsub132pd %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0xed,0x29,0x96,0xc1]920; X64-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) +/- ymm2921; X64-NEXT:    retq # encoding: [0xc3]922entry:923  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #9924  %1 = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C925  %2 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %1) #9926  %3 = shufflevector <4 x double> %2, <4 x double> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>927  %4 = bitcast i8 %__U to <8 x i1>928  %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>929  %5 = select <4 x i1> %extract.i, <4 x double> %3, <4 x double> %__A930  ret <4 x double> %5931}932 933define <4 x double> @test_mm256_mask_fmsubadd_pd(<4 x double> %__A, i8 zeroext %__U, <4 x double> %__B, <4 x double> %__C) {934; X86-LABEL: test_mm256_mask_fmsubadd_pd:935; X86:       # %bb.0: # %entry936; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]937; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]938; X86-NEXT:    vfmsubadd132pd %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0xed,0x29,0x97,0xc1]939; X86-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) -/+ ymm2940; X86-NEXT:    retl # encoding: [0xc3]941;942; X64-LABEL: test_mm256_mask_fmsubadd_pd:943; X64:       # %bb.0: # %entry944; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]945; X64-NEXT:    vfmsubadd132pd %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0xed,0x29,0x97,0xc1]946; X64-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) -/+ ymm2947; X64-NEXT:    retq # encoding: [0xc3]948entry:949  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C950  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %sub.i) #9951  %1 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #9952  %2 = shufflevector <4 x double> %1, <4 x double> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>953  %3 = bitcast i8 %__U to <8 x i1>954  %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>955  %4 = select <4 x i1> %extract.i, <4 x double> %2, <4 x double> %__A956  ret <4 x double> %4957}958 959define <4 x double> @test_mm256_mask3_fmaddsub_pd(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C, i8 zeroext %__U) {960; X86-LABEL: test_mm256_mask3_fmaddsub_pd:961; X86:       # %bb.0: # %entry962; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]963; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]964; X86-NEXT:    vfmaddsub231pd %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x29,0xb6,0xd1]965; X86-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) +/- ymm2966; X86-NEXT:    vmovapd %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfd,0x28,0xc2]967; X86-NEXT:    retl # encoding: [0xc3]968;969; X64-LABEL: test_mm256_mask3_fmaddsub_pd:970; X64:       # %bb.0: # %entry971; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]972; X64-NEXT:    vfmaddsub231pd %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x29,0xb6,0xd1]973; X64-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) +/- ymm2974; X64-NEXT:    vmovapd %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfd,0x28,0xc2]975; X64-NEXT:    retq # encoding: [0xc3]976entry:977  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #9978  %1 = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C979  %2 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %1) #9980  %3 = shufflevector <4 x double> %2, <4 x double> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>981  %4 = bitcast i8 %__U to <8 x i1>982  %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>983  %5 = select <4 x i1> %extract.i, <4 x double> %3, <4 x double> %__C984  ret <4 x double> %5985}986 987define <4 x double> @test_mm256_maskz_fmaddsub_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B, <4 x double> %__C) {988; X86-LABEL: test_mm256_maskz_fmaddsub_pd:989; X86:       # %bb.0: # %entry990; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]991; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]992; X86-NEXT:    vfmaddsub213pd %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xa9,0xa6,0xc2]993; X86-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) +/- ymm2994; X86-NEXT:    retl # encoding: [0xc3]995;996; X64-LABEL: test_mm256_maskz_fmaddsub_pd:997; X64:       # %bb.0: # %entry998; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]999; X64-NEXT:    vfmaddsub213pd %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xa9,0xa6,0xc2]1000; X64-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) +/- ymm21001; X64-NEXT:    retq # encoding: [0xc3]1002entry:1003  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #91004  %1 = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C1005  %2 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %1) #91006  %3 = shufflevector <4 x double> %2, <4 x double> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>1007  %4 = bitcast i8 %__U to <8 x i1>1008  %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1009  %5 = select <4 x i1> %extract.i, <4 x double> %3, <4 x double> zeroinitializer1010  ret <4 x double> %51011}1012 1013define <4 x double> @test_mm256_maskz_fmsubadd_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B, <4 x double> %__C) {1014; X86-LABEL: test_mm256_maskz_fmsubadd_pd:1015; X86:       # %bb.0: # %entry1016; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1017; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1018; X86-NEXT:    vfmsubadd213pd %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xa9,0xa7,0xc2]1019; X86-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) -/+ ymm21020; X86-NEXT:    retl # encoding: [0xc3]1021;1022; X64-LABEL: test_mm256_maskz_fmsubadd_pd:1023; X64:       # %bb.0: # %entry1024; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1025; X64-NEXT:    vfmsubadd213pd %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xa9,0xa7,0xc2]1026; X64-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) -/+ ymm21027; X64-NEXT:    retq # encoding: [0xc3]1028entry:1029  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C1030  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %sub.i) #91031  %1 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #91032  %2 = shufflevector <4 x double> %1, <4 x double> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>1033  %3 = bitcast i8 %__U to <8 x i1>1034  %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1035  %4 = select <4 x i1> %extract.i, <4 x double> %2, <4 x double> zeroinitializer1036  ret <4 x double> %41037}1038 1039define <4 x float> @test_mm_mask_fmaddsub_ps(<4 x float> %__A, i8 zeroext %__U, <4 x float> %__B, <4 x float> %__C) {1040; X86-LABEL: test_mm_mask_fmaddsub_ps:1041; X86:       # %bb.0: # %entry1042; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1043; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1044; X86-NEXT:    vfmaddsub132ps %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x09,0x96,0xc1]1045; X86-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) +/- xmm21046; X86-NEXT:    retl # encoding: [0xc3]1047;1048; X64-LABEL: test_mm_mask_fmaddsub_ps:1049; X64:       # %bb.0: # %entry1050; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1051; X64-NEXT:    vfmaddsub132ps %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x09,0x96,0xc1]1052; X64-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) +/- xmm21053; X64-NEXT:    retq # encoding: [0xc3]1054entry:1055  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #91056  %1 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C1057  %2 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %1) #91058  %3 = shufflevector <4 x float> %2, <4 x float> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>1059  %4 = bitcast i8 %__U to <8 x i1>1060  %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1061  %5 = select <4 x i1> %extract.i, <4 x float> %3, <4 x float> %__A1062  ret <4 x float> %51063}1064 1065define <4 x float> @test_mm_mask_fmsubadd_ps(<4 x float> %__A, i8 zeroext %__U, <4 x float> %__B, <4 x float> %__C) {1066; X86-LABEL: test_mm_mask_fmsubadd_ps:1067; X86:       # %bb.0: # %entry1068; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1069; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1070; X86-NEXT:    vfmsubadd132ps %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x09,0x97,0xc1]1071; X86-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) -/+ xmm21072; X86-NEXT:    retl # encoding: [0xc3]1073;1074; X64-LABEL: test_mm_mask_fmsubadd_ps:1075; X64:       # %bb.0: # %entry1076; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1077; X64-NEXT:    vfmsubadd132ps %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x09,0x97,0xc1]1078; X64-NEXT:    # xmm0 {%k1} = (xmm0 * xmm1) -/+ xmm21079; X64-NEXT:    retq # encoding: [0xc3]1080entry:1081  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C1082  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %sub.i) #91083  %1 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #91084  %2 = shufflevector <4 x float> %1, <4 x float> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>1085  %3 = bitcast i8 %__U to <8 x i1>1086  %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1087  %4 = select <4 x i1> %extract.i, <4 x float> %2, <4 x float> %__A1088  ret <4 x float> %41089}1090 1091define <4 x float> @test_mm_mask3_fmaddsub_ps(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C, i8 zeroext %__U) {1092; X86-LABEL: test_mm_mask3_fmaddsub_ps:1093; X86:       # %bb.0: # %entry1094; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1095; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1096; X86-NEXT:    vfmaddsub231ps %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xb6,0xd1]1097; X86-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) +/- xmm21098; X86-NEXT:    vmovaps %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc2]1099; X86-NEXT:    retl # encoding: [0xc3]1100;1101; X64-LABEL: test_mm_mask3_fmaddsub_ps:1102; X64:       # %bb.0: # %entry1103; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1104; X64-NEXT:    vfmaddsub231ps %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xb6,0xd1]1105; X64-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) +/- xmm21106; X64-NEXT:    vmovaps %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc2]1107; X64-NEXT:    retq # encoding: [0xc3]1108entry:1109  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #91110  %1 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C1111  %2 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %1) #91112  %3 = shufflevector <4 x float> %2, <4 x float> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>1113  %4 = bitcast i8 %__U to <8 x i1>1114  %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1115  %5 = select <4 x i1> %extract.i, <4 x float> %3, <4 x float> %__C1116  ret <4 x float> %51117}1118 1119define <4 x float> @test_mm_maskz_fmaddsub_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {1120; X86-LABEL: test_mm_maskz_fmaddsub_ps:1121; X86:       # %bb.0: # %entry1122; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1123; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1124; X86-NEXT:    vfmaddsub213ps %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0x89,0xa6,0xc2]1125; X86-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) +/- xmm21126; X86-NEXT:    retl # encoding: [0xc3]1127;1128; X64-LABEL: test_mm_maskz_fmaddsub_ps:1129; X64:       # %bb.0: # %entry1130; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1131; X64-NEXT:    vfmaddsub213ps %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0x89,0xa6,0xc2]1132; X64-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) +/- xmm21133; X64-NEXT:    retq # encoding: [0xc3]1134entry:1135  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #91136  %1 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C1137  %2 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %1) #91138  %3 = shufflevector <4 x float> %2, <4 x float> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>1139  %4 = bitcast i8 %__U to <8 x i1>1140  %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1141  %5 = select <4 x i1> %extract.i, <4 x float> %3, <4 x float> zeroinitializer1142  ret <4 x float> %51143}1144 1145define <4 x float> @test_mm_maskz_fmsubadd_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {1146; X86-LABEL: test_mm_maskz_fmsubadd_ps:1147; X86:       # %bb.0: # %entry1148; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1149; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1150; X86-NEXT:    vfmsubadd213ps %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0x89,0xa7,0xc2]1151; X86-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) -/+ xmm21152; X86-NEXT:    retl # encoding: [0xc3]1153;1154; X64-LABEL: test_mm_maskz_fmsubadd_ps:1155; X64:       # %bb.0: # %entry1156; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1157; X64-NEXT:    vfmsubadd213ps %xmm2, %xmm1, %xmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0x89,0xa7,0xc2]1158; X64-NEXT:    # xmm0 {%k1} {z} = (xmm1 * xmm0) -/+ xmm21159; X64-NEXT:    retq # encoding: [0xc3]1160entry:1161  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C1162  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %sub.i) #91163  %1 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #91164  %2 = shufflevector <4 x float> %1, <4 x float> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>1165  %3 = bitcast i8 %__U to <8 x i1>1166  %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1167  %4 = select <4 x i1> %extract.i, <4 x float> %2, <4 x float> zeroinitializer1168  ret <4 x float> %41169}1170 1171define <8 x float> @test_mm256_mask_fmaddsub_ps(<8 x float> %__A, i8 zeroext %__U, <8 x float> %__B, <8 x float> %__C) {1172; X86-LABEL: test_mm256_mask_fmaddsub_ps:1173; X86:       # %bb.0: # %entry1174; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1175; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1176; X86-NEXT:    vfmaddsub132ps %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x29,0x96,0xc1]1177; X86-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) +/- ymm21178; X86-NEXT:    retl # encoding: [0xc3]1179;1180; X64-LABEL: test_mm256_mask_fmaddsub_ps:1181; X64:       # %bb.0: # %entry1182; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1183; X64-NEXT:    vfmaddsub132ps %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x29,0x96,0xc1]1184; X64-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) +/- ymm21185; X64-NEXT:    retq # encoding: [0xc3]1186entry:1187  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #91188  %1 = fsub <8 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>, %__C1189  %2 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %1) #91190  %3 = shufflevector <8 x float> %2, <8 x float> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1191  %4 = bitcast i8 %__U to <8 x i1>1192  %5 = select <8 x i1> %4, <8 x float> %3, <8 x float> %__A1193  ret <8 x float> %51194}1195 1196define <8 x float> @test_mm256_mask_fmsubadd_ps(<8 x float> %__A, i8 zeroext %__U, <8 x float> %__B, <8 x float> %__C) {1197; X86-LABEL: test_mm256_mask_fmsubadd_ps:1198; X86:       # %bb.0: # %entry1199; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1200; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1201; X86-NEXT:    vfmsubadd132ps %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x29,0x97,0xc1]1202; X86-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) -/+ ymm21203; X86-NEXT:    retl # encoding: [0xc3]1204;1205; X64-LABEL: test_mm256_mask_fmsubadd_ps:1206; X64:       # %bb.0: # %entry1207; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1208; X64-NEXT:    vfmsubadd132ps %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x29,0x97,0xc1]1209; X64-NEXT:    # ymm0 {%k1} = (ymm0 * ymm1) -/+ ymm21210; X64-NEXT:    retq # encoding: [0xc3]1211entry:1212  %sub.i = fsub <8 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>, %__C1213  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %sub.i) #91214  %1 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #91215  %2 = shufflevector <8 x float> %1, <8 x float> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1216  %3 = bitcast i8 %__U to <8 x i1>1217  %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> %__A1218  ret <8 x float> %41219}1220 1221define <8 x float> @test_mm256_mask3_fmaddsub_ps(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C, i8 zeroext %__U) {1222; X86-LABEL: test_mm256_mask3_fmaddsub_ps:1223; X86:       # %bb.0: # %entry1224; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1225; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1226; X86-NEXT:    vfmaddsub231ps %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x29,0xb6,0xd1]1227; X86-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) +/- ymm21228; X86-NEXT:    vmovaps %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfc,0x28,0xc2]1229; X86-NEXT:    retl # encoding: [0xc3]1230;1231; X64-LABEL: test_mm256_mask3_fmaddsub_ps:1232; X64:       # %bb.0: # %entry1233; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1234; X64-NEXT:    vfmaddsub231ps %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x29,0xb6,0xd1]1235; X64-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) +/- ymm21236; X64-NEXT:    vmovaps %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfc,0x28,0xc2]1237; X64-NEXT:    retq # encoding: [0xc3]1238entry:1239  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #91240  %1 = fsub <8 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>, %__C1241  %2 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %1) #91242  %3 = shufflevector <8 x float> %2, <8 x float> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1243  %4 = bitcast i8 %__U to <8 x i1>1244  %5 = select <8 x i1> %4, <8 x float> %3, <8 x float> %__C1245  ret <8 x float> %51246}1247 1248define <8 x float> @test_mm256_maskz_fmaddsub_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B, <8 x float> %__C) {1249; X86-LABEL: test_mm256_maskz_fmaddsub_ps:1250; X86:       # %bb.0: # %entry1251; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1252; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1253; X86-NEXT:    vfmaddsub213ps %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xa9,0xa6,0xc2]1254; X86-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) +/- ymm21255; X86-NEXT:    retl # encoding: [0xc3]1256;1257; X64-LABEL: test_mm256_maskz_fmaddsub_ps:1258; X64:       # %bb.0: # %entry1259; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1260; X64-NEXT:    vfmaddsub213ps %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xa9,0xa6,0xc2]1261; X64-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) +/- ymm21262; X64-NEXT:    retq # encoding: [0xc3]1263entry:1264  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #91265  %1 = fsub <8 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>, %__C1266  %2 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %1) #91267  %3 = shufflevector <8 x float> %2, <8 x float> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1268  %4 = bitcast i8 %__U to <8 x i1>1269  %5 = select <8 x i1> %4, <8 x float> %3, <8 x float> zeroinitializer1270  ret <8 x float> %51271}1272 1273define <8 x float> @test_mm256_maskz_fmsubadd_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B, <8 x float> %__C) {1274; X86-LABEL: test_mm256_maskz_fmsubadd_ps:1275; X86:       # %bb.0: # %entry1276; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1277; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1278; X86-NEXT:    vfmsubadd213ps %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xa9,0xa7,0xc2]1279; X86-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) -/+ ymm21280; X86-NEXT:    retl # encoding: [0xc3]1281;1282; X64-LABEL: test_mm256_maskz_fmsubadd_ps:1283; X64:       # %bb.0: # %entry1284; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1285; X64-NEXT:    vfmsubadd213ps %ymm2, %ymm1, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xa9,0xa7,0xc2]1286; X64-NEXT:    # ymm0 {%k1} {z} = (ymm1 * ymm0) -/+ ymm21287; X64-NEXT:    retq # encoding: [0xc3]1288entry:1289  %sub.i = fsub <8 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>, %__C1290  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %sub.i) #91291  %1 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #91292  %2 = shufflevector <8 x float> %1, <8 x float> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1293  %3 = bitcast i8 %__U to <8 x i1>1294  %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> zeroinitializer1295  ret <8 x float> %41296}1297 1298define <2 x double> @test_mm_mask3_fmsub_pd(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C, i8 zeroext %__U) {1299; X86-LABEL: test_mm_mask3_fmsub_pd:1300; X86:       # %bb.0: # %entry1301; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1302; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1303; X86-NEXT:    vfmsub231pd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xba,0xd1]1304; X86-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) - xmm21305; X86-NEXT:    vmovapd %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc2]1306; X86-NEXT:    retl # encoding: [0xc3]1307;1308; X64-LABEL: test_mm_mask3_fmsub_pd:1309; X64:       # %bb.0: # %entry1310; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1311; X64-NEXT:    vfmsub231pd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xba,0xd1]1312; X64-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) - xmm21313; X64-NEXT:    vmovapd %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc2]1314; X64-NEXT:    retq # encoding: [0xc3]1315entry:1316  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C1317  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %sub.i) #91318  %1 = bitcast i8 %__U to <8 x i1>1319  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>1320  %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__C1321  ret <2 x double> %21322}1323 1324define <4 x double> @test_mm256_mask3_fmsub_pd(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C, i8 zeroext %__U) {1325; X86-LABEL: test_mm256_mask3_fmsub_pd:1326; X86:       # %bb.0: # %entry1327; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1328; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1329; X86-NEXT:    vfmsub231pd %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x29,0xba,0xd1]1330; X86-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) - ymm21331; X86-NEXT:    vmovapd %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfd,0x28,0xc2]1332; X86-NEXT:    retl # encoding: [0xc3]1333;1334; X64-LABEL: test_mm256_mask3_fmsub_pd:1335; X64:       # %bb.0: # %entry1336; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1337; X64-NEXT:    vfmsub231pd %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x29,0xba,0xd1]1338; X64-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) - ymm21339; X64-NEXT:    vmovapd %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfd,0x28,0xc2]1340; X64-NEXT:    retq # encoding: [0xc3]1341entry:1342  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C1343  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %sub.i) #91344  %1 = bitcast i8 %__U to <8 x i1>1345  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1346  %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__C1347  ret <4 x double> %21348}1349 1350define <4 x float> @test_mm_mask3_fmsub_ps(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C, i8 zeroext %__U) {1351; X86-LABEL: test_mm_mask3_fmsub_ps:1352; X86:       # %bb.0: # %entry1353; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1354; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1355; X86-NEXT:    vfmsub231ps %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xba,0xd1]1356; X86-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) - xmm21357; X86-NEXT:    vmovaps %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc2]1358; X86-NEXT:    retl # encoding: [0xc3]1359;1360; X64-LABEL: test_mm_mask3_fmsub_ps:1361; X64:       # %bb.0: # %entry1362; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1363; X64-NEXT:    vfmsub231ps %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xba,0xd1]1364; X64-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) - xmm21365; X64-NEXT:    vmovaps %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc2]1366; X64-NEXT:    retq # encoding: [0xc3]1367entry:1368  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C1369  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %sub.i) #91370  %1 = bitcast i8 %__U to <8 x i1>1371  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1372  %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__C1373  ret <4 x float> %21374}1375 1376define <8 x float> @test_mm256_mask3_fmsub_ps(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C, i8 zeroext %__U) {1377; X86-LABEL: test_mm256_mask3_fmsub_ps:1378; X86:       # %bb.0: # %entry1379; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1380; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1381; X86-NEXT:    vfmsub231ps %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x29,0xba,0xd1]1382; X86-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) - ymm21383; X86-NEXT:    vmovaps %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfc,0x28,0xc2]1384; X86-NEXT:    retl # encoding: [0xc3]1385;1386; X64-LABEL: test_mm256_mask3_fmsub_ps:1387; X64:       # %bb.0: # %entry1388; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1389; X64-NEXT:    vfmsub231ps %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x29,0xba,0xd1]1390; X64-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) - ymm21391; X64-NEXT:    vmovaps %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfc,0x28,0xc2]1392; X64-NEXT:    retq # encoding: [0xc3]1393entry:1394  %sub.i = fsub <8 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>, %__C1395  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %sub.i) #91396  %1 = bitcast i8 %__U to <8 x i1>1397  %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__C1398  ret <8 x float> %21399}1400 1401define <2 x double> @test_mm_mask3_fmsubadd_pd(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C, i8 zeroext %__U) {1402; X86-LABEL: test_mm_mask3_fmsubadd_pd:1403; X86:       # %bb.0: # %entry1404; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1405; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1406; X86-NEXT:    vfmsubadd231pd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xb7,0xd1]1407; X86-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) -/+ xmm21408; X86-NEXT:    vmovapd %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc2]1409; X86-NEXT:    retl # encoding: [0xc3]1410;1411; X64-LABEL: test_mm_mask3_fmsubadd_pd:1412; X64:       # %bb.0: # %entry1413; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1414; X64-NEXT:    vfmsubadd231pd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xb7,0xd1]1415; X64-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) -/+ xmm21416; X64-NEXT:    vmovapd %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc2]1417; X64-NEXT:    retq # encoding: [0xc3]1418entry:1419  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C1420  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %sub.i) #91421  %1 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #91422  %2 = shufflevector <2 x double> %1, <2 x double> %0, <2 x i32> <i32 0, i32 3>1423  %3 = bitcast i8 %__U to <8 x i1>1424  %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>1425  %4 = select <2 x i1> %extract.i, <2 x double> %2, <2 x double> %__C1426  ret <2 x double> %41427}1428 1429define <4 x double> @test_mm256_mask3_fmsubadd_pd(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C, i8 zeroext %__U) {1430; X86-LABEL: test_mm256_mask3_fmsubadd_pd:1431; X86:       # %bb.0: # %entry1432; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1433; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1434; X86-NEXT:    vfmsubadd231pd %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x29,0xb7,0xd1]1435; X86-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) -/+ ymm21436; X86-NEXT:    vmovapd %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfd,0x28,0xc2]1437; X86-NEXT:    retl # encoding: [0xc3]1438;1439; X64-LABEL: test_mm256_mask3_fmsubadd_pd:1440; X64:       # %bb.0: # %entry1441; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1442; X64-NEXT:    vfmsubadd231pd %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x29,0xb7,0xd1]1443; X64-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) -/+ ymm21444; X64-NEXT:    vmovapd %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfd,0x28,0xc2]1445; X64-NEXT:    retq # encoding: [0xc3]1446entry:1447  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C1448  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %sub.i) #91449  %1 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #91450  %2 = shufflevector <4 x double> %1, <4 x double> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>1451  %3 = bitcast i8 %__U to <8 x i1>1452  %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1453  %4 = select <4 x i1> %extract.i, <4 x double> %2, <4 x double> %__C1454  ret <4 x double> %41455}1456 1457define <4 x float> @test_mm_mask3_fmsubadd_ps(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C, i8 zeroext %__U) {1458; X86-LABEL: test_mm_mask3_fmsubadd_ps:1459; X86:       # %bb.0: # %entry1460; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1461; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1462; X86-NEXT:    vfmsubadd231ps %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xb7,0xd1]1463; X86-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) -/+ xmm21464; X86-NEXT:    vmovaps %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc2]1465; X86-NEXT:    retl # encoding: [0xc3]1466;1467; X64-LABEL: test_mm_mask3_fmsubadd_ps:1468; X64:       # %bb.0: # %entry1469; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1470; X64-NEXT:    vfmsubadd231ps %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xb7,0xd1]1471; X64-NEXT:    # xmm2 {%k1} = (xmm0 * xmm1) -/+ xmm21472; X64-NEXT:    vmovaps %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc2]1473; X64-NEXT:    retq # encoding: [0xc3]1474entry:1475  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C1476  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %sub.i) #91477  %1 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #91478  %2 = shufflevector <4 x float> %1, <4 x float> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>1479  %3 = bitcast i8 %__U to <8 x i1>1480  %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1481  %4 = select <4 x i1> %extract.i, <4 x float> %2, <4 x float> %__C1482  ret <4 x float> %41483}1484 1485define <8 x float> @test_mm256_mask3_fmsubadd_ps(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C, i8 zeroext %__U) {1486; X86-LABEL: test_mm256_mask3_fmsubadd_ps:1487; X86:       # %bb.0: # %entry1488; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1489; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1490; X86-NEXT:    vfmsubadd231ps %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x29,0xb7,0xd1]1491; X86-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) -/+ ymm21492; X86-NEXT:    vmovaps %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfc,0x28,0xc2]1493; X86-NEXT:    retl # encoding: [0xc3]1494;1495; X64-LABEL: test_mm256_mask3_fmsubadd_ps:1496; X64:       # %bb.0: # %entry1497; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1498; X64-NEXT:    vfmsubadd231ps %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x29,0xb7,0xd1]1499; X64-NEXT:    # ymm2 {%k1} = (ymm0 * ymm1) -/+ ymm21500; X64-NEXT:    vmovaps %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfc,0x28,0xc2]1501; X64-NEXT:    retq # encoding: [0xc3]1502entry:1503  %sub.i = fsub <8 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>, %__C1504  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %sub.i) #91505  %1 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #91506  %2 = shufflevector <8 x float> %1, <8 x float> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1507  %3 = bitcast i8 %__U to <8 x i1>1508  %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> %__C1509  ret <8 x float> %41510}1511 1512define <2 x double> @test_mm_mask_fnmadd_pd(<2 x double> %__A, i8 zeroext %__U, <2 x double> %__B, <2 x double> %__C) {1513; X86-LABEL: test_mm_mask_fnmadd_pd:1514; X86:       # %bb.0: # %entry1515; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1516; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1517; X86-NEXT:    vfnmadd132pd %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x09,0x9c,0xc1]1518; X86-NEXT:    # xmm0 {%k1} = -(xmm0 * xmm1) + xmm21519; X86-NEXT:    retl # encoding: [0xc3]1520;1521; X64-LABEL: test_mm_mask_fnmadd_pd:1522; X64:       # %bb.0: # %entry1523; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1524; X64-NEXT:    vfnmadd132pd %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x09,0x9c,0xc1]1525; X64-NEXT:    # xmm0 {%k1} = -(xmm0 * xmm1) + xmm21526; X64-NEXT:    retq # encoding: [0xc3]1527entry:1528  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__B1529  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %sub.i, <2 x double> %__C) #91530  %1 = bitcast i8 %__U to <8 x i1>1531  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>1532  %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__A1533  ret <2 x double> %21534}1535 1536define <4 x double> @test_mm256_mask_fnmadd_pd(<4 x double> %__A, i8 zeroext %__U, <4 x double> %__B, <4 x double> %__C) {1537; X86-LABEL: test_mm256_mask_fnmadd_pd:1538; X86:       # %bb.0: # %entry1539; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1540; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1541; X86-NEXT:    vfnmadd132pd %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0xed,0x29,0x9c,0xc1]1542; X86-NEXT:    # ymm0 {%k1} = -(ymm0 * ymm1) + ymm21543; X86-NEXT:    retl # encoding: [0xc3]1544;1545; X64-LABEL: test_mm256_mask_fnmadd_pd:1546; X64:       # %bb.0: # %entry1547; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1548; X64-NEXT:    vfnmadd132pd %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0xed,0x29,0x9c,0xc1]1549; X64-NEXT:    # ymm0 {%k1} = -(ymm0 * ymm1) + ymm21550; X64-NEXT:    retq # encoding: [0xc3]1551entry:1552  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__B1553  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %sub.i, <4 x double> %__C) #91554  %1 = bitcast i8 %__U to <8 x i1>1555  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1556  %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__A1557  ret <4 x double> %21558}1559 1560define <4 x float> @test_mm_mask_fnmadd_ps(<4 x float> %__A, i8 zeroext %__U, <4 x float> %__B, <4 x float> %__C) {1561; X86-LABEL: test_mm_mask_fnmadd_ps:1562; X86:       # %bb.0: # %entry1563; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1564; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1565; X86-NEXT:    vfnmadd132ps %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x09,0x9c,0xc1]1566; X86-NEXT:    # xmm0 {%k1} = -(xmm0 * xmm1) + xmm21567; X86-NEXT:    retl # encoding: [0xc3]1568;1569; X64-LABEL: test_mm_mask_fnmadd_ps:1570; X64:       # %bb.0: # %entry1571; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1572; X64-NEXT:    vfnmadd132ps %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x09,0x9c,0xc1]1573; X64-NEXT:    # xmm0 {%k1} = -(xmm0 * xmm1) + xmm21574; X64-NEXT:    retq # encoding: [0xc3]1575entry:1576  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__B1577  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %sub.i, <4 x float> %__C) #91578  %1 = bitcast i8 %__U to <8 x i1>1579  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1580  %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__A1581  ret <4 x float> %21582}1583 1584define <8 x float> @test_mm256_mask_fnmadd_ps(<8 x float> %__A, i8 zeroext %__U, <8 x float> %__B, <8 x float> %__C) {1585; X86-LABEL: test_mm256_mask_fnmadd_ps:1586; X86:       # %bb.0: # %entry1587; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1588; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1589; X86-NEXT:    vfnmadd132ps %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x29,0x9c,0xc1]1590; X86-NEXT:    # ymm0 {%k1} = -(ymm0 * ymm1) + ymm21591; X86-NEXT:    retl # encoding: [0xc3]1592;1593; X64-LABEL: test_mm256_mask_fnmadd_ps:1594; X64:       # %bb.0: # %entry1595; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1596; X64-NEXT:    vfnmadd132ps %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x29,0x9c,0xc1]1597; X64-NEXT:    # ymm0 {%k1} = -(ymm0 * ymm1) + ymm21598; X64-NEXT:    retq # encoding: [0xc3]1599entry:1600  %sub.i = fsub <8 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>, %__B1601  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %sub.i, <8 x float> %__C) #91602  %1 = bitcast i8 %__U to <8 x i1>1603  %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__A1604  ret <8 x float> %21605}1606 1607define <2 x double> @test_mm_mask_fnmsub_pd(<2 x double> %__A, i8 zeroext %__U, <2 x double> %__B, <2 x double> %__C) {1608; X86-LABEL: test_mm_mask_fnmsub_pd:1609; X86:       # %bb.0: # %entry1610; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1611; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1612; X86-NEXT:    vfnmsub132pd %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x09,0x9e,0xc1]1613; X86-NEXT:    # xmm0 {%k1} = -(xmm0 * xmm1) - xmm21614; X86-NEXT:    retl # encoding: [0xc3]1615;1616; X64-LABEL: test_mm_mask_fnmsub_pd:1617; X64:       # %bb.0: # %entry1618; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1619; X64-NEXT:    vfnmsub132pd %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0xed,0x09,0x9e,0xc1]1620; X64-NEXT:    # xmm0 {%k1} = -(xmm0 * xmm1) - xmm21621; X64-NEXT:    retq # encoding: [0xc3]1622entry:1623  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__B1624  %sub1.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C1625  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %sub.i, <2 x double> %sub1.i) #91626  %1 = bitcast i8 %__U to <8 x i1>1627  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>1628  %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__A1629  ret <2 x double> %21630}1631 1632define <2 x double> @test_mm_mask3_fnmsub_pd(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C, i8 zeroext %__U) {1633; X86-LABEL: test_mm_mask3_fnmsub_pd:1634; X86:       # %bb.0: # %entry1635; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1636; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1637; X86-NEXT:    vfnmsub231pd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xbe,0xd1]1638; X86-NEXT:    # xmm2 {%k1} = -(xmm0 * xmm1) - xmm21639; X86-NEXT:    vmovapd %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc2]1640; X86-NEXT:    retl # encoding: [0xc3]1641;1642; X64-LABEL: test_mm_mask3_fnmsub_pd:1643; X64:       # %bb.0: # %entry1644; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1645; X64-NEXT:    vfnmsub231pd %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x09,0xbe,0xd1]1646; X64-NEXT:    # xmm2 {%k1} = -(xmm0 * xmm1) - xmm21647; X64-NEXT:    vmovapd %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc2]1648; X64-NEXT:    retq # encoding: [0xc3]1649entry:1650  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__B1651  %sub1.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C1652  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %sub.i, <2 x double> %sub1.i) #91653  %1 = bitcast i8 %__U to <8 x i1>1654  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>1655  %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__C1656  ret <2 x double> %21657}1658 1659define <4 x double> @test_mm256_mask_fnmsub_pd(<4 x double> %__A, i8 zeroext %__U, <4 x double> %__B, <4 x double> %__C) {1660; X86-LABEL: test_mm256_mask_fnmsub_pd:1661; X86:       # %bb.0: # %entry1662; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1663; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1664; X86-NEXT:    vfnmsub132pd %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0xed,0x29,0x9e,0xc1]1665; X86-NEXT:    # ymm0 {%k1} = -(ymm0 * ymm1) - ymm21666; X86-NEXT:    retl # encoding: [0xc3]1667;1668; X64-LABEL: test_mm256_mask_fnmsub_pd:1669; X64:       # %bb.0: # %entry1670; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1671; X64-NEXT:    vfnmsub132pd %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0xed,0x29,0x9e,0xc1]1672; X64-NEXT:    # ymm0 {%k1} = -(ymm0 * ymm1) - ymm21673; X64-NEXT:    retq # encoding: [0xc3]1674entry:1675  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__B1676  %sub1.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C1677  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %sub.i, <4 x double> %sub1.i) #91678  %1 = bitcast i8 %__U to <8 x i1>1679  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1680  %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__A1681  ret <4 x double> %21682}1683 1684define <4 x double> @test_mm256_mask3_fnmsub_pd(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C, i8 zeroext %__U) {1685; X86-LABEL: test_mm256_mask3_fnmsub_pd:1686; X86:       # %bb.0: # %entry1687; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1688; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1689; X86-NEXT:    vfnmsub231pd %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x29,0xbe,0xd1]1690; X86-NEXT:    # ymm2 {%k1} = -(ymm0 * ymm1) - ymm21691; X86-NEXT:    vmovapd %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfd,0x28,0xc2]1692; X86-NEXT:    retl # encoding: [0xc3]1693;1694; X64-LABEL: test_mm256_mask3_fnmsub_pd:1695; X64:       # %bb.0: # %entry1696; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1697; X64-NEXT:    vfnmsub231pd %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x29,0xbe,0xd1]1698; X64-NEXT:    # ymm2 {%k1} = -(ymm0 * ymm1) - ymm21699; X64-NEXT:    vmovapd %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfd,0x28,0xc2]1700; X64-NEXT:    retq # encoding: [0xc3]1701entry:1702  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__B1703  %sub1.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C1704  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %sub.i, <4 x double> %sub1.i) #91705  %1 = bitcast i8 %__U to <8 x i1>1706  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1707  %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__C1708  ret <4 x double> %21709}1710 1711define <4 x float> @test_mm_mask_fnmsub_ps(<4 x float> %__A, i8 zeroext %__U, <4 x float> %__B, <4 x float> %__C) {1712; X86-LABEL: test_mm_mask_fnmsub_ps:1713; X86:       # %bb.0: # %entry1714; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1715; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1716; X86-NEXT:    vfnmsub132ps %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x09,0x9e,0xc1]1717; X86-NEXT:    # xmm0 {%k1} = -(xmm0 * xmm1) - xmm21718; X86-NEXT:    retl # encoding: [0xc3]1719;1720; X64-LABEL: test_mm_mask_fnmsub_ps:1721; X64:       # %bb.0: # %entry1722; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1723; X64-NEXT:    vfnmsub132ps %xmm1, %xmm2, %xmm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x09,0x9e,0xc1]1724; X64-NEXT:    # xmm0 {%k1} = -(xmm0 * xmm1) - xmm21725; X64-NEXT:    retq # encoding: [0xc3]1726entry:1727  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__B1728  %sub1.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C1729  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %sub.i, <4 x float> %sub1.i) #91730  %1 = bitcast i8 %__U to <8 x i1>1731  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1732  %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__A1733  ret <4 x float> %21734}1735 1736define <4 x float> @test_mm_mask3_fnmsub_ps(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C, i8 zeroext %__U) {1737; X86-LABEL: test_mm_mask3_fnmsub_ps:1738; X86:       # %bb.0: # %entry1739; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1740; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1741; X86-NEXT:    vfnmsub231ps %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xbe,0xd1]1742; X86-NEXT:    # xmm2 {%k1} = -(xmm0 * xmm1) - xmm21743; X86-NEXT:    vmovaps %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc2]1744; X86-NEXT:    retl # encoding: [0xc3]1745;1746; X64-LABEL: test_mm_mask3_fnmsub_ps:1747; X64:       # %bb.0: # %entry1748; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1749; X64-NEXT:    vfnmsub231ps %xmm1, %xmm0, %xmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x09,0xbe,0xd1]1750; X64-NEXT:    # xmm2 {%k1} = -(xmm0 * xmm1) - xmm21751; X64-NEXT:    vmovaps %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc2]1752; X64-NEXT:    retq # encoding: [0xc3]1753entry:1754  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__B1755  %sub1.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C1756  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %sub.i, <4 x float> %sub1.i) #91757  %1 = bitcast i8 %__U to <8 x i1>1758  %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1759  %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__C1760  ret <4 x float> %21761}1762 1763define <8 x float> @test_mm256_mask_fnmsub_ps(<8 x float> %__A, i8 zeroext %__U, <8 x float> %__B, <8 x float> %__C) {1764; X86-LABEL: test_mm256_mask_fnmsub_ps:1765; X86:       # %bb.0: # %entry1766; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1767; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1768; X86-NEXT:    vfnmsub132ps %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x29,0x9e,0xc1]1769; X86-NEXT:    # ymm0 {%k1} = -(ymm0 * ymm1) - ymm21770; X86-NEXT:    retl # encoding: [0xc3]1771;1772; X64-LABEL: test_mm256_mask_fnmsub_ps:1773; X64:       # %bb.0: # %entry1774; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1775; X64-NEXT:    vfnmsub132ps %ymm1, %ymm2, %ymm0 {%k1} # encoding: [0x62,0xf2,0x6d,0x29,0x9e,0xc1]1776; X64-NEXT:    # ymm0 {%k1} = -(ymm0 * ymm1) - ymm21777; X64-NEXT:    retq # encoding: [0xc3]1778entry:1779  %sub.i = fsub <8 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>, %__B1780  %sub1.i = fsub <8 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>, %__C1781  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %sub.i, <8 x float> %sub1.i) #91782  %1 = bitcast i8 %__U to <8 x i1>1783  %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__A1784  ret <8 x float> %21785}1786 1787define <8 x float> @test_mm256_mask3_fnmsub_ps(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C, i8 zeroext %__U) {1788; X86-LABEL: test_mm256_mask3_fnmsub_ps:1789; X86:       # %bb.0: # %entry1790; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax # encoding: [0x0f,0xb6,0x44,0x24,0x04]1791; X86-NEXT:    kmovw %eax, %k1 # encoding: [0xc5,0xf8,0x92,0xc8]1792; X86-NEXT:    vfnmsub231ps %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x29,0xbe,0xd1]1793; X86-NEXT:    # ymm2 {%k1} = -(ymm0 * ymm1) - ymm21794; X86-NEXT:    vmovaps %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfc,0x28,0xc2]1795; X86-NEXT:    retl # encoding: [0xc3]1796;1797; X64-LABEL: test_mm256_mask3_fnmsub_ps:1798; X64:       # %bb.0: # %entry1799; X64-NEXT:    kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]1800; X64-NEXT:    vfnmsub231ps %ymm1, %ymm0, %ymm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x29,0xbe,0xd1]1801; X64-NEXT:    # ymm2 {%k1} = -(ymm0 * ymm1) - ymm21802; X64-NEXT:    vmovaps %ymm2, %ymm0 # EVEX TO VEX Compression encoding: [0xc5,0xfc,0x28,0xc2]1803; X64-NEXT:    retq # encoding: [0xc3]1804entry:1805  %sub.i = fsub <8 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>, %__B1806  %sub1.i = fsub <8 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>, %__C1807  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %sub.i, <8 x float> %sub1.i) #91808  %1 = bitcast i8 %__U to <8 x i1>1809  %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__C1810  ret <8 x float> %21811}1812 1813declare <2 x double> @llvm.fma.v2f64(<2 x double>, <2 x double>, <2 x double>) #81814declare <4 x double> @llvm.fma.v4f64(<4 x double>, <4 x double>, <4 x double>) #81815declare <4 x float> @llvm.fma.v4f32(<4 x float>, <4 x float>, <4 x float>) #81816declare <8 x float> @llvm.fma.v8f32(<8 x float>, <8 x float>, <8 x float>) #81817