brintos

brintos / llvm-project-archived public Read only

0
0
Text · 61.0 KiB · 94229c9 Raw
1163 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+fma,-fma4 -show-mc-encoding | FileCheck %s --check-prefix=CHECK-FMA3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,-fma4 -show-mc-encoding | FileCheck %s --check-prefix=CHECK-AVX512VL4; RUN: llc < %s -mtriple=x86_64-pc-windows -mattr=+fma,-fma4 -show-mc-encoding | FileCheck %s --check-prefix=CHECK-FMA-WIN5 6; VFMADD7define <4 x float> @test_x86_fma_vfmadd_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {8; CHECK-FMA-LABEL: test_x86_fma_vfmadd_ss:9; CHECK-FMA:       # %bb.0:10; CHECK-FMA-NEXT:    vfmadd213ss %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xa9,0xc2]11; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm212; CHECK-FMA-NEXT:    retq # encoding: [0xc3]13;14; CHECK-AVX512VL-LABEL: test_x86_fma_vfmadd_ss:15; CHECK-AVX512VL:       # %bb.0:16; CHECK-AVX512VL-NEXT:    vfmadd213ss %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xa9,0xc2]17; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm218; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]19;20; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmadd_ss:21; CHECK-FMA-WIN:       # %bb.0:22; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x01]23; CHECK-FMA-WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero24; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7a,0x10,0x08]25; CHECK-FMA-WIN-NEXT:    vfmadd132ss (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0x99,0x02]26; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm0 * mem) + xmm127; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]28  %1 = extractelement <4 x float> %a0, i64 029  %2 = extractelement <4 x float> %a1, i64 030  %3 = extractelement <4 x float> %a2, i64 031  %4 = call float @llvm.fma.f32(float %1, float %2, float %3)32  %5 = insertelement <4 x float> %a0, float %4, i64 033  ret <4 x float> %534}35 36define <4 x float> @test_x86_fma_vfmadd_bac_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {37; CHECK-FMA-LABEL: test_x86_fma_vfmadd_bac_ss:38; CHECK-FMA:       # %bb.0:39; CHECK-FMA-NEXT:    vfmadd213ss %xmm2, %xmm0, %xmm1 # encoding: [0xc4,0xe2,0x79,0xa9,0xca]40; CHECK-FMA-NEXT:    # xmm1 = (xmm0 * xmm1) + xmm241; CHECK-FMA-NEXT:    vmovaps %xmm1, %xmm0 # encoding: [0xc5,0xf8,0x28,0xc1]42; CHECK-FMA-NEXT:    retq # encoding: [0xc3]43;44; CHECK-AVX512VL-LABEL: test_x86_fma_vfmadd_bac_ss:45; CHECK-AVX512VL:       # %bb.0:46; CHECK-AVX512VL-NEXT:    vfmadd213ss %xmm2, %xmm0, %xmm1 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0xa9,0xca]47; CHECK-AVX512VL-NEXT:    # xmm1 = (xmm0 * xmm1) + xmm248; CHECK-AVX512VL-NEXT:    vmovaps %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc1]49; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]50;51; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmadd_bac_ss:52; CHECK-FMA-WIN:       # %bb.0:53; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]54; CHECK-FMA-WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero55; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7a,0x10,0x08]56; CHECK-FMA-WIN-NEXT:    vfmadd132ss (%rcx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0x99,0x01]57; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm0 * mem) + xmm158; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]59  %1 = extractelement <4 x float> %a1, i64 060  %2 = extractelement <4 x float> %a0, i64 061  %3 = extractelement <4 x float> %a2, i64 062  %4 = call float @llvm.fma.f32(float %1, float %2, float %3)63  %5 = insertelement <4 x float> %a1, float %4, i64 064  ret <4 x float> %565}66 67define <4 x float> @test_x86_fma_vfmadd_ss_231(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {68; CHECK-FMA-LABEL: test_x86_fma_vfmadd_ss_231:69; CHECK-FMA:       # %bb.0:70; CHECK-FMA-NEXT:    vfmadd231ss %xmm1, %xmm0, %xmm2 # encoding: [0xc4,0xe2,0x79,0xb9,0xd1]71; CHECK-FMA-NEXT:    # xmm2 = (xmm0 * xmm1) + xmm272; CHECK-FMA-NEXT:    vmovaps %xmm2, %xmm0 # encoding: [0xc5,0xf8,0x28,0xc2]73; CHECK-FMA-NEXT:    retq # encoding: [0xc3]74;75; CHECK-AVX512VL-LABEL: test_x86_fma_vfmadd_ss_231:76; CHECK-AVX512VL:       # %bb.0:77; CHECK-AVX512VL-NEXT:    vfmadd231ss %xmm1, %xmm0, %xmm2 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0xb9,0xd1]78; CHECK-AVX512VL-NEXT:    # xmm2 = (xmm0 * xmm1) + xmm279; CHECK-AVX512VL-NEXT:    vmovaps %xmm2, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc2]80; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]81;82; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmadd_ss_231:83; CHECK-FMA-WIN:       # %bb.0:84; CHECK-FMA-WIN-NEXT:    vmovaps (%r8), %xmm0 # encoding: [0xc4,0xc1,0x78,0x28,0x00]85; CHECK-FMA-WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero86; CHECK-FMA-WIN-NEXT:    # encoding: [0xc5,0xfa,0x10,0x09]87; CHECK-FMA-WIN-NEXT:    vfmadd231ss (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xb9,0x02]88; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * mem) + xmm089; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]90  %1 = extractelement <4 x float> %a0, i64 091  %2 = extractelement <4 x float> %a1, i64 092  %3 = extractelement <4 x float> %a2, i64 093  %4 = call float @llvm.fma.f32(float %1, float %2, float %3)94  %5 = insertelement <4 x float> %a2, float %4, i64 095  ret <4 x float> %596}97 98define <2 x double> @test_x86_fma_vfmadd_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {99; CHECK-FMA-LABEL: test_x86_fma_vfmadd_sd:100; CHECK-FMA:       # %bb.0:101; CHECK-FMA-NEXT:    vfmadd213sd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xa9,0xc2]102; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm2103; CHECK-FMA-NEXT:    retq # encoding: [0xc3]104;105; CHECK-AVX512VL-LABEL: test_x86_fma_vfmadd_sd:106; CHECK-AVX512VL:       # %bb.0:107; CHECK-AVX512VL-NEXT:    vfmadd213sd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xa9,0xc2]108; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm2109; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]110;111; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmadd_sd:112; CHECK-FMA-WIN:       # %bb.0:113; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x01]114; CHECK-FMA-WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero115; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7b,0x10,0x08]116; CHECK-FMA-WIN-NEXT:    vfmadd132sd (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0x99,0x02]117; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm0 * mem) + xmm1118; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]119  %1 = extractelement <2 x double> %a0, i64 0120  %2 = extractelement <2 x double> %a1, i64 0121  %3 = extractelement <2 x double> %a2, i64 0122  %4 = call double @llvm.fma.f64(double %1, double %2, double %3)123  %5 = insertelement <2 x double> %a0, double %4, i64 0124  ret <2 x double> %5125}126 127define <2 x double> @test_x86_fma_vfmadd_bac_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {128; CHECK-FMA-LABEL: test_x86_fma_vfmadd_bac_sd:129; CHECK-FMA:       # %bb.0:130; CHECK-FMA-NEXT:    vfmadd213sd %xmm2, %xmm0, %xmm1 # encoding: [0xc4,0xe2,0xf9,0xa9,0xca]131; CHECK-FMA-NEXT:    # xmm1 = (xmm0 * xmm1) + xmm2132; CHECK-FMA-NEXT:    vmovapd %xmm1, %xmm0 # encoding: [0xc5,0xf9,0x28,0xc1]133; CHECK-FMA-NEXT:    retq # encoding: [0xc3]134;135; CHECK-AVX512VL-LABEL: test_x86_fma_vfmadd_bac_sd:136; CHECK-AVX512VL:       # %bb.0:137; CHECK-AVX512VL-NEXT:    vfmadd213sd %xmm2, %xmm0, %xmm1 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf9,0xa9,0xca]138; CHECK-AVX512VL-NEXT:    # xmm1 = (xmm0 * xmm1) + xmm2139; CHECK-AVX512VL-NEXT:    vmovapd %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc1]140; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]141;142; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmadd_bac_sd:143; CHECK-FMA-WIN:       # %bb.0:144; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]145; CHECK-FMA-WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero146; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7b,0x10,0x08]147; CHECK-FMA-WIN-NEXT:    vfmadd132sd (%rcx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0x99,0x01]148; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm0 * mem) + xmm1149; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]150  %1 = extractelement <2 x double> %a1, i64 0151  %2 = extractelement <2 x double> %a0, i64 0152  %3 = extractelement <2 x double> %a2, i64 0153  %4 = call double @llvm.fma.f64(double %1, double %2, double %3)154  %5 = insertelement <2 x double> %a1, double %4, i64 0155  ret <2 x double> %5156}157 158define <4 x float> @test_x86_fma_vfmadd_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {159; CHECK-FMA-LABEL: test_x86_fma_vfmadd_ps:160; CHECK-FMA:       # %bb.0:161; CHECK-FMA-NEXT:    vfmadd213ps %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xa8,0xc2]162; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm2163; CHECK-FMA-NEXT:    retq # encoding: [0xc3]164;165; CHECK-AVX512VL-LABEL: test_x86_fma_vfmadd_ps:166; CHECK-AVX512VL:       # %bb.0:167; CHECK-AVX512VL-NEXT:    vfmadd213ps %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xa8,0xc2]168; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm2169; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]170;171; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmadd_ps:172; CHECK-FMA-WIN:       # %bb.0:173; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm1 # encoding: [0xc5,0xf8,0x28,0x09]174; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]175; CHECK-FMA-WIN-NEXT:    vfmadd213ps (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0x71,0xa8,0x00]176; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) + mem177; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]178  %1 = call <4 x float> @llvm.fma.v4f32(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)179  ret <4 x float> %1180}181 182define <2 x double> @test_x86_fma_vfmadd_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {183; CHECK-FMA-LABEL: test_x86_fma_vfmadd_pd:184; CHECK-FMA:       # %bb.0:185; CHECK-FMA-NEXT:    vfmadd213pd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xa8,0xc2]186; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm2187; CHECK-FMA-NEXT:    retq # encoding: [0xc3]188;189; CHECK-AVX512VL-LABEL: test_x86_fma_vfmadd_pd:190; CHECK-AVX512VL:       # %bb.0:191; CHECK-AVX512VL-NEXT:    vfmadd213pd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xa8,0xc2]192; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm2193; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]194;195; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmadd_pd:196; CHECK-FMA-WIN:       # %bb.0:197; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm1 # encoding: [0xc5,0xf9,0x28,0x09]198; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]199; CHECK-FMA-WIN-NEXT:    vfmadd213pd (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0xf1,0xa8,0x00]200; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) + mem201; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]202  %1 = call <2 x double> @llvm.fma.v2f64(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)203  ret <2 x double> %1204}205 206define <8 x float> @test_x86_fma_vfmadd_ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) #0 {207; CHECK-FMA-LABEL: test_x86_fma_vfmadd_ps_256:208; CHECK-FMA:       # %bb.0:209; CHECK-FMA-NEXT:    vfmadd213ps %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0x75,0xa8,0xc2]210; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) + ymm2211; CHECK-FMA-NEXT:    retq # encoding: [0xc3]212;213; CHECK-AVX512VL-LABEL: test_x86_fma_vfmadd_ps_256:214; CHECK-AVX512VL:       # %bb.0:215; CHECK-AVX512VL-NEXT:    vfmadd213ps %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x75,0xa8,0xc2]216; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) + ymm2217; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]218;219; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmadd_ps_256:220; CHECK-FMA-WIN:       # %bb.0:221; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %ymm1 # encoding: [0xc5,0xfc,0x28,0x09]222; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %ymm0 # encoding: [0xc5,0xfc,0x28,0x02]223; CHECK-FMA-WIN-NEXT:    vfmadd213ps (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0x75,0xa8,0x00]224; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) + mem225; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]226  %1 = call <8 x float> @llvm.fma.v8f32(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2)227  ret <8 x float> %1228}229 230define <4 x double> @test_x86_fma_vfmadd_pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) #0 {231; CHECK-FMA-LABEL: test_x86_fma_vfmadd_pd_256:232; CHECK-FMA:       # %bb.0:233; CHECK-FMA-NEXT:    vfmadd213pd %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0xf5,0xa8,0xc2]234; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) + ymm2235; CHECK-FMA-NEXT:    retq # encoding: [0xc3]236;237; CHECK-AVX512VL-LABEL: test_x86_fma_vfmadd_pd_256:238; CHECK-AVX512VL:       # %bb.0:239; CHECK-AVX512VL-NEXT:    vfmadd213pd %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf5,0xa8,0xc2]240; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) + ymm2241; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]242;243; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmadd_pd_256:244; CHECK-FMA-WIN:       # %bb.0:245; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %ymm1 # encoding: [0xc5,0xfd,0x28,0x09]246; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %ymm0 # encoding: [0xc5,0xfd,0x28,0x02]247; CHECK-FMA-WIN-NEXT:    vfmadd213pd (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0xf5,0xa8,0x00]248; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) + mem249; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]250  %1 = call <4 x double> @llvm.fma.v4f64(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2)251  ret <4 x double> %1252}253 254; VFMSUB255define <4 x float> @test_x86_fma_vfmsub_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {256; CHECK-FMA-LABEL: test_x86_fma_vfmsub_ss:257; CHECK-FMA:       # %bb.0:258; CHECK-FMA-NEXT:    vfmsub213ss %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xab,0xc2]259; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2260; CHECK-FMA-NEXT:    retq # encoding: [0xc3]261;262; CHECK-AVX512VL-LABEL: test_x86_fma_vfmsub_ss:263; CHECK-AVX512VL:       # %bb.0:264; CHECK-AVX512VL-NEXT:    vfmsub213ss %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xab,0xc2]265; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2266; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]267;268; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmsub_ss:269; CHECK-FMA-WIN:       # %bb.0:270; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x01]271; CHECK-FMA-WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero272; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7a,0x10,0x08]273; CHECK-FMA-WIN-NEXT:    vfmsub132ss (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0x9b,0x02]274; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm0 * mem) - xmm1275; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]276  %1 = extractelement <4 x float> %a0, i64 0277  %2 = extractelement <4 x float> %a1, i64 0278  %3 = extractelement <4 x float> %a2, i64 0279  %4 = fsub float -0.000000e+00, %3280  %5 = call float @llvm.fma.f32(float %1, float %2, float %4)281  %6 = insertelement <4 x float> %a0, float %5, i64 0282  ret <4 x float> %6283}284 285define <4 x float> @test_x86_fma_vfmsub_bac_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {286; CHECK-FMA-LABEL: test_x86_fma_vfmsub_bac_ss:287; CHECK-FMA:       # %bb.0:288; CHECK-FMA-NEXT:    vfmsub213ss %xmm2, %xmm0, %xmm1 # encoding: [0xc4,0xe2,0x79,0xab,0xca]289; CHECK-FMA-NEXT:    # xmm1 = (xmm0 * xmm1) - xmm2290; CHECK-FMA-NEXT:    vmovaps %xmm1, %xmm0 # encoding: [0xc5,0xf8,0x28,0xc1]291; CHECK-FMA-NEXT:    retq # encoding: [0xc3]292;293; CHECK-AVX512VL-LABEL: test_x86_fma_vfmsub_bac_ss:294; CHECK-AVX512VL:       # %bb.0:295; CHECK-AVX512VL-NEXT:    vfmsub213ss %xmm2, %xmm0, %xmm1 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0xab,0xca]296; CHECK-AVX512VL-NEXT:    # xmm1 = (xmm0 * xmm1) - xmm2297; CHECK-AVX512VL-NEXT:    vmovaps %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc1]298; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]299;300; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmsub_bac_ss:301; CHECK-FMA-WIN:       # %bb.0:302; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]303; CHECK-FMA-WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero304; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7a,0x10,0x08]305; CHECK-FMA-WIN-NEXT:    vfmsub132ss (%rcx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0x9b,0x01]306; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm0 * mem) - xmm1307; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]308  %1 = extractelement <4 x float> %a1, i64 0309  %2 = extractelement <4 x float> %a0, i64 0310  %3 = extractelement <4 x float> %a2, i64 0311  %4 = fsub float -0.000000e+00, %3312  %5 = call float @llvm.fma.f32(float %1, float %2, float %4)313  %6 = insertelement <4 x float> %a1, float %5, i64 0314  ret <4 x float> %6315}316 317define <2 x double> @test_x86_fma_vfmsub_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {318; CHECK-FMA-LABEL: test_x86_fma_vfmsub_sd:319; CHECK-FMA:       # %bb.0:320; CHECK-FMA-NEXT:    vfmsub213sd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xab,0xc2]321; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2322; CHECK-FMA-NEXT:    retq # encoding: [0xc3]323;324; CHECK-AVX512VL-LABEL: test_x86_fma_vfmsub_sd:325; CHECK-AVX512VL:       # %bb.0:326; CHECK-AVX512VL-NEXT:    vfmsub213sd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xab,0xc2]327; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2328; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]329;330; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmsub_sd:331; CHECK-FMA-WIN:       # %bb.0:332; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x01]333; CHECK-FMA-WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero334; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7b,0x10,0x08]335; CHECK-FMA-WIN-NEXT:    vfmsub132sd (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0x9b,0x02]336; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm0 * mem) - xmm1337; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]338  %1 = extractelement <2 x double> %a0, i64 0339  %2 = extractelement <2 x double> %a1, i64 0340  %3 = extractelement <2 x double> %a2, i64 0341  %4 = fsub double -0.000000e+00, %3342  %5 = call double @llvm.fma.f64(double %1, double %2, double %4)343  %6 = insertelement <2 x double> %a0, double %5, i64 0344  ret <2 x double> %6345}346 347define <2 x double> @test_x86_fma_vfmsub_bac_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {348; CHECK-FMA-LABEL: test_x86_fma_vfmsub_bac_sd:349; CHECK-FMA:       # %bb.0:350; CHECK-FMA-NEXT:    vfmsub213sd %xmm2, %xmm0, %xmm1 # encoding: [0xc4,0xe2,0xf9,0xab,0xca]351; CHECK-FMA-NEXT:    # xmm1 = (xmm0 * xmm1) - xmm2352; CHECK-FMA-NEXT:    vmovapd %xmm1, %xmm0 # encoding: [0xc5,0xf9,0x28,0xc1]353; CHECK-FMA-NEXT:    retq # encoding: [0xc3]354;355; CHECK-AVX512VL-LABEL: test_x86_fma_vfmsub_bac_sd:356; CHECK-AVX512VL:       # %bb.0:357; CHECK-AVX512VL-NEXT:    vfmsub213sd %xmm2, %xmm0, %xmm1 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf9,0xab,0xca]358; CHECK-AVX512VL-NEXT:    # xmm1 = (xmm0 * xmm1) - xmm2359; CHECK-AVX512VL-NEXT:    vmovapd %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc1]360; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]361;362; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmsub_bac_sd:363; CHECK-FMA-WIN:       # %bb.0:364; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]365; CHECK-FMA-WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero366; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7b,0x10,0x08]367; CHECK-FMA-WIN-NEXT:    vfmsub132sd (%rcx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0x9b,0x01]368; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm0 * mem) - xmm1369; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]370  %1 = extractelement <2 x double> %a1, i64 0371  %2 = extractelement <2 x double> %a0, i64 0372  %3 = extractelement <2 x double> %a2, i64 0373  %4 = fsub double -0.000000e+00, %3374  %5 = call double @llvm.fma.f64(double %1, double %2, double %4)375  %6 = insertelement <2 x double> %a1, double %5, i64 0376  ret <2 x double> %6377}378 379define <4 x float> @test_x86_fma_vfmsub_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {380; CHECK-FMA-LABEL: test_x86_fma_vfmsub_ps:381; CHECK-FMA:       # %bb.0:382; CHECK-FMA-NEXT:    vfmsub213ps %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xaa,0xc2]383; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2384; CHECK-FMA-NEXT:    retq # encoding: [0xc3]385;386; CHECK-AVX512VL-LABEL: test_x86_fma_vfmsub_ps:387; CHECK-AVX512VL:       # %bb.0:388; CHECK-AVX512VL-NEXT:    vfmsub213ps %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xaa,0xc2]389; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2390; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]391;392; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmsub_ps:393; CHECK-FMA-WIN:       # %bb.0:394; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm1 # encoding: [0xc5,0xf8,0x28,0x09]395; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]396; CHECK-FMA-WIN-NEXT:    vfmsub213ps (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0x71,0xaa,0x00]397; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) - mem398; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]399  %1 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a2400  %2 = call <4 x float> @llvm.fma.v4f32(<4 x float> %a0, <4 x float> %a1, <4 x float> %1)401  ret <4 x float> %2402}403 404define <2 x double> @test_x86_fma_vfmsub_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {405; CHECK-FMA-LABEL: test_x86_fma_vfmsub_pd:406; CHECK-FMA:       # %bb.0:407; CHECK-FMA-NEXT:    vfmsub213pd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xaa,0xc2]408; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2409; CHECK-FMA-NEXT:    retq # encoding: [0xc3]410;411; CHECK-AVX512VL-LABEL: test_x86_fma_vfmsub_pd:412; CHECK-AVX512VL:       # %bb.0:413; CHECK-AVX512VL-NEXT:    vfmsub213pd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xaa,0xc2]414; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2415; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]416;417; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmsub_pd:418; CHECK-FMA-WIN:       # %bb.0:419; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm1 # encoding: [0xc5,0xf9,0x28,0x09]420; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]421; CHECK-FMA-WIN-NEXT:    vfmsub213pd (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0xf1,0xaa,0x00]422; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) - mem423; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]424  %1 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %a2425  %2 = call <2 x double> @llvm.fma.v2f64(<2 x double> %a0, <2 x double> %a1, <2 x double> %1)426  ret <2 x double> %2427}428 429define <8 x float> @test_x86_fma_vfmsub_ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) #0 {430; CHECK-FMA-LABEL: test_x86_fma_vfmsub_ps_256:431; CHECK-FMA:       # %bb.0:432; CHECK-FMA-NEXT:    vfmsub213ps %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0x75,0xaa,0xc2]433; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) - ymm2434; CHECK-FMA-NEXT:    retq # encoding: [0xc3]435;436; CHECK-AVX512VL-LABEL: test_x86_fma_vfmsub_ps_256:437; CHECK-AVX512VL:       # %bb.0:438; CHECK-AVX512VL-NEXT:    vfmsub213ps %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x75,0xaa,0xc2]439; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) - ymm2440; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]441;442; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmsub_ps_256:443; CHECK-FMA-WIN:       # %bb.0:444; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %ymm1 # encoding: [0xc5,0xfc,0x28,0x09]445; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %ymm0 # encoding: [0xc5,0xfc,0x28,0x02]446; CHECK-FMA-WIN-NEXT:    vfmsub213ps (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0x75,0xaa,0x00]447; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) - mem448; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]449  %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>, %a2450  %2 = call <8 x float> @llvm.fma.v8f32(<8 x float> %a0, <8 x float> %a1, <8 x float> %1)451  ret <8 x float> %2452}453 454define <4 x double> @test_x86_fma_vfmsub_pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) #0 {455; CHECK-FMA-LABEL: test_x86_fma_vfmsub_pd_256:456; CHECK-FMA:       # %bb.0:457; CHECK-FMA-NEXT:    vfmsub213pd %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0xf5,0xaa,0xc2]458; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) - ymm2459; CHECK-FMA-NEXT:    retq # encoding: [0xc3]460;461; CHECK-AVX512VL-LABEL: test_x86_fma_vfmsub_pd_256:462; CHECK-AVX512VL:       # %bb.0:463; CHECK-AVX512VL-NEXT:    vfmsub213pd %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf5,0xaa,0xc2]464; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) - ymm2465; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]466;467; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmsub_pd_256:468; CHECK-FMA-WIN:       # %bb.0:469; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %ymm1 # encoding: [0xc5,0xfd,0x28,0x09]470; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %ymm0 # encoding: [0xc5,0xfd,0x28,0x02]471; CHECK-FMA-WIN-NEXT:    vfmsub213pd (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0xf5,0xaa,0x00]472; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) - mem473; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]474  %1 = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a2475  %2 = call <4 x double> @llvm.fma.v4f64(<4 x double> %a0, <4 x double> %a1, <4 x double> %1)476  ret <4 x double> %2477}478 479; VFNMADD480define <4 x float> @test_x86_fma_vfnmadd_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {481; CHECK-FMA-LABEL: test_x86_fma_vfnmadd_ss:482; CHECK-FMA:       # %bb.0:483; CHECK-FMA-NEXT:    vfnmadd213ss %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xad,0xc2]484; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2485; CHECK-FMA-NEXT:    retq # encoding: [0xc3]486;487; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmadd_ss:488; CHECK-AVX512VL:       # %bb.0:489; CHECK-AVX512VL-NEXT:    vfnmadd213ss %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xad,0xc2]490; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2491; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]492;493; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmadd_ss:494; CHECK-FMA-WIN:       # %bb.0:495; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x01]496; CHECK-FMA-WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero497; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7a,0x10,0x08]498; CHECK-FMA-WIN-NEXT:    vfnmadd132ss (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0x9d,0x02]499; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm0 * mem) + xmm1500; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]501  %1 = extractelement <4 x float> %a0, i64 0502  %2 = extractelement <4 x float> %a1, i64 0503  %3 = extractelement <4 x float> %a2, i64 0504  %4 = fsub float -0.000000e+00, %2505  %5 = call float @llvm.fma.f32(float %1, float %4, float %3)506  %6 = insertelement <4 x float> %a0, float %5, i64 0507  ret <4 x float> %6508}509 510define <4 x float> @test_x86_fma_vfnmadd_bac_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {511; CHECK-FMA-LABEL: test_x86_fma_vfnmadd_bac_ss:512; CHECK-FMA:       # %bb.0:513; CHECK-FMA-NEXT:    vfnmadd213ss %xmm2, %xmm0, %xmm1 # encoding: [0xc4,0xe2,0x79,0xad,0xca]514; CHECK-FMA-NEXT:    # xmm1 = -(xmm0 * xmm1) + xmm2515; CHECK-FMA-NEXT:    vmovaps %xmm1, %xmm0 # encoding: [0xc5,0xf8,0x28,0xc1]516; CHECK-FMA-NEXT:    retq # encoding: [0xc3]517;518; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmadd_bac_ss:519; CHECK-AVX512VL:       # %bb.0:520; CHECK-AVX512VL-NEXT:    vfnmadd213ss %xmm2, %xmm0, %xmm1 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0xad,0xca]521; CHECK-AVX512VL-NEXT:    # xmm1 = -(xmm0 * xmm1) + xmm2522; CHECK-AVX512VL-NEXT:    vmovaps %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc1]523; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]524;525; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmadd_bac_ss:526; CHECK-FMA-WIN:       # %bb.0:527; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]528; CHECK-FMA-WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero529; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7a,0x10,0x08]530; CHECK-FMA-WIN-NEXT:    vfnmadd132ss (%rcx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0x9d,0x01]531; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm0 * mem) + xmm1532; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]533  %1 = extractelement <4 x float> %a1, i64 0534  %2 = extractelement <4 x float> %a0, i64 0535  %3 = extractelement <4 x float> %a2, i64 0536  %4 = fsub float -0.000000e+00, %2537  %5 = call float @llvm.fma.f32(float %1, float %4, float %3)538  %6 = insertelement <4 x float> %a1, float %5, i64 0539  ret <4 x float> %6540}541 542define <2 x double> @test_x86_fma_vfnmadd_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {543; CHECK-FMA-LABEL: test_x86_fma_vfnmadd_sd:544; CHECK-FMA:       # %bb.0:545; CHECK-FMA-NEXT:    vfnmadd213sd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xad,0xc2]546; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2547; CHECK-FMA-NEXT:    retq # encoding: [0xc3]548;549; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmadd_sd:550; CHECK-AVX512VL:       # %bb.0:551; CHECK-AVX512VL-NEXT:    vfnmadd213sd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xad,0xc2]552; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2553; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]554;555; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmadd_sd:556; CHECK-FMA-WIN:       # %bb.0:557; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x01]558; CHECK-FMA-WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero559; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7b,0x10,0x08]560; CHECK-FMA-WIN-NEXT:    vfnmadd132sd (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0x9d,0x02]561; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm0 * mem) + xmm1562; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]563  %1 = extractelement <2 x double> %a0, i64 0564  %2 = extractelement <2 x double> %a1, i64 0565  %3 = extractelement <2 x double> %a2, i64 0566  %4 = fsub double -0.000000e+00, %2567  %5 = call double @llvm.fma.f64(double %1, double %4, double %3)568  %6 = insertelement <2 x double> %a0, double %5, i64 0569  ret <2 x double> %6570}571 572define <2 x double> @test_x86_fma_vfnmadd_bac_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {573; CHECK-FMA-LABEL: test_x86_fma_vfnmadd_bac_sd:574; CHECK-FMA:       # %bb.0:575; CHECK-FMA-NEXT:    vfnmadd213sd %xmm2, %xmm0, %xmm1 # encoding: [0xc4,0xe2,0xf9,0xad,0xca]576; CHECK-FMA-NEXT:    # xmm1 = -(xmm0 * xmm1) + xmm2577; CHECK-FMA-NEXT:    vmovapd %xmm1, %xmm0 # encoding: [0xc5,0xf9,0x28,0xc1]578; CHECK-FMA-NEXT:    retq # encoding: [0xc3]579;580; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmadd_bac_sd:581; CHECK-AVX512VL:       # %bb.0:582; CHECK-AVX512VL-NEXT:    vfnmadd213sd %xmm2, %xmm0, %xmm1 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf9,0xad,0xca]583; CHECK-AVX512VL-NEXT:    # xmm1 = -(xmm0 * xmm1) + xmm2584; CHECK-AVX512VL-NEXT:    vmovapd %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc1]585; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]586;587; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmadd_bac_sd:588; CHECK-FMA-WIN:       # %bb.0:589; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]590; CHECK-FMA-WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero591; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7b,0x10,0x08]592; CHECK-FMA-WIN-NEXT:    vfnmadd132sd (%rcx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0x9d,0x01]593; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm0 * mem) + xmm1594; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]595  %1 = extractelement <2 x double> %a1, i64 0596  %2 = extractelement <2 x double> %a0, i64 0597  %3 = extractelement <2 x double> %a2, i64 0598  %4 = fsub double -0.000000e+00, %2599  %5 = call double @llvm.fma.f64(double %1, double %4, double %3)600  %6 = insertelement <2 x double> %a1, double %5, i64 0601  ret <2 x double> %6602}603 604define <4 x float> @test_x86_fma_vfnmadd_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {605; CHECK-FMA-LABEL: test_x86_fma_vfnmadd_ps:606; CHECK-FMA:       # %bb.0:607; CHECK-FMA-NEXT:    vfnmadd213ps %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xac,0xc2]608; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2609; CHECK-FMA-NEXT:    retq # encoding: [0xc3]610;611; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmadd_ps:612; CHECK-AVX512VL:       # %bb.0:613; CHECK-AVX512VL-NEXT:    vfnmadd213ps %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xac,0xc2]614; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2615; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]616;617; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmadd_ps:618; CHECK-FMA-WIN:       # %bb.0:619; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm1 # encoding: [0xc5,0xf8,0x28,0x09]620; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]621; CHECK-FMA-WIN-NEXT:    vfnmadd213ps (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0x71,0xac,0x00]622; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm1 * xmm0) + mem623; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]624  %1 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a0625  %2 = call <4 x float> @llvm.fma.v4f32(<4 x float> %1, <4 x float> %a1, <4 x float> %a2)626  ret <4 x float> %2627}628 629define <2 x double> @test_x86_fma_vfnmadd_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {630; CHECK-FMA-LABEL: test_x86_fma_vfnmadd_pd:631; CHECK-FMA:       # %bb.0:632; CHECK-FMA-NEXT:    vfnmadd213pd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xac,0xc2]633; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2634; CHECK-FMA-NEXT:    retq # encoding: [0xc3]635;636; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmadd_pd:637; CHECK-AVX512VL:       # %bb.0:638; CHECK-AVX512VL-NEXT:    vfnmadd213pd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xac,0xc2]639; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2640; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]641;642; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmadd_pd:643; CHECK-FMA-WIN:       # %bb.0:644; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm1 # encoding: [0xc5,0xf9,0x28,0x09]645; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]646; CHECK-FMA-WIN-NEXT:    vfnmadd213pd (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0xf1,0xac,0x00]647; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm1 * xmm0) + mem648; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]649  %1 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %a0650  %2 = call <2 x double> @llvm.fma.v2f64(<2 x double> %1, <2 x double> %a1, <2 x double> %a2)651  ret <2 x double> %2652}653 654define <8 x float> @test_x86_fma_vfnmadd_ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) #0 {655; CHECK-FMA-LABEL: test_x86_fma_vfnmadd_ps_256:656; CHECK-FMA:       # %bb.0:657; CHECK-FMA-NEXT:    vfnmadd213ps %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0x75,0xac,0xc2]658; CHECK-FMA-NEXT:    # ymm0 = -(ymm1 * ymm0) + ymm2659; CHECK-FMA-NEXT:    retq # encoding: [0xc3]660;661; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmadd_ps_256:662; CHECK-AVX512VL:       # %bb.0:663; CHECK-AVX512VL-NEXT:    vfnmadd213ps %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x75,0xac,0xc2]664; CHECK-AVX512VL-NEXT:    # ymm0 = -(ymm1 * ymm0) + ymm2665; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]666;667; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmadd_ps_256:668; CHECK-FMA-WIN:       # %bb.0:669; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %ymm1 # encoding: [0xc5,0xfc,0x28,0x09]670; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %ymm0 # encoding: [0xc5,0xfc,0x28,0x02]671; CHECK-FMA-WIN-NEXT:    vfnmadd213ps (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0x75,0xac,0x00]672; CHECK-FMA-WIN-NEXT:    # ymm0 = -(ymm1 * ymm0) + mem673; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]674  %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>, %a0675  %2 = call <8 x float> @llvm.fma.v8f32(<8 x float> %1, <8 x float> %a1, <8 x float> %a2)676  ret <8 x float> %2677}678 679define <4 x double> @test_x86_fma_vfnmadd_pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) #0 {680; CHECK-FMA-LABEL: test_x86_fma_vfnmadd_pd_256:681; CHECK-FMA:       # %bb.0:682; CHECK-FMA-NEXT:    vfnmadd213pd %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0xf5,0xac,0xc2]683; CHECK-FMA-NEXT:    # ymm0 = -(ymm1 * ymm0) + ymm2684; CHECK-FMA-NEXT:    retq # encoding: [0xc3]685;686; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmadd_pd_256:687; CHECK-AVX512VL:       # %bb.0:688; CHECK-AVX512VL-NEXT:    vfnmadd213pd %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf5,0xac,0xc2]689; CHECK-AVX512VL-NEXT:    # ymm0 = -(ymm1 * ymm0) + ymm2690; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]691;692; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmadd_pd_256:693; CHECK-FMA-WIN:       # %bb.0:694; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %ymm1 # encoding: [0xc5,0xfd,0x28,0x09]695; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %ymm0 # encoding: [0xc5,0xfd,0x28,0x02]696; CHECK-FMA-WIN-NEXT:    vfnmadd213pd (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0xf5,0xac,0x00]697; CHECK-FMA-WIN-NEXT:    # ymm0 = -(ymm1 * ymm0) + mem698; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]699  %1 = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a0700  %2 = call <4 x double> @llvm.fma.v4f64(<4 x double> %1, <4 x double> %a1, <4 x double> %a2)701  ret <4 x double> %2702}703 704; VFNMSUB705define <4 x float> @test_x86_fma_vfnmsub_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {706; CHECK-FMA-LABEL: test_x86_fma_vfnmsub_ss:707; CHECK-FMA:       # %bb.0:708; CHECK-FMA-NEXT:    vfnmsub213ss %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xaf,0xc2]709; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2710; CHECK-FMA-NEXT:    retq # encoding: [0xc3]711;712; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmsub_ss:713; CHECK-AVX512VL:       # %bb.0:714; CHECK-AVX512VL-NEXT:    vfnmsub213ss %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xaf,0xc2]715; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2716; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]717;718; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmsub_ss:719; CHECK-FMA-WIN:       # %bb.0:720; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x01]721; CHECK-FMA-WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero722; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7a,0x10,0x08]723; CHECK-FMA-WIN-NEXT:    vfnmsub132ss (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0x9f,0x02]724; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm0 * mem) - xmm1725; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]726  %1 = extractelement <4 x float> %a0, i64 0727  %2 = extractelement <4 x float> %a1, i64 0728  %3 = extractelement <4 x float> %a2, i64 0729  %4 = fsub float -0.000000e+00, %2730  %5 = fsub float -0.000000e+00, %3731  %6 = call float @llvm.fma.f32(float %1, float %4, float %5)732  %7 = insertelement <4 x float> %a0, float %6, i64 0733  ret <4 x float> %7734}735 736define <4 x float> @test_x86_fma_vfnmsub_bac_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {737; CHECK-FMA-LABEL: test_x86_fma_vfnmsub_bac_ss:738; CHECK-FMA:       # %bb.0:739; CHECK-FMA-NEXT:    vfnmsub213ss %xmm2, %xmm0, %xmm1 # encoding: [0xc4,0xe2,0x79,0xaf,0xca]740; CHECK-FMA-NEXT:    # xmm1 = -(xmm0 * xmm1) - xmm2741; CHECK-FMA-NEXT:    vmovaps %xmm1, %xmm0 # encoding: [0xc5,0xf8,0x28,0xc1]742; CHECK-FMA-NEXT:    retq # encoding: [0xc3]743;744; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmsub_bac_ss:745; CHECK-AVX512VL:       # %bb.0:746; CHECK-AVX512VL-NEXT:    vfnmsub213ss %xmm2, %xmm0, %xmm1 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x79,0xaf,0xca]747; CHECK-AVX512VL-NEXT:    # xmm1 = -(xmm0 * xmm1) - xmm2748; CHECK-AVX512VL-NEXT:    vmovaps %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf8,0x28,0xc1]749; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]750;751; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmsub_bac_ss:752; CHECK-FMA-WIN:       # %bb.0:753; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]754; CHECK-FMA-WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero755; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7a,0x10,0x08]756; CHECK-FMA-WIN-NEXT:    vfnmsub132ss (%rcx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0x9f,0x01]757; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm0 * mem) - xmm1758; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]759  %1 = extractelement <4 x float> %a1, i64 0760  %2 = extractelement <4 x float> %a0, i64 0761  %3 = extractelement <4 x float> %a2, i64 0762  %4 = fsub float -0.000000e+00, %2763  %5 = fsub float -0.000000e+00, %3764  %6 = call float @llvm.fma.f32(float %1, float %4, float %5)765  %7 = insertelement <4 x float> %a1, float %6, i64 0766  ret <4 x float> %7767}768 769define <2 x double> @test_x86_fma_vfnmsub_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {770; CHECK-FMA-LABEL: test_x86_fma_vfnmsub_sd:771; CHECK-FMA:       # %bb.0:772; CHECK-FMA-NEXT:    vfnmsub213sd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xaf,0xc2]773; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2774; CHECK-FMA-NEXT:    retq # encoding: [0xc3]775;776; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmsub_sd:777; CHECK-AVX512VL:       # %bb.0:778; CHECK-AVX512VL-NEXT:    vfnmsub213sd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xaf,0xc2]779; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2780; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]781;782; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmsub_sd:783; CHECK-FMA-WIN:       # %bb.0:784; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x01]785; CHECK-FMA-WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero786; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7b,0x10,0x08]787; CHECK-FMA-WIN-NEXT:    vfnmsub132sd (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0x9f,0x02]788; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm0 * mem) - xmm1789; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]790  %1 = extractelement <2 x double> %a0, i64 0791  %2 = extractelement <2 x double> %a1, i64 0792  %3 = extractelement <2 x double> %a2, i64 0793  %4 = fsub double -0.000000e+00, %2794  %5 = fsub double -0.000000e+00, %3795  %6 = call double @llvm.fma.f64(double %1, double %4, double %5)796  %7 = insertelement <2 x double> %a0, double %6, i64 0797  ret <2 x double> %7798}799 800define <2 x double> @test_x86_fma_vfnmsub_bac_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {801; CHECK-FMA-LABEL: test_x86_fma_vfnmsub_bac_sd:802; CHECK-FMA:       # %bb.0:803; CHECK-FMA-NEXT:    vfnmsub213sd %xmm2, %xmm0, %xmm1 # encoding: [0xc4,0xe2,0xf9,0xaf,0xca]804; CHECK-FMA-NEXT:    # xmm1 = -(xmm0 * xmm1) - xmm2805; CHECK-FMA-NEXT:    vmovapd %xmm1, %xmm0 # encoding: [0xc5,0xf9,0x28,0xc1]806; CHECK-FMA-NEXT:    retq # encoding: [0xc3]807;808; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmsub_bac_sd:809; CHECK-AVX512VL:       # %bb.0:810; CHECK-AVX512VL-NEXT:    vfnmsub213sd %xmm2, %xmm0, %xmm1 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf9,0xaf,0xca]811; CHECK-AVX512VL-NEXT:    # xmm1 = -(xmm0 * xmm1) - xmm2812; CHECK-AVX512VL-NEXT:    vmovapd %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc5,0xf9,0x28,0xc1]813; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]814;815; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmsub_bac_sd:816; CHECK-FMA-WIN:       # %bb.0:817; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]818; CHECK-FMA-WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero819; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7b,0x10,0x08]820; CHECK-FMA-WIN-NEXT:    vfnmsub132sd (%rcx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0x9f,0x01]821; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm0 * mem) - xmm1822; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]823  %1 = extractelement <2 x double> %a1, i64 0824  %2 = extractelement <2 x double> %a0, i64 0825  %3 = extractelement <2 x double> %a2, i64 0826  %4 = fsub double -0.000000e+00, %2827  %5 = fsub double -0.000000e+00, %3828  %6 = call double @llvm.fma.f64(double %1, double %4, double %5)829  %7 = insertelement <2 x double> %a1, double %6, i64 0830  ret <2 x double> %7831}832 833define <4 x float> @test_x86_fma_vfnmsub_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {834; CHECK-FMA-LABEL: test_x86_fma_vfnmsub_ps:835; CHECK-FMA:       # %bb.0:836; CHECK-FMA-NEXT:    vfnmsub213ps %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xae,0xc2]837; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2838; CHECK-FMA-NEXT:    retq # encoding: [0xc3]839;840; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmsub_ps:841; CHECK-AVX512VL:       # %bb.0:842; CHECK-AVX512VL-NEXT:    vfnmsub213ps %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xae,0xc2]843; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2844; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]845;846; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmsub_ps:847; CHECK-FMA-WIN:       # %bb.0:848; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm1 # encoding: [0xc5,0xf8,0x28,0x09]849; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]850; CHECK-FMA-WIN-NEXT:    vfnmsub213ps (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0x71,0xae,0x00]851; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm1 * xmm0) - mem852; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]853  %1 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a0854  %2 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a2855  %3 = call <4 x float> @llvm.fma.v4f32(<4 x float> %1, <4 x float> %a1, <4 x float> %2)856  ret <4 x float> %3857}858 859define <2 x double> @test_x86_fma_vfnmsub_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {860; CHECK-FMA-LABEL: test_x86_fma_vfnmsub_pd:861; CHECK-FMA:       # %bb.0:862; CHECK-FMA-NEXT:    vfnmsub213pd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xae,0xc2]863; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2864; CHECK-FMA-NEXT:    retq # encoding: [0xc3]865;866; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmsub_pd:867; CHECK-AVX512VL:       # %bb.0:868; CHECK-AVX512VL-NEXT:    vfnmsub213pd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xae,0xc2]869; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2870; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]871;872; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmsub_pd:873; CHECK-FMA-WIN:       # %bb.0:874; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm1 # encoding: [0xc5,0xf9,0x28,0x09]875; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]876; CHECK-FMA-WIN-NEXT:    vfnmsub213pd (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0xf1,0xae,0x00]877; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm1 * xmm0) - mem878; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]879  %1 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %a0880  %2 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %a2881  %3 = call <2 x double> @llvm.fma.v2f64(<2 x double> %1, <2 x double> %a1, <2 x double> %2)882  ret <2 x double> %3883}884 885define <8 x float> @test_x86_fma_vfnmsub_ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) #0 {886; CHECK-FMA-LABEL: test_x86_fma_vfnmsub_ps_256:887; CHECK-FMA:       # %bb.0:888; CHECK-FMA-NEXT:    vfnmsub213ps %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0x75,0xae,0xc2]889; CHECK-FMA-NEXT:    # ymm0 = -(ymm1 * ymm0) - ymm2890; CHECK-FMA-NEXT:    retq # encoding: [0xc3]891;892; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmsub_ps_256:893; CHECK-AVX512VL:       # %bb.0:894; CHECK-AVX512VL-NEXT:    vfnmsub213ps %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x75,0xae,0xc2]895; CHECK-AVX512VL-NEXT:    # ymm0 = -(ymm1 * ymm0) - ymm2896; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]897;898; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmsub_ps_256:899; CHECK-FMA-WIN:       # %bb.0:900; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %ymm1 # encoding: [0xc5,0xfc,0x28,0x09]901; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %ymm0 # encoding: [0xc5,0xfc,0x28,0x02]902; CHECK-FMA-WIN-NEXT:    vfnmsub213ps (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0x75,0xae,0x00]903; CHECK-FMA-WIN-NEXT:    # ymm0 = -(ymm1 * ymm0) - mem904; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]905  %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>, %a0906  %2 = 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>, %a2907  %3 = call <8 x float> @llvm.fma.v8f32(<8 x float> %1, <8 x float> %a1, <8 x float> %2)908  ret <8 x float> %3909}910 911define <4 x double> @test_x86_fma_vfnmsub_pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) #0 {912; CHECK-FMA-LABEL: test_x86_fma_vfnmsub_pd_256:913; CHECK-FMA:       # %bb.0:914; CHECK-FMA-NEXT:    vfnmsub213pd %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0xf5,0xae,0xc2]915; CHECK-FMA-NEXT:    # ymm0 = -(ymm1 * ymm0) - ymm2916; CHECK-FMA-NEXT:    retq # encoding: [0xc3]917;918; CHECK-AVX512VL-LABEL: test_x86_fma_vfnmsub_pd_256:919; CHECK-AVX512VL:       # %bb.0:920; CHECK-AVX512VL-NEXT:    vfnmsub213pd %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf5,0xae,0xc2]921; CHECK-AVX512VL-NEXT:    # ymm0 = -(ymm1 * ymm0) - ymm2922; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]923;924; CHECK-FMA-WIN-LABEL: test_x86_fma_vfnmsub_pd_256:925; CHECK-FMA-WIN:       # %bb.0:926; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %ymm1 # encoding: [0xc5,0xfd,0x28,0x09]927; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %ymm0 # encoding: [0xc5,0xfd,0x28,0x02]928; CHECK-FMA-WIN-NEXT:    vfnmsub213pd (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0xf5,0xae,0x00]929; CHECK-FMA-WIN-NEXT:    # ymm0 = -(ymm1 * ymm0) - mem930; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]931  %1 = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a0932  %2 = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a2933  %3 = call <4 x double> @llvm.fma.v4f64(<4 x double> %1, <4 x double> %a1, <4 x double> %2)934  ret <4 x double> %3935}936 937; VFMADDSUB938define <4 x float> @test_x86_fma_vfmaddsub_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {939; CHECK-FMA-LABEL: test_x86_fma_vfmaddsub_ps:940; CHECK-FMA:       # %bb.0:941; CHECK-FMA-NEXT:    vfmaddsub213ps %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xa6,0xc2]942; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) +/- xmm2943; CHECK-FMA-NEXT:    retq # encoding: [0xc3]944;945; CHECK-AVX512VL-LABEL: test_x86_fma_vfmaddsub_ps:946; CHECK-AVX512VL:       # %bb.0:947; CHECK-AVX512VL-NEXT:    vfmaddsub213ps %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xa6,0xc2]948; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) +/- xmm2949; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]950;951; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmaddsub_ps:952; CHECK-FMA-WIN:       # %bb.0:953; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm1 # encoding: [0xc5,0xf8,0x28,0x09]954; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]955; CHECK-FMA-WIN-NEXT:    vfmaddsub213ps (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0x71,0xa6,0x00]956; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) +/- mem957; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]958  %1 = call <4 x float> @llvm.fma.v4f32(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)959  %2 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a2960  %3 = call <4 x float> @llvm.fma.v4f32(<4 x float> %a0, <4 x float> %a1, <4 x float> %2)961  %4 = shufflevector <4 x float> %3, <4 x float> %1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>962  ret <4 x float> %4963}964 965define <2 x double> @test_x86_fma_vfmaddsub_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {966; CHECK-FMA-LABEL: test_x86_fma_vfmaddsub_pd:967; CHECK-FMA:       # %bb.0:968; CHECK-FMA-NEXT:    vfmaddsub213pd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xa6,0xc2]969; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) +/- xmm2970; CHECK-FMA-NEXT:    retq # encoding: [0xc3]971;972; CHECK-AVX512VL-LABEL: test_x86_fma_vfmaddsub_pd:973; CHECK-AVX512VL:       # %bb.0:974; CHECK-AVX512VL-NEXT:    vfmaddsub213pd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xa6,0xc2]975; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) +/- xmm2976; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]977;978; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmaddsub_pd:979; CHECK-FMA-WIN:       # %bb.0:980; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm1 # encoding: [0xc5,0xf9,0x28,0x09]981; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]982; CHECK-FMA-WIN-NEXT:    vfmaddsub213pd (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0xf1,0xa6,0x00]983; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) +/- mem984; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]985  %1 = call <2 x double> @llvm.fma.v2f64(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)986  %2 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %a2987  %3 = call <2 x double> @llvm.fma.v2f64(<2 x double> %a0, <2 x double> %a1, <2 x double> %2)988  %4 = shufflevector <2 x double> %3, <2 x double> %1, <2 x i32> <i32 0, i32 3>989  ret <2 x double> %4990}991 992define <8 x float> @test_x86_fma_vfmaddsub_ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) #0 {993; CHECK-FMA-LABEL: test_x86_fma_vfmaddsub_ps_256:994; CHECK-FMA:       # %bb.0:995; CHECK-FMA-NEXT:    vfmaddsub213ps %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0x75,0xa6,0xc2]996; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) +/- ymm2997; CHECK-FMA-NEXT:    retq # encoding: [0xc3]998;999; CHECK-AVX512VL-LABEL: test_x86_fma_vfmaddsub_ps_256:1000; CHECK-AVX512VL:       # %bb.0:1001; CHECK-AVX512VL-NEXT:    vfmaddsub213ps %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x75,0xa6,0xc2]1002; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) +/- ymm21003; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]1004;1005; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmaddsub_ps_256:1006; CHECK-FMA-WIN:       # %bb.0:1007; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %ymm1 # encoding: [0xc5,0xfc,0x28,0x09]1008; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %ymm0 # encoding: [0xc5,0xfc,0x28,0x02]1009; CHECK-FMA-WIN-NEXT:    vfmaddsub213ps (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0x75,0xa6,0x00]1010; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) +/- mem1011; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]1012  %1 = call <8 x float> @llvm.fma.v8f32(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2)1013  %2 = 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>, %a21014  %3 = call <8 x float> @llvm.fma.v8f32(<8 x float> %a0, <8 x float> %a1, <8 x float> %2)1015  %4 = shufflevector <8 x float> %3, <8 x float> %1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1016  ret <8 x float> %41017}1018 1019define <4 x double> @test_x86_fma_vfmaddsub_pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) #0 {1020; CHECK-FMA-LABEL: test_x86_fma_vfmaddsub_pd_256:1021; CHECK-FMA:       # %bb.0:1022; CHECK-FMA-NEXT:    vfmaddsub213pd %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0xf5,0xa6,0xc2]1023; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) +/- ymm21024; CHECK-FMA-NEXT:    retq # encoding: [0xc3]1025;1026; CHECK-AVX512VL-LABEL: test_x86_fma_vfmaddsub_pd_256:1027; CHECK-AVX512VL:       # %bb.0:1028; CHECK-AVX512VL-NEXT:    vfmaddsub213pd %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf5,0xa6,0xc2]1029; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) +/- ymm21030; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]1031;1032; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmaddsub_pd_256:1033; CHECK-FMA-WIN:       # %bb.0:1034; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %ymm1 # encoding: [0xc5,0xfd,0x28,0x09]1035; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %ymm0 # encoding: [0xc5,0xfd,0x28,0x02]1036; CHECK-FMA-WIN-NEXT:    vfmaddsub213pd (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0xf5,0xa6,0x00]1037; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) +/- mem1038; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]1039  %1 = call <4 x double> @llvm.fma.v4f64(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2)1040  %2 = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a21041  %3 = call <4 x double> @llvm.fma.v4f64(<4 x double> %a0, <4 x double> %a1, <4 x double> %2)1042  %4 = shufflevector <4 x double> %3, <4 x double> %1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>1043  ret <4 x double> %41044}1045 1046; VFMSUBADD1047define <4 x float> @test_x86_fma_vfmsubadd_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {1048; CHECK-FMA-LABEL: test_x86_fma_vfmsubadd_ps:1049; CHECK-FMA:       # %bb.0:1050; CHECK-FMA-NEXT:    vfmsubadd213ps %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xa7,0xc2]1051; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) -/+ xmm21052; CHECK-FMA-NEXT:    retq # encoding: [0xc3]1053;1054; CHECK-AVX512VL-LABEL: test_x86_fma_vfmsubadd_ps:1055; CHECK-AVX512VL:       # %bb.0:1056; CHECK-AVX512VL-NEXT:    vfmsubadd213ps %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xa7,0xc2]1057; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) -/+ xmm21058; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]1059;1060; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmsubadd_ps:1061; CHECK-FMA-WIN:       # %bb.0:1062; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm1 # encoding: [0xc5,0xf8,0x28,0x09]1063; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]1064; CHECK-FMA-WIN-NEXT:    vfmsubadd213ps (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0x71,0xa7,0x00]1065; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) -/+ mem1066; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]1067  %1 = call <4 x float> @llvm.fma.v4f32(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)1068  %2 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a21069  %3 = call <4 x float> @llvm.fma.v4f32(<4 x float> %a0, <4 x float> %a1, <4 x float> %2)1070  %4 = shufflevector <4 x float> %1, <4 x float> %3, <4 x i32> <i32 0, i32 5, i32 2, i32 7>1071  ret <4 x float> %41072}1073 1074define <2 x double> @test_x86_fma_vfmsubadd_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {1075; CHECK-FMA-LABEL: test_x86_fma_vfmsubadd_pd:1076; CHECK-FMA:       # %bb.0:1077; CHECK-FMA-NEXT:    vfmsubadd213pd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xa7,0xc2]1078; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) -/+ xmm21079; CHECK-FMA-NEXT:    retq # encoding: [0xc3]1080;1081; CHECK-AVX512VL-LABEL: test_x86_fma_vfmsubadd_pd:1082; CHECK-AVX512VL:       # %bb.0:1083; CHECK-AVX512VL-NEXT:    vfmsubadd213pd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xa7,0xc2]1084; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) -/+ xmm21085; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]1086;1087; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmsubadd_pd:1088; CHECK-FMA-WIN:       # %bb.0:1089; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm1 # encoding: [0xc5,0xf9,0x28,0x09]1090; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]1091; CHECK-FMA-WIN-NEXT:    vfmsubadd213pd (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0xf1,0xa7,0x00]1092; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) -/+ mem1093; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]1094  %1 = call <2 x double> @llvm.fma.v2f64(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)1095  %2 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %a21096  %3 = call <2 x double> @llvm.fma.v2f64(<2 x double> %a0, <2 x double> %a1, <2 x double> %2)1097  %4 = shufflevector <2 x double> %1, <2 x double> %3, <2 x i32> <i32 0, i32 3>1098  ret <2 x double> %41099}1100 1101define <8 x float> @test_x86_fma_vfmsubadd_ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) #0 {1102; CHECK-FMA-LABEL: test_x86_fma_vfmsubadd_ps_256:1103; CHECK-FMA:       # %bb.0:1104; CHECK-FMA-NEXT:    vfmsubadd213ps %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0x75,0xa7,0xc2]1105; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) -/+ ymm21106; CHECK-FMA-NEXT:    retq # encoding: [0xc3]1107;1108; CHECK-AVX512VL-LABEL: test_x86_fma_vfmsubadd_ps_256:1109; CHECK-AVX512VL:       # %bb.0:1110; CHECK-AVX512VL-NEXT:    vfmsubadd213ps %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x75,0xa7,0xc2]1111; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) -/+ ymm21112; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]1113;1114; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmsubadd_ps_256:1115; CHECK-FMA-WIN:       # %bb.0:1116; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %ymm1 # encoding: [0xc5,0xfc,0x28,0x09]1117; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %ymm0 # encoding: [0xc5,0xfc,0x28,0x02]1118; CHECK-FMA-WIN-NEXT:    vfmsubadd213ps (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0x75,0xa7,0x00]1119; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) -/+ mem1120; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]1121  %1 = call <8 x float> @llvm.fma.v8f32(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2)1122  %2 = 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>, %a21123  %3 = call <8 x float> @llvm.fma.v8f32(<8 x float> %a0, <8 x float> %a1, <8 x float> %2)1124  %4 = shufflevector <8 x float> %1, <8 x float> %3, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>1125  ret <8 x float> %41126}1127 1128define <4 x double> @test_x86_fma_vfmsubadd_pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) #0 {1129; CHECK-FMA-LABEL: test_x86_fma_vfmsubadd_pd_256:1130; CHECK-FMA:       # %bb.0:1131; CHECK-FMA-NEXT:    vfmsubadd213pd %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0xf5,0xa7,0xc2]1132; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) -/+ ymm21133; CHECK-FMA-NEXT:    retq # encoding: [0xc3]1134;1135; CHECK-AVX512VL-LABEL: test_x86_fma_vfmsubadd_pd_256:1136; CHECK-AVX512VL:       # %bb.0:1137; CHECK-AVX512VL-NEXT:    vfmsubadd213pd %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf5,0xa7,0xc2]1138; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) -/+ ymm21139; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]1140;1141; CHECK-FMA-WIN-LABEL: test_x86_fma_vfmsubadd_pd_256:1142; CHECK-FMA-WIN:       # %bb.0:1143; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %ymm1 # encoding: [0xc5,0xfd,0x28,0x09]1144; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %ymm0 # encoding: [0xc5,0xfd,0x28,0x02]1145; CHECK-FMA-WIN-NEXT:    vfmsubadd213pd (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0xf5,0xa7,0x00]1146; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) -/+ mem1147; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]1148  %1 = call <4 x double> @llvm.fma.v4f64(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2)1149  %2 = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a21150  %3 = call <4 x double> @llvm.fma.v4f64(<4 x double> %a0, <4 x double> %a1, <4 x double> %2)1151  %4 = shufflevector <4 x double> %1, <4 x double> %3, <4 x i32> <i32 0, i32 5, i32 2, i32 7>1152  ret <4 x double> %41153}1154 1155declare float @llvm.fma.f32(float, float, float)1156declare double @llvm.fma.f64(double, double, double)1157declare <4 x float> @llvm.fma.v4f32(<4 x float>, <4 x float>, <4 x float>)1158declare <2 x double> @llvm.fma.v2f64(<2 x double>, <2 x double>, <2 x double>)1159declare <8 x float> @llvm.fma.v8f32(<8 x float>, <8 x float>, <8 x float>)1160declare <4 x double> @llvm.fma.v4f64(<4 x double>, <4 x double>, <4 x double>)1161 1162attributes #0 = { nounwind }1163