brintos

brintos / llvm-project-archived public Read only

0
0
Text · 46.8 KiB · e420215 Raw
902 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; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/fma-builtins.c7 8define <4 x float> @test_mm_fmadd_ps(<4 x float> %a, <4 x float> %b, <4 x float> %c) {9; CHECK-FMA-LABEL: test_mm_fmadd_ps:10; CHECK-FMA:       # %bb.0: # %entry11; CHECK-FMA-NEXT:    vfmadd213ps %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xa8,0xc2]12; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm213; CHECK-FMA-NEXT:    retq # encoding: [0xc3]14;15; CHECK-AVX512VL-LABEL: test_mm_fmadd_ps:16; CHECK-AVX512VL:       # %bb.0: # %entry17; CHECK-AVX512VL-NEXT:    vfmadd213ps %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xa8,0xc2]18; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm219; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]20;21; CHECK-FMA-WIN-LABEL: test_mm_fmadd_ps:22; CHECK-FMA-WIN:       # %bb.0: # %entry23; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm1 # encoding: [0xc5,0xf8,0x28,0x09]24; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]25; CHECK-FMA-WIN-NEXT:    vfmadd213ps (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0x71,0xa8,0x00]26; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) + mem27; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]28entry:29  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c) #230  ret <4 x float> %031}32 33define <2 x double> @test_mm_fmadd_pd(<2 x double> %a, <2 x double> %b, <2 x double> %c) {34; CHECK-FMA-LABEL: test_mm_fmadd_pd:35; CHECK-FMA:       # %bb.0: # %entry36; CHECK-FMA-NEXT:    vfmadd213pd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xa8,0xc2]37; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm238; CHECK-FMA-NEXT:    retq # encoding: [0xc3]39;40; CHECK-AVX512VL-LABEL: test_mm_fmadd_pd:41; CHECK-AVX512VL:       # %bb.0: # %entry42; CHECK-AVX512VL-NEXT:    vfmadd213pd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xa8,0xc2]43; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm244; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]45;46; CHECK-FMA-WIN-LABEL: test_mm_fmadd_pd:47; CHECK-FMA-WIN:       # %bb.0: # %entry48; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm1 # encoding: [0xc5,0xf9,0x28,0x09]49; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]50; CHECK-FMA-WIN-NEXT:    vfmadd213pd (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0xf1,0xa8,0x00]51; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) + mem52; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]53entry:54  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c) #255  ret <2 x double> %056}57 58define <4 x float> @test_mm_fmadd_ss(<4 x float> %a, <4 x float> %b, <4 x float> %c) {59; CHECK-FMA-LABEL: test_mm_fmadd_ss:60; CHECK-FMA:       # %bb.0: # %entry61; CHECK-FMA-NEXT:    vfmadd213ss %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xa9,0xc2]62; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm263; CHECK-FMA-NEXT:    retq # encoding: [0xc3]64;65; CHECK-AVX512VL-LABEL: test_mm_fmadd_ss:66; CHECK-AVX512VL:       # %bb.0: # %entry67; CHECK-AVX512VL-NEXT:    vfmadd213ss %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xa9,0xc2]68; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm269; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]70;71; CHECK-FMA-WIN-LABEL: test_mm_fmadd_ss:72; CHECK-FMA-WIN:       # %bb.0: # %entry73; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x01]74; CHECK-FMA-WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero75; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7a,0x10,0x08]76; CHECK-FMA-WIN-NEXT:    vfmadd132ss (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0x99,0x02]77; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm0 * mem) + xmm178; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]79entry:80  %0 = extractelement <4 x float> %a, i64 081  %1 = extractelement <4 x float> %b, i64 082  %2 = extractelement <4 x float> %c, i64 083  %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #284  %4 = insertelement <4 x float> %a, float %3, i64 085  ret <4 x float> %486}87 88define <2 x double> @test_mm_fmadd_sd(<2 x double> %a, <2 x double> %b, <2 x double> %c) {89; CHECK-FMA-LABEL: test_mm_fmadd_sd:90; CHECK-FMA:       # %bb.0: # %entry91; CHECK-FMA-NEXT:    vfmadd213sd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xa9,0xc2]92; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm293; CHECK-FMA-NEXT:    retq # encoding: [0xc3]94;95; CHECK-AVX512VL-LABEL: test_mm_fmadd_sd:96; CHECK-AVX512VL:       # %bb.0: # %entry97; CHECK-AVX512VL-NEXT:    vfmadd213sd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xa9,0xc2]98; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) + xmm299; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]100;101; CHECK-FMA-WIN-LABEL: test_mm_fmadd_sd:102; CHECK-FMA-WIN:       # %bb.0: # %entry103; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x01]104; CHECK-FMA-WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero105; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7b,0x10,0x08]106; CHECK-FMA-WIN-NEXT:    vfmadd132sd (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0x99,0x02]107; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm0 * mem) + xmm1108; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]109entry:110  %0 = extractelement <2 x double> %a, i64 0111  %1 = extractelement <2 x double> %b, i64 0112  %2 = extractelement <2 x double> %c, i64 0113  %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #2114  %4 = insertelement <2 x double> %a, double %3, i64 0115  ret <2 x double> %4116}117 118define <4 x float> @test_mm_fmsub_ps(<4 x float> %a, <4 x float> %b, <4 x float> %c) {119; CHECK-FMA-LABEL: test_mm_fmsub_ps:120; CHECK-FMA:       # %bb.0: # %entry121; CHECK-FMA-NEXT:    vfmsub213ps %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xaa,0xc2]122; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2123; CHECK-FMA-NEXT:    retq # encoding: [0xc3]124;125; CHECK-AVX512VL-LABEL: test_mm_fmsub_ps:126; CHECK-AVX512VL:       # %bb.0: # %entry127; CHECK-AVX512VL-NEXT:    vfmsub213ps %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xaa,0xc2]128; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2129; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]130;131; CHECK-FMA-WIN-LABEL: test_mm_fmsub_ps:132; CHECK-FMA-WIN:       # %bb.0: # %entry133; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm1 # encoding: [0xc5,0xf8,0x28,0x09]134; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]135; CHECK-FMA-WIN-NEXT:    vfmsub213ps (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0x71,0xaa,0x00]136; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) - mem137; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]138entry:139  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %c140  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %sub.i) #2141  ret <4 x float> %0142}143 144define <2 x double> @test_mm_fmsub_pd(<2 x double> %a, <2 x double> %b, <2 x double> %c) {145; CHECK-FMA-LABEL: test_mm_fmsub_pd:146; CHECK-FMA:       # %bb.0: # %entry147; CHECK-FMA-NEXT:    vfmsub213pd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xaa,0xc2]148; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2149; CHECK-FMA-NEXT:    retq # encoding: [0xc3]150;151; CHECK-AVX512VL-LABEL: test_mm_fmsub_pd:152; CHECK-AVX512VL:       # %bb.0: # %entry153; CHECK-AVX512VL-NEXT:    vfmsub213pd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xaa,0xc2]154; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2155; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]156;157; CHECK-FMA-WIN-LABEL: test_mm_fmsub_pd:158; CHECK-FMA-WIN:       # %bb.0: # %entry159; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm1 # encoding: [0xc5,0xf9,0x28,0x09]160; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]161; CHECK-FMA-WIN-NEXT:    vfmsub213pd (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0xf1,0xaa,0x00]162; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) - mem163; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]164entry:165  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %c166  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %sub.i) #2167  ret <2 x double> %0168}169 170define <4 x float> @test_mm_fmsub_ss(<4 x float> %a, <4 x float> %b, <4 x float> %c) {171; CHECK-FMA-LABEL: test_mm_fmsub_ss:172; CHECK-FMA:       # %bb.0: # %entry173; CHECK-FMA-NEXT:    vfmsub213ss %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xab,0xc2]174; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2175; CHECK-FMA-NEXT:    retq # encoding: [0xc3]176;177; CHECK-AVX512VL-LABEL: test_mm_fmsub_ss:178; CHECK-AVX512VL:       # %bb.0: # %entry179; CHECK-AVX512VL-NEXT:    vfmsub213ss %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xab,0xc2]180; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2181; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]182;183; CHECK-FMA-WIN-LABEL: test_mm_fmsub_ss:184; CHECK-FMA-WIN:       # %bb.0: # %entry185; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x01]186; CHECK-FMA-WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero187; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7a,0x10,0x08]188; CHECK-FMA-WIN-NEXT:    vfmsub132ss (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0x9b,0x02]189; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm0 * mem) - xmm1190; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]191entry:192  %0 = extractelement <4 x float> %a, i64 0193  %1 = extractelement <4 x float> %b, i64 0194  %.rhs.i = extractelement <4 x float> %c, i64 0195  %2 = fsub float -0.000000e+00, %.rhs.i196  %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #2197  %4 = insertelement <4 x float> %a, float %3, i64 0198  ret <4 x float> %4199}200 201define <2 x double> @test_mm_fmsub_sd(<2 x double> %a, <2 x double> %b, <2 x double> %c) {202; CHECK-FMA-LABEL: test_mm_fmsub_sd:203; CHECK-FMA:       # %bb.0: # %entry204; CHECK-FMA-NEXT:    vfmsub213sd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xab,0xc2]205; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2206; CHECK-FMA-NEXT:    retq # encoding: [0xc3]207;208; CHECK-AVX512VL-LABEL: test_mm_fmsub_sd:209; CHECK-AVX512VL:       # %bb.0: # %entry210; CHECK-AVX512VL-NEXT:    vfmsub213sd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xab,0xc2]211; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) - xmm2212; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]213;214; CHECK-FMA-WIN-LABEL: test_mm_fmsub_sd:215; CHECK-FMA-WIN:       # %bb.0: # %entry216; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x01]217; CHECK-FMA-WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero218; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7b,0x10,0x08]219; CHECK-FMA-WIN-NEXT:    vfmsub132sd (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0x9b,0x02]220; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm0 * mem) - xmm1221; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]222entry:223  %0 = extractelement <2 x double> %a, i64 0224  %1 = extractelement <2 x double> %b, i64 0225  %.rhs.i = extractelement <2 x double> %c, i64 0226  %2 = fsub double -0.000000e+00, %.rhs.i227  %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #2228  %4 = insertelement <2 x double> %a, double %3, i64 0229  ret <2 x double> %4230}231 232define <4 x float> @test_mm_fnmadd_ps(<4 x float> %a, <4 x float> %b, <4 x float> %c) {233; CHECK-FMA-LABEL: test_mm_fnmadd_ps:234; CHECK-FMA:       # %bb.0: # %entry235; CHECK-FMA-NEXT:    vfnmadd213ps %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xac,0xc2]236; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2237; CHECK-FMA-NEXT:    retq # encoding: [0xc3]238;239; CHECK-AVX512VL-LABEL: test_mm_fnmadd_ps:240; CHECK-AVX512VL:       # %bb.0: # %entry241; CHECK-AVX512VL-NEXT:    vfnmadd213ps %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xac,0xc2]242; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2243; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]244;245; CHECK-FMA-WIN-LABEL: test_mm_fnmadd_ps:246; CHECK-FMA-WIN:       # %bb.0: # %entry247; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm1 # encoding: [0xc5,0xf8,0x28,0x09]248; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]249; CHECK-FMA-WIN-NEXT:    vfnmadd213ps (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0x71,0xac,0x00]250; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm1 * xmm0) + mem251; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]252entry:253  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a254  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %sub.i, <4 x float> %b, <4 x float> %c) #2255  ret <4 x float> %0256}257 258define <2 x double> @test_mm_fnmadd_pd(<2 x double> %a, <2 x double> %b, <2 x double> %c) {259; CHECK-FMA-LABEL: test_mm_fnmadd_pd:260; CHECK-FMA:       # %bb.0: # %entry261; CHECK-FMA-NEXT:    vfnmadd213pd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xac,0xc2]262; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2263; CHECK-FMA-NEXT:    retq # encoding: [0xc3]264;265; CHECK-AVX512VL-LABEL: test_mm_fnmadd_pd:266; CHECK-AVX512VL:       # %bb.0: # %entry267; CHECK-AVX512VL-NEXT:    vfnmadd213pd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xac,0xc2]268; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2269; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]270;271; CHECK-FMA-WIN-LABEL: test_mm_fnmadd_pd:272; CHECK-FMA-WIN:       # %bb.0: # %entry273; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm1 # encoding: [0xc5,0xf9,0x28,0x09]274; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]275; CHECK-FMA-WIN-NEXT:    vfnmadd213pd (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0xf1,0xac,0x00]276; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm1 * xmm0) + mem277; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]278entry:279  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %a280  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %sub.i, <2 x double> %b, <2 x double> %c) #2281  ret <2 x double> %0282}283 284define <4 x float> @test_mm_fnmadd_ss(<4 x float> %a, <4 x float> %b, <4 x float> %c) {285; CHECK-FMA-LABEL: test_mm_fnmadd_ss:286; CHECK-FMA:       # %bb.0: # %entry287; CHECK-FMA-NEXT:    vfnmadd213ss %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xad,0xc2]288; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2289; CHECK-FMA-NEXT:    retq # encoding: [0xc3]290;291; CHECK-AVX512VL-LABEL: test_mm_fnmadd_ss:292; CHECK-AVX512VL:       # %bb.0: # %entry293; CHECK-AVX512VL-NEXT:    vfnmadd213ss %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xad,0xc2]294; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2295; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]296;297; CHECK-FMA-WIN-LABEL: test_mm_fnmadd_ss:298; CHECK-FMA-WIN:       # %bb.0: # %entry299; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x01]300; CHECK-FMA-WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero301; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7a,0x10,0x08]302; CHECK-FMA-WIN-NEXT:    vfnmadd132ss (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0x9d,0x02]303; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm0 * mem) + xmm1304; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]305entry:306  %0 = extractelement <4 x float> %a, i64 0307  %.rhs.i = extractelement <4 x float> %b, i64 0308  %1 = fsub float -0.000000e+00, %.rhs.i309  %2 = extractelement <4 x float> %c, i64 0310  %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #2311  %4 = insertelement <4 x float> %a, float %3, i64 0312  ret <4 x float> %4313}314 315define <2 x double> @test_mm_fnmadd_sd(<2 x double> %a, <2 x double> %b, <2 x double> %c) {316; CHECK-FMA-LABEL: test_mm_fnmadd_sd:317; CHECK-FMA:       # %bb.0: # %entry318; CHECK-FMA-NEXT:    vfnmadd213sd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xad,0xc2]319; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2320; CHECK-FMA-NEXT:    retq # encoding: [0xc3]321;322; CHECK-AVX512VL-LABEL: test_mm_fnmadd_sd:323; CHECK-AVX512VL:       # %bb.0: # %entry324; CHECK-AVX512VL-NEXT:    vfnmadd213sd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xad,0xc2]325; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) + xmm2326; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]327;328; CHECK-FMA-WIN-LABEL: test_mm_fnmadd_sd:329; CHECK-FMA-WIN:       # %bb.0: # %entry330; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x01]331; CHECK-FMA-WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero332; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7b,0x10,0x08]333; CHECK-FMA-WIN-NEXT:    vfnmadd132sd (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0x9d,0x02]334; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm0 * mem) + xmm1335; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]336entry:337  %0 = extractelement <2 x double> %a, i64 0338  %.rhs.i = extractelement <2 x double> %b, i64 0339  %1 = fsub double -0.000000e+00, %.rhs.i340  %2 = extractelement <2 x double> %c, i64 0341  %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #2342  %4 = insertelement <2 x double> %a, double %3, i64 0343  ret <2 x double> %4344}345 346define <4 x float> @test_mm_fnmsub_ps(<4 x float> %a, <4 x float> %b, <4 x float> %c) {347; CHECK-FMA-LABEL: test_mm_fnmsub_ps:348; CHECK-FMA:       # %bb.0: # %entry349; CHECK-FMA-NEXT:    vfnmsub213ps %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xae,0xc2]350; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2351; CHECK-FMA-NEXT:    retq # encoding: [0xc3]352;353; CHECK-AVX512VL-LABEL: test_mm_fnmsub_ps:354; CHECK-AVX512VL:       # %bb.0: # %entry355; CHECK-AVX512VL-NEXT:    vfnmsub213ps %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xae,0xc2]356; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2357; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]358;359; CHECK-FMA-WIN-LABEL: test_mm_fnmsub_ps:360; CHECK-FMA-WIN:       # %bb.0: # %entry361; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm1 # encoding: [0xc5,0xf8,0x28,0x09]362; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]363; CHECK-FMA-WIN-NEXT:    vfnmsub213ps (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0x71,0xae,0x00]364; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm1 * xmm0) - mem365; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]366entry:367  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a368  %sub1.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %c369  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %sub.i, <4 x float> %b, <4 x float> %sub1.i) #2370  ret <4 x float> %0371}372 373define <2 x double> @test_mm_fnmsub_pd(<2 x double> %a, <2 x double> %b, <2 x double> %c) {374; CHECK-FMA-LABEL: test_mm_fnmsub_pd:375; CHECK-FMA:       # %bb.0: # %entry376; CHECK-FMA-NEXT:    vfnmsub213pd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xae,0xc2]377; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2378; CHECK-FMA-NEXT:    retq # encoding: [0xc3]379;380; CHECK-AVX512VL-LABEL: test_mm_fnmsub_pd:381; CHECK-AVX512VL:       # %bb.0: # %entry382; CHECK-AVX512VL-NEXT:    vfnmsub213pd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xae,0xc2]383; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2384; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]385;386; CHECK-FMA-WIN-LABEL: test_mm_fnmsub_pd:387; CHECK-FMA-WIN:       # %bb.0: # %entry388; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm1 # encoding: [0xc5,0xf9,0x28,0x09]389; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]390; CHECK-FMA-WIN-NEXT:    vfnmsub213pd (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0xf1,0xae,0x00]391; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm1 * xmm0) - mem392; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]393entry:394  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %a395  %sub1.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %c396  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %sub.i, <2 x double> %b, <2 x double> %sub1.i) #2397  ret <2 x double> %0398}399 400define <4 x float> @test_mm_fnmsub_ss(<4 x float> %a, <4 x float> %b, <4 x float> %c) {401; CHECK-FMA-LABEL: test_mm_fnmsub_ss:402; CHECK-FMA:       # %bb.0: # %entry403; CHECK-FMA-NEXT:    vfnmsub213ss %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xaf,0xc2]404; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2405; CHECK-FMA-NEXT:    retq # encoding: [0xc3]406;407; CHECK-AVX512VL-LABEL: test_mm_fnmsub_ss:408; CHECK-AVX512VL:       # %bb.0: # %entry409; CHECK-AVX512VL-NEXT:    vfnmsub213ss %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xaf,0xc2]410; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2411; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]412;413; CHECK-FMA-WIN-LABEL: test_mm_fnmsub_ss:414; CHECK-FMA-WIN:       # %bb.0: # %entry415; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x01]416; CHECK-FMA-WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero417; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7a,0x10,0x08]418; CHECK-FMA-WIN-NEXT:    vfnmsub132ss (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0x9f,0x02]419; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm0 * mem) - xmm1420; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]421entry:422  %0 = extractelement <4 x float> %a, i64 0423  %.rhs.i = extractelement <4 x float> %b, i64 0424  %1 = fsub float -0.000000e+00, %.rhs.i425  %.rhs2.i = extractelement <4 x float> %c, i64 0426  %2 = fsub float -0.000000e+00, %.rhs2.i427  %3 = tail call float @llvm.fma.f32(float %0, float %1, float %2) #2428  %4 = insertelement <4 x float> %a, float %3, i64 0429  ret <4 x float> %4430}431 432define <2 x double> @test_mm_fnmsub_sd(<2 x double> %a, <2 x double> %b, <2 x double> %c) {433; CHECK-FMA-LABEL: test_mm_fnmsub_sd:434; CHECK-FMA:       # %bb.0: # %entry435; CHECK-FMA-NEXT:    vfnmsub213sd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xaf,0xc2]436; CHECK-FMA-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2437; CHECK-FMA-NEXT:    retq # encoding: [0xc3]438;439; CHECK-AVX512VL-LABEL: test_mm_fnmsub_sd:440; CHECK-AVX512VL:       # %bb.0: # %entry441; CHECK-AVX512VL-NEXT:    vfnmsub213sd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xaf,0xc2]442; CHECK-AVX512VL-NEXT:    # xmm0 = -(xmm1 * xmm0) - xmm2443; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]444;445; CHECK-FMA-WIN-LABEL: test_mm_fnmsub_sd:446; CHECK-FMA-WIN:       # %bb.0: # %entry447; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x01]448; CHECK-FMA-WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero449; CHECK-FMA-WIN-NEXT:    # encoding: [0xc4,0xc1,0x7b,0x10,0x08]450; CHECK-FMA-WIN-NEXT:    vfnmsub132sd (%rdx), %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0x9f,0x02]451; CHECK-FMA-WIN-NEXT:    # xmm0 = -(xmm0 * mem) - xmm1452; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]453entry:454  %0 = extractelement <2 x double> %a, i64 0455  %.rhs.i = extractelement <2 x double> %b, i64 0456  %1 = fsub double -0.000000e+00, %.rhs.i457  %.rhs2.i = extractelement <2 x double> %c, i64 0458  %2 = fsub double -0.000000e+00, %.rhs2.i459  %3 = tail call double @llvm.fma.f64(double %0, double %1, double %2) #2460  %4 = insertelement <2 x double> %a, double %3, i64 0461  ret <2 x double> %4462}463 464define <4 x float> @test_mm_fmaddsub_ps(<4 x float> %a, <4 x float> %b, <4 x float> %c) {465; CHECK-FMA-LABEL: test_mm_fmaddsub_ps:466; CHECK-FMA:       # %bb.0: # %entry467; CHECK-FMA-NEXT:    vfmaddsub213ps %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xa6,0xc2]468; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) +/- xmm2469; CHECK-FMA-NEXT:    retq # encoding: [0xc3]470;471; CHECK-AVX512VL-LABEL: test_mm_fmaddsub_ps:472; CHECK-AVX512VL:       # %bb.0: # %entry473; CHECK-AVX512VL-NEXT:    vfmaddsub213ps %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xa6,0xc2]474; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) +/- xmm2475; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]476;477; CHECK-FMA-WIN-LABEL: test_mm_fmaddsub_ps:478; CHECK-FMA-WIN:       # %bb.0: # %entry479; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm1 # encoding: [0xc5,0xf8,0x28,0x09]480; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]481; CHECK-FMA-WIN-NEXT:    vfmaddsub213ps (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0x71,0xa6,0x00]482; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) +/- mem483; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]484entry:485  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c) #2486  %1 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %c487  %2 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %1) #2488  %3 = shufflevector <4 x float> %2, <4 x float> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>489  ret <4 x float> %3490}491 492define <2 x double> @test_mm_fmaddsub_pd(<2 x double> %a, <2 x double> %b, <2 x double> %c) {493; CHECK-FMA-LABEL: test_mm_fmaddsub_pd:494; CHECK-FMA:       # %bb.0: # %entry495; CHECK-FMA-NEXT:    vfmaddsub213pd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xa6,0xc2]496; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) +/- xmm2497; CHECK-FMA-NEXT:    retq # encoding: [0xc3]498;499; CHECK-AVX512VL-LABEL: test_mm_fmaddsub_pd:500; CHECK-AVX512VL:       # %bb.0: # %entry501; CHECK-AVX512VL-NEXT:    vfmaddsub213pd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xa6,0xc2]502; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) +/- xmm2503; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]504;505; CHECK-FMA-WIN-LABEL: test_mm_fmaddsub_pd:506; CHECK-FMA-WIN:       # %bb.0: # %entry507; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm1 # encoding: [0xc5,0xf9,0x28,0x09]508; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]509; CHECK-FMA-WIN-NEXT:    vfmaddsub213pd (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0xf1,0xa6,0x00]510; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) +/- mem511; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]512entry:513  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c) #2514  %1 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %c515  %2 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %1) #2516  %3 = shufflevector <2 x double> %2, <2 x double> %0, <2 x i32> <i32 0, i32 3>517  ret <2 x double> %3518}519 520define <4 x float> @test_mm_fmsubadd_ps(<4 x float> %a, <4 x float> %b, <4 x float> %c) {521; CHECK-FMA-LABEL: test_mm_fmsubadd_ps:522; CHECK-FMA:       # %bb.0: # %entry523; CHECK-FMA-NEXT:    vfmsubadd213ps %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0x71,0xa7,0xc2]524; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) -/+ xmm2525; CHECK-FMA-NEXT:    retq # encoding: [0xc3]526;527; CHECK-AVX512VL-LABEL: test_mm_fmsubadd_ps:528; CHECK-AVX512VL:       # %bb.0: # %entry529; CHECK-AVX512VL-NEXT:    vfmsubadd213ps %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x71,0xa7,0xc2]530; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) -/+ xmm2531; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]532;533; CHECK-FMA-WIN-LABEL: test_mm_fmsubadd_ps:534; CHECK-FMA-WIN:       # %bb.0: # %entry535; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %xmm1 # encoding: [0xc5,0xf8,0x28,0x09]536; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %xmm0 # encoding: [0xc5,0xf8,0x28,0x02]537; CHECK-FMA-WIN-NEXT:    vfmsubadd213ps (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0x71,0xa7,0x00]538; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) -/+ mem539; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]540entry:541  %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %c542  %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %sub.i) #2543  %1 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c) #2544  %2 = shufflevector <4 x float> %1, <4 x float> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>545  ret <4 x float> %2546}547 548define <2 x double> @test_mm_fmsubadd_pd(<2 x double> %a, <2 x double> %b, <2 x double> %c) {549; CHECK-FMA-LABEL: test_mm_fmsubadd_pd:550; CHECK-FMA:       # %bb.0: # %entry551; CHECK-FMA-NEXT:    vfmsubadd213pd %xmm2, %xmm1, %xmm0 # encoding: [0xc4,0xe2,0xf1,0xa7,0xc2]552; CHECK-FMA-NEXT:    # xmm0 = (xmm1 * xmm0) -/+ xmm2553; CHECK-FMA-NEXT:    retq # encoding: [0xc3]554;555; CHECK-AVX512VL-LABEL: test_mm_fmsubadd_pd:556; CHECK-AVX512VL:       # %bb.0: # %entry557; CHECK-AVX512VL-NEXT:    vfmsubadd213pd %xmm2, %xmm1, %xmm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf1,0xa7,0xc2]558; CHECK-AVX512VL-NEXT:    # xmm0 = (xmm1 * xmm0) -/+ xmm2559; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]560;561; CHECK-FMA-WIN-LABEL: test_mm_fmsubadd_pd:562; CHECK-FMA-WIN:       # %bb.0: # %entry563; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %xmm1 # encoding: [0xc5,0xf9,0x28,0x09]564; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %xmm0 # encoding: [0xc5,0xf9,0x28,0x02]565; CHECK-FMA-WIN-NEXT:    vfmsubadd213pd (%r8), %xmm1, %xmm0 # encoding: [0xc4,0xc2,0xf1,0xa7,0x00]566; CHECK-FMA-WIN-NEXT:    # xmm0 = (xmm1 * xmm0) -/+ mem567; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]568entry:569  %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %c570  %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %sub.i) #2571  %1 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c) #2572  %2 = shufflevector <2 x double> %1, <2 x double> %0, <2 x i32> <i32 0, i32 3>573  ret <2 x double> %2574}575 576define <8 x float> @test_mm256_fmadd_ps(<8 x float> %a, <8 x float> %b, <8 x float> %c) {577; CHECK-FMA-LABEL: test_mm256_fmadd_ps:578; CHECK-FMA:       # %bb.0: # %entry579; CHECK-FMA-NEXT:    vfmadd213ps %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0x75,0xa8,0xc2]580; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) + ymm2581; CHECK-FMA-NEXT:    retq # encoding: [0xc3]582;583; CHECK-AVX512VL-LABEL: test_mm256_fmadd_ps:584; CHECK-AVX512VL:       # %bb.0: # %entry585; CHECK-AVX512VL-NEXT:    vfmadd213ps %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x75,0xa8,0xc2]586; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) + ymm2587; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]588;589; CHECK-FMA-WIN-LABEL: test_mm256_fmadd_ps:590; CHECK-FMA-WIN:       # %bb.0: # %entry591; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %ymm1 # encoding: [0xc5,0xfc,0x28,0x09]592; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %ymm0 # encoding: [0xc5,0xfc,0x28,0x02]593; CHECK-FMA-WIN-NEXT:    vfmadd213ps (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0x75,0xa8,0x00]594; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) + mem595; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]596entry:597  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c) #2598  ret <8 x float> %0599}600 601define <4 x double> @test_mm256_fmadd_pd(<4 x double> %a, <4 x double> %b, <4 x double> %c) {602; CHECK-FMA-LABEL: test_mm256_fmadd_pd:603; CHECK-FMA:       # %bb.0: # %entry604; CHECK-FMA-NEXT:    vfmadd213pd %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0xf5,0xa8,0xc2]605; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) + ymm2606; CHECK-FMA-NEXT:    retq # encoding: [0xc3]607;608; CHECK-AVX512VL-LABEL: test_mm256_fmadd_pd:609; CHECK-AVX512VL:       # %bb.0: # %entry610; CHECK-AVX512VL-NEXT:    vfmadd213pd %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf5,0xa8,0xc2]611; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) + ymm2612; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]613;614; CHECK-FMA-WIN-LABEL: test_mm256_fmadd_pd:615; CHECK-FMA-WIN:       # %bb.0: # %entry616; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %ymm1 # encoding: [0xc5,0xfd,0x28,0x09]617; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %ymm0 # encoding: [0xc5,0xfd,0x28,0x02]618; CHECK-FMA-WIN-NEXT:    vfmadd213pd (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0xf5,0xa8,0x00]619; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) + mem620; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]621entry:622  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c) #2623  ret <4 x double> %0624}625 626define <8 x float> @test_mm256_fmsub_ps(<8 x float> %a, <8 x float> %b, <8 x float> %c) {627; CHECK-FMA-LABEL: test_mm256_fmsub_ps:628; CHECK-FMA:       # %bb.0: # %entry629; CHECK-FMA-NEXT:    vfmsub213ps %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0x75,0xaa,0xc2]630; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) - ymm2631; CHECK-FMA-NEXT:    retq # encoding: [0xc3]632;633; CHECK-AVX512VL-LABEL: test_mm256_fmsub_ps:634; CHECK-AVX512VL:       # %bb.0: # %entry635; CHECK-AVX512VL-NEXT:    vfmsub213ps %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x75,0xaa,0xc2]636; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) - ymm2637; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]638;639; CHECK-FMA-WIN-LABEL: test_mm256_fmsub_ps:640; CHECK-FMA-WIN:       # %bb.0: # %entry641; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %ymm1 # encoding: [0xc5,0xfc,0x28,0x09]642; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %ymm0 # encoding: [0xc5,0xfc,0x28,0x02]643; CHECK-FMA-WIN-NEXT:    vfmsub213ps (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0x75,0xaa,0x00]644; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) - mem645; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]646entry:647  %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>, %c648  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %sub.i) #2649  ret <8 x float> %0650}651 652define <4 x double> @test_mm256_fmsub_pd(<4 x double> %a, <4 x double> %b, <4 x double> %c) {653; CHECK-FMA-LABEL: test_mm256_fmsub_pd:654; CHECK-FMA:       # %bb.0: # %entry655; CHECK-FMA-NEXT:    vfmsub213pd %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0xf5,0xaa,0xc2]656; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) - ymm2657; CHECK-FMA-NEXT:    retq # encoding: [0xc3]658;659; CHECK-AVX512VL-LABEL: test_mm256_fmsub_pd:660; CHECK-AVX512VL:       # %bb.0: # %entry661; CHECK-AVX512VL-NEXT:    vfmsub213pd %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf5,0xaa,0xc2]662; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) - ymm2663; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]664;665; CHECK-FMA-WIN-LABEL: test_mm256_fmsub_pd:666; CHECK-FMA-WIN:       # %bb.0: # %entry667; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %ymm1 # encoding: [0xc5,0xfd,0x28,0x09]668; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %ymm0 # encoding: [0xc5,0xfd,0x28,0x02]669; CHECK-FMA-WIN-NEXT:    vfmsub213pd (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0xf5,0xaa,0x00]670; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) - mem671; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]672entry:673  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %c674  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %sub.i) #2675  ret <4 x double> %0676}677 678define <8 x float> @test_mm256_fnmadd_ps(<8 x float> %a, <8 x float> %b, <8 x float> %c) {679; CHECK-FMA-LABEL: test_mm256_fnmadd_ps:680; CHECK-FMA:       # %bb.0: # %entry681; CHECK-FMA-NEXT:    vfnmadd213ps %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0x75,0xac,0xc2]682; CHECK-FMA-NEXT:    # ymm0 = -(ymm1 * ymm0) + ymm2683; CHECK-FMA-NEXT:    retq # encoding: [0xc3]684;685; CHECK-AVX512VL-LABEL: test_mm256_fnmadd_ps:686; CHECK-AVX512VL:       # %bb.0: # %entry687; CHECK-AVX512VL-NEXT:    vfnmadd213ps %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x75,0xac,0xc2]688; CHECK-AVX512VL-NEXT:    # ymm0 = -(ymm1 * ymm0) + ymm2689; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]690;691; CHECK-FMA-WIN-LABEL: test_mm256_fnmadd_ps:692; CHECK-FMA-WIN:       # %bb.0: # %entry693; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %ymm1 # encoding: [0xc5,0xfc,0x28,0x09]694; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %ymm0 # encoding: [0xc5,0xfc,0x28,0x02]695; CHECK-FMA-WIN-NEXT:    vfnmadd213ps (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0x75,0xac,0x00]696; CHECK-FMA-WIN-NEXT:    # ymm0 = -(ymm1 * ymm0) + mem697; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]698entry:699  %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>, %a700  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %sub.i, <8 x float> %b, <8 x float> %c) #2701  ret <8 x float> %0702}703 704define <4 x double> @test_mm256_fnmadd_pd(<4 x double> %a, <4 x double> %b, <4 x double> %c) {705; CHECK-FMA-LABEL: test_mm256_fnmadd_pd:706; CHECK-FMA:       # %bb.0: # %entry707; CHECK-FMA-NEXT:    vfnmadd213pd %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0xf5,0xac,0xc2]708; CHECK-FMA-NEXT:    # ymm0 = -(ymm1 * ymm0) + ymm2709; CHECK-FMA-NEXT:    retq # encoding: [0xc3]710;711; CHECK-AVX512VL-LABEL: test_mm256_fnmadd_pd:712; CHECK-AVX512VL:       # %bb.0: # %entry713; CHECK-AVX512VL-NEXT:    vfnmadd213pd %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf5,0xac,0xc2]714; CHECK-AVX512VL-NEXT:    # ymm0 = -(ymm1 * ymm0) + ymm2715; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]716;717; CHECK-FMA-WIN-LABEL: test_mm256_fnmadd_pd:718; CHECK-FMA-WIN:       # %bb.0: # %entry719; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %ymm1 # encoding: [0xc5,0xfd,0x28,0x09]720; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %ymm0 # encoding: [0xc5,0xfd,0x28,0x02]721; CHECK-FMA-WIN-NEXT:    vfnmadd213pd (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0xf5,0xac,0x00]722; CHECK-FMA-WIN-NEXT:    # ymm0 = -(ymm1 * ymm0) + mem723; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]724entry:725  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a726  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %sub.i, <4 x double> %b, <4 x double> %c) #2727  ret <4 x double> %0728}729 730define <8 x float> @test_mm256_fnmsub_ps(<8 x float> %a, <8 x float> %b, <8 x float> %c) {731; CHECK-FMA-LABEL: test_mm256_fnmsub_ps:732; CHECK-FMA:       # %bb.0: # %entry733; CHECK-FMA-NEXT:    vfnmsub213ps %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0x75,0xae,0xc2]734; CHECK-FMA-NEXT:    # ymm0 = -(ymm1 * ymm0) - ymm2735; CHECK-FMA-NEXT:    retq # encoding: [0xc3]736;737; CHECK-AVX512VL-LABEL: test_mm256_fnmsub_ps:738; CHECK-AVX512VL:       # %bb.0: # %entry739; CHECK-AVX512VL-NEXT:    vfnmsub213ps %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x75,0xae,0xc2]740; CHECK-AVX512VL-NEXT:    # ymm0 = -(ymm1 * ymm0) - ymm2741; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]742;743; CHECK-FMA-WIN-LABEL: test_mm256_fnmsub_ps:744; CHECK-FMA-WIN:       # %bb.0: # %entry745; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %ymm1 # encoding: [0xc5,0xfc,0x28,0x09]746; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %ymm0 # encoding: [0xc5,0xfc,0x28,0x02]747; CHECK-FMA-WIN-NEXT:    vfnmsub213ps (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0x75,0xae,0x00]748; CHECK-FMA-WIN-NEXT:    # ymm0 = -(ymm1 * ymm0) - mem749; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]750entry:751  %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>, %a752  %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>, %c753  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %sub.i, <8 x float> %b, <8 x float> %sub1.i) #2754  ret <8 x float> %0755}756 757define <4 x double> @test_mm256_fnmsub_pd(<4 x double> %a, <4 x double> %b, <4 x double> %c) {758; CHECK-FMA-LABEL: test_mm256_fnmsub_pd:759; CHECK-FMA:       # %bb.0: # %entry760; CHECK-FMA-NEXT:    vfnmsub213pd %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0xf5,0xae,0xc2]761; CHECK-FMA-NEXT:    # ymm0 = -(ymm1 * ymm0) - ymm2762; CHECK-FMA-NEXT:    retq # encoding: [0xc3]763;764; CHECK-AVX512VL-LABEL: test_mm256_fnmsub_pd:765; CHECK-AVX512VL:       # %bb.0: # %entry766; CHECK-AVX512VL-NEXT:    vfnmsub213pd %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf5,0xae,0xc2]767; CHECK-AVX512VL-NEXT:    # ymm0 = -(ymm1 * ymm0) - ymm2768; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]769;770; CHECK-FMA-WIN-LABEL: test_mm256_fnmsub_pd:771; CHECK-FMA-WIN:       # %bb.0: # %entry772; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %ymm1 # encoding: [0xc5,0xfd,0x28,0x09]773; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %ymm0 # encoding: [0xc5,0xfd,0x28,0x02]774; CHECK-FMA-WIN-NEXT:    vfnmsub213pd (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0xf5,0xae,0x00]775; CHECK-FMA-WIN-NEXT:    # ymm0 = -(ymm1 * ymm0) - mem776; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]777entry:778  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %a779  %sub1.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %c780  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %sub.i, <4 x double> %b, <4 x double> %sub1.i) #2781  ret <4 x double> %0782}783 784define <8 x float> @test_mm256_fmaddsub_ps(<8 x float> %a, <8 x float> %b, <8 x float> %c) {785; CHECK-FMA-LABEL: test_mm256_fmaddsub_ps:786; CHECK-FMA:       # %bb.0: # %entry787; CHECK-FMA-NEXT:    vfmaddsub213ps %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0x75,0xa6,0xc2]788; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) +/- ymm2789; CHECK-FMA-NEXT:    retq # encoding: [0xc3]790;791; CHECK-AVX512VL-LABEL: test_mm256_fmaddsub_ps:792; CHECK-AVX512VL:       # %bb.0: # %entry793; CHECK-AVX512VL-NEXT:    vfmaddsub213ps %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x75,0xa6,0xc2]794; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) +/- ymm2795; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]796;797; CHECK-FMA-WIN-LABEL: test_mm256_fmaddsub_ps:798; CHECK-FMA-WIN:       # %bb.0: # %entry799; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %ymm1 # encoding: [0xc5,0xfc,0x28,0x09]800; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %ymm0 # encoding: [0xc5,0xfc,0x28,0x02]801; CHECK-FMA-WIN-NEXT:    vfmaddsub213ps (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0x75,0xa6,0x00]802; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) +/- mem803; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]804entry:805  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c) #2806  %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>, %c807  %2 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %1) #2808  %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>809  ret <8 x float> %3810}811 812define <4 x double> @test_mm256_fmaddsub_pd(<4 x double> %a, <4 x double> %b, <4 x double> %c) {813; CHECK-FMA-LABEL: test_mm256_fmaddsub_pd:814; CHECK-FMA:       # %bb.0: # %entry815; CHECK-FMA-NEXT:    vfmaddsub213pd %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0xf5,0xa6,0xc2]816; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) +/- ymm2817; CHECK-FMA-NEXT:    retq # encoding: [0xc3]818;819; CHECK-AVX512VL-LABEL: test_mm256_fmaddsub_pd:820; CHECK-AVX512VL:       # %bb.0: # %entry821; CHECK-AVX512VL-NEXT:    vfmaddsub213pd %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf5,0xa6,0xc2]822; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) +/- ymm2823; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]824;825; CHECK-FMA-WIN-LABEL: test_mm256_fmaddsub_pd:826; CHECK-FMA-WIN:       # %bb.0: # %entry827; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %ymm1 # encoding: [0xc5,0xfd,0x28,0x09]828; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %ymm0 # encoding: [0xc5,0xfd,0x28,0x02]829; CHECK-FMA-WIN-NEXT:    vfmaddsub213pd (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0xf5,0xa6,0x00]830; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) +/- mem831; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]832entry:833  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c) #2834  %1 = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %c835  %2 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %1) #2836  %3 = shufflevector <4 x double> %2, <4 x double> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>837  ret <4 x double> %3838}839 840define <8 x float> @test_mm256_fmsubadd_ps(<8 x float> %a, <8 x float> %b, <8 x float> %c) {841; CHECK-FMA-LABEL: test_mm256_fmsubadd_ps:842; CHECK-FMA:       # %bb.0: # %entry843; CHECK-FMA-NEXT:    vfmsubadd213ps %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0x75,0xa7,0xc2]844; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) -/+ ymm2845; CHECK-FMA-NEXT:    retq # encoding: [0xc3]846;847; CHECK-AVX512VL-LABEL: test_mm256_fmsubadd_ps:848; CHECK-AVX512VL:       # %bb.0: # %entry849; CHECK-AVX512VL-NEXT:    vfmsubadd213ps %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x75,0xa7,0xc2]850; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) -/+ ymm2851; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]852;853; CHECK-FMA-WIN-LABEL: test_mm256_fmsubadd_ps:854; CHECK-FMA-WIN:       # %bb.0: # %entry855; CHECK-FMA-WIN-NEXT:    vmovaps (%rcx), %ymm1 # encoding: [0xc5,0xfc,0x28,0x09]856; CHECK-FMA-WIN-NEXT:    vmovaps (%rdx), %ymm0 # encoding: [0xc5,0xfc,0x28,0x02]857; CHECK-FMA-WIN-NEXT:    vfmsubadd213ps (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0x75,0xa7,0x00]858; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) -/+ mem859; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]860entry:861  %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>, %c862  %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %sub.i) #2863  %1 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %a, <8 x float> %b, <8 x float> %c) #2864  %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>865  ret <8 x float> %2866}867 868define <4 x double> @test_mm256_fmsubadd_pd(<4 x double> %a, <4 x double> %b, <4 x double> %c) {869; CHECK-FMA-LABEL: test_mm256_fmsubadd_pd:870; CHECK-FMA:       # %bb.0: # %entry871; CHECK-FMA-NEXT:    vfmsubadd213pd %ymm2, %ymm1, %ymm0 # encoding: [0xc4,0xe2,0xf5,0xa7,0xc2]872; CHECK-FMA-NEXT:    # ymm0 = (ymm1 * ymm0) -/+ ymm2873; CHECK-FMA-NEXT:    retq # encoding: [0xc3]874;875; CHECK-AVX512VL-LABEL: test_mm256_fmsubadd_pd:876; CHECK-AVX512VL:       # %bb.0: # %entry877; CHECK-AVX512VL-NEXT:    vfmsubadd213pd %ymm2, %ymm1, %ymm0 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0xf5,0xa7,0xc2]878; CHECK-AVX512VL-NEXT:    # ymm0 = (ymm1 * ymm0) -/+ ymm2879; CHECK-AVX512VL-NEXT:    retq # encoding: [0xc3]880;881; CHECK-FMA-WIN-LABEL: test_mm256_fmsubadd_pd:882; CHECK-FMA-WIN:       # %bb.0: # %entry883; CHECK-FMA-WIN-NEXT:    vmovapd (%rcx), %ymm1 # encoding: [0xc5,0xfd,0x28,0x09]884; CHECK-FMA-WIN-NEXT:    vmovapd (%rdx), %ymm0 # encoding: [0xc5,0xfd,0x28,0x02]885; CHECK-FMA-WIN-NEXT:    vfmsubadd213pd (%r8), %ymm1, %ymm0 # encoding: [0xc4,0xc2,0xf5,0xa7,0x00]886; CHECK-FMA-WIN-NEXT:    # ymm0 = (ymm1 * ymm0) -/+ mem887; CHECK-FMA-WIN-NEXT:    retq # encoding: [0xc3]888entry:889  %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %c890  %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %sub.i) #2891  %1 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c) #2892  %2 = shufflevector <4 x double> %1, <4 x double> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>893  ret <4 x double> %2894}895 896declare <4 x float> @llvm.fma.v4f32(<4 x float>, <4 x float>, <4 x float>) #1897declare <2 x double> @llvm.fma.v2f64(<2 x double>, <2 x double>, <2 x double>) #1898declare float @llvm.fma.f32(float, float, float) #1899declare double @llvm.fma.f64(double, double, double) #1900declare <8 x float> @llvm.fma.v8f32(<8 x float>, <8 x float>, <8 x float>) #1901declare <4 x double> @llvm.fma.v4f64(<4 x double>, <4 x double>, <4 x double>) #1902