[llvm] r313143 - [X86][FMA4] Test FMA4 commutation with repeated ops as well as FMA3

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 13 04:21:38 PDT 2017


Author: rksimon
Date: Wed Sep 13 04:21:38 2017
New Revision: 313143

URL: http://llvm.org/viewvc/llvm-project?rev=313143&view=rev
Log:
[X86][FMA4] Test FMA4 commutation with repeated ops as well as FMA3

Modified:
    llvm/trunk/test/CodeGen/X86/fma-commute-x86.ll

Modified: llvm/trunk/test/CodeGen/X86/fma-commute-x86.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fma-commute-x86.ll?rev=313143&r1=313142&r2=313143&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/fma-commute-x86.ll (original)
+++ llvm/trunk/test/CodeGen/X86/fma-commute-x86.ll Wed Sep 13 04:21:38 2017
@@ -1,194 +1,305 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s -mtriple=x86_64-pc-win32 -mcpu=core-avx2 | FileCheck %s
-; RUN: llc < %s -mtriple=x86_64-pc-win32 -mattr=+fma | FileCheck %s
-; RUN: llc < %s -mcpu=bdver2 -mtriple=x86_64-pc-win32 -mattr=-fma4 | FileCheck %s
+; RUN: llc < %s -mtriple=x86_64-pc-win32 -mcpu=core-avx2 | FileCheck %s --check-prefix=FMA
+; RUN: llc < %s -mtriple=x86_64-pc-win32 -mattr=+fma | FileCheck %s --check-prefix=FMA
+; RUN: llc < %s -mcpu=bdver2 -mtriple=x86_64-pc-win32 -mattr=-fma4 | FileCheck %s --check-prefix=FMA
+; RUN: llc < %s -mcpu=bdver2 -mtriple=x86_64-pc-win32 | FileCheck %s --check-prefix=FMA4
 
 attributes #0 = { nounwind }
 
 declare <4 x float> @llvm.x86.fma.vfmadd.ss(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
 define <4 x float> @test_x86_fmadd_baa_ss(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_baa_ss:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm1
-; CHECK-NEXT:    vmovaps (%rdx), %xmm0
-; CHECK-NEXT:    vfmadd213ss %xmm1, %xmm1, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_baa_ss:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm1
+; FMA-NEXT:    vmovaps (%rdx), %xmm0
+; FMA-NEXT:    vfmadd213ss %xmm1, %xmm1, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_baa_ss:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vmovaps (%rdx), %xmm1
+; FMA4-NEXT:    vfmaddss %xmm0, %xmm0, %xmm1, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfmadd.ss(<4 x float> %b, <4 x float> %a, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fmadd_aba_ss(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_aba_ss:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm0
-; CHECK-NEXT:    vfmadd132ss (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_aba_ss:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm0
+; FMA-NEXT:    vfmadd132ss (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_aba_ss:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vfmaddss %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfmadd.ss(<4 x float> %a, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fmadd_bba_ss(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_bba_ss:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rdx), %xmm0
-; CHECK-NEXT:    vfmadd213ss (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_bba_ss:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rdx), %xmm0
+; FMA-NEXT:    vfmadd213ss (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_bba_ss:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rdx), %xmm0
+; FMA4-NEXT:    vfmaddss (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfmadd.ss(<4 x float> %b, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 declare <4 x float> @llvm.x86.fma.vfmadd.ps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
 define <4 x float> @test_x86_fmadd_baa_ps(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_baa_ps:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm0
-; CHECK-NEXT:    vfmadd132ps (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_baa_ps:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm0
+; FMA-NEXT:    vfmadd132ps (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_baa_ps:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vfmaddps %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfmadd.ps(<4 x float> %b, <4 x float> %a, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fmadd_aba_ps(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_aba_ps:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm0
-; CHECK-NEXT:    vfmadd231ps (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_aba_ps:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm0
+; FMA-NEXT:    vfmadd231ps (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_aba_ps:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vfmaddps %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfmadd.ps(<4 x float> %a, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fmadd_bba_ps(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_bba_ps:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rdx), %xmm0
-; CHECK-NEXT:    vfmadd213ps (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_bba_ps:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rdx), %xmm0
+; FMA-NEXT:    vfmadd213ps (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_bba_ps:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rdx), %xmm0
+; FMA4-NEXT:    vfmaddps (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfmadd.ps(<4 x float> %b, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 declare <8 x float> @llvm.x86.fma.vfmadd.ps.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone
 define <8 x float> @test_x86_fmadd_baa_ps_y(<8 x float> %a, <8 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_baa_ps_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %ymm0
-; CHECK-NEXT:    vfmadd132ps (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_baa_ps_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %ymm0
+; FMA-NEXT:    vfmadd132ps (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_baa_ps_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %ymm0
+; FMA4-NEXT:    vfmaddps %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <8 x float> @llvm.x86.fma.vfmadd.ps.256(<8 x float> %b, <8 x float> %a, <8 x float> %a) nounwind
   ret <8 x float> %res
 }
 
 define <8 x float> @test_x86_fmadd_aba_ps_y(<8 x float> %a, <8 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_aba_ps_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %ymm0
-; CHECK-NEXT:    vfmadd231ps (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_aba_ps_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %ymm0
+; FMA-NEXT:    vfmadd231ps (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_aba_ps_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %ymm0
+; FMA4-NEXT:    vfmaddps %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <8 x float> @llvm.x86.fma.vfmadd.ps.256(<8 x float> %a, <8 x float> %b, <8 x float> %a) nounwind
   ret <8 x float> %res
 }
 
 define <8 x float> @test_x86_fmadd_bba_ps_y(<8 x float> %a, <8 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_bba_ps_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rdx), %ymm0
-; CHECK-NEXT:    vfmadd213ps (%rcx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_bba_ps_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rdx), %ymm0
+; FMA-NEXT:    vfmadd213ps (%rcx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_bba_ps_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rdx), %ymm0
+; FMA4-NEXT:    vfmaddps (%rcx), %ymm0, %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <8 x float> @llvm.x86.fma.vfmadd.ps.256(<8 x float> %b, <8 x float> %b, <8 x float> %a) nounwind
   ret <8 x float> %res
 }
 
 declare <2 x double> @llvm.x86.fma.vfmadd.sd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
 define <2 x double> @test_x86_fmadd_baa_sd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_baa_sd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm1
-; CHECK-NEXT:    vmovapd (%rdx), %xmm0
-; CHECK-NEXT:    vfmadd213sd %xmm1, %xmm1, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_baa_sd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm1
+; FMA-NEXT:    vmovapd (%rdx), %xmm0
+; FMA-NEXT:    vfmadd213sd %xmm1, %xmm1, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_baa_sd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vmovapd (%rdx), %xmm1
+; FMA4-NEXT:    vfmaddsd %xmm0, %xmm0, %xmm1, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfmadd.sd(<2 x double> %b, <2 x double> %a, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fmadd_aba_sd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_aba_sd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm0
-; CHECK-NEXT:    vfmadd132sd (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_aba_sd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm0
+; FMA-NEXT:    vfmadd132sd (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_aba_sd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vfmaddsd %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfmadd.sd(<2 x double> %a, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fmadd_bba_sd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_bba_sd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rdx), %xmm0
-; CHECK-NEXT:    vfmadd213sd (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_bba_sd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rdx), %xmm0
+; FMA-NEXT:    vfmadd213sd (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_bba_sd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rdx), %xmm0
+; FMA4-NEXT:    vfmaddsd (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfmadd.sd(<2 x double> %b, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 declare <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
 define <2 x double> @test_x86_fmadd_baa_pd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_baa_pd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm0
-; CHECK-NEXT:    vfmadd132pd (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_baa_pd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm0
+; FMA-NEXT:    vfmadd132pd (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_baa_pd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vfmaddpd %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double> %b, <2 x double> %a, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fmadd_aba_pd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_aba_pd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm0
-; CHECK-NEXT:    vfmadd231pd (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_aba_pd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm0
+; FMA-NEXT:    vfmadd231pd (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_aba_pd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vfmaddpd %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double> %a, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fmadd_bba_pd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_bba_pd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rdx), %xmm0
-; CHECK-NEXT:    vfmadd213pd (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_bba_pd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rdx), %xmm0
+; FMA-NEXT:    vfmadd213pd (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_bba_pd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rdx), %xmm0
+; FMA4-NEXT:    vfmaddpd (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double> %b, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 declare <4 x double> @llvm.x86.fma.vfmadd.pd.256(<4 x double>, <4 x double>, <4 x double>) nounwind readnone
 define <4 x double> @test_x86_fmadd_baa_pd_y(<4 x double> %a, <4 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_baa_pd_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %ymm0
-; CHECK-NEXT:    vfmadd132pd (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_baa_pd_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %ymm0
+; FMA-NEXT:    vfmadd132pd (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_baa_pd_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %ymm0
+; FMA4-NEXT:    vfmaddpd %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <4 x double> @llvm.x86.fma.vfmadd.pd.256(<4 x double> %b, <4 x double> %a, <4 x double> %a) nounwind
   ret <4 x double> %res
 }
 
 define <4 x double> @test_x86_fmadd_aba_pd_y(<4 x double> %a, <4 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_aba_pd_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %ymm0
-; CHECK-NEXT:    vfmadd231pd (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_aba_pd_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %ymm0
+; FMA-NEXT:    vfmadd231pd (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_aba_pd_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %ymm0
+; FMA4-NEXT:    vfmaddpd %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <4 x double> @llvm.x86.fma.vfmadd.pd.256(<4 x double> %a, <4 x double> %b, <4 x double> %a) nounwind
   ret <4 x double> %res
 }
 
 define <4 x double> @test_x86_fmadd_bba_pd_y(<4 x double> %a, <4 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmadd_bba_pd_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rdx), %ymm0
-; CHECK-NEXT:    vfmadd213pd (%rcx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmadd_bba_pd_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rdx), %ymm0
+; FMA-NEXT:    vfmadd213pd (%rcx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmadd_bba_pd_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rdx), %ymm0
+; FMA4-NEXT:    vfmaddpd (%rcx), %ymm0, %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <4 x double> @llvm.x86.fma.vfmadd.pd.256(<4 x double> %b, <4 x double> %b, <4 x double> %a) nounwind
   ret <4 x double> %res
 }
@@ -196,377 +307,596 @@ define <4 x double> @test_x86_fmadd_bba_
 
 declare <4 x float> @llvm.x86.fma.vfnmadd.ss(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
 define <4 x float> @test_x86_fnmadd_baa_ss(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_baa_ss:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm1
-; CHECK-NEXT:    vmovaps (%rdx), %xmm0
-; CHECK-NEXT:    vfnmadd213ss %xmm1, %xmm1, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_baa_ss:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm1
+; FMA-NEXT:    vmovaps (%rdx), %xmm0
+; FMA-NEXT:    vfnmadd213ss %xmm1, %xmm1, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_baa_ss:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vmovaps (%rdx), %xmm1
+; FMA4-NEXT:    vfnmaddss %xmm0, %xmm0, %xmm1, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfnmadd.ss(<4 x float> %b, <4 x float> %a, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fnmadd_aba_ss(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_aba_ss:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm0
-; CHECK-NEXT:    vfnmadd132ss (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_aba_ss:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm0
+; FMA-NEXT:    vfnmadd132ss (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_aba_ss:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vfnmaddss %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfnmadd.ss(<4 x float> %a, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fnmadd_bba_ss(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_bba_ss:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rdx), %xmm0
-; CHECK-NEXT:    vfnmadd213ss (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_bba_ss:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rdx), %xmm0
+; FMA-NEXT:    vfnmadd213ss (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_bba_ss:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rdx), %xmm0
+; FMA4-NEXT:    vfnmaddss (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfnmadd.ss(<4 x float> %b, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 declare <4 x float> @llvm.x86.fma.vfnmadd.ps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
 define <4 x float> @test_x86_fnmadd_baa_ps(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_baa_ps:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm0
-; CHECK-NEXT:    vfnmadd132ps (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_baa_ps:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm0
+; FMA-NEXT:    vfnmadd132ps (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_baa_ps:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vfnmaddps %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfnmadd.ps(<4 x float> %b, <4 x float> %a, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fnmadd_aba_ps(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_aba_ps:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm0
-; CHECK-NEXT:    vfnmadd231ps (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_aba_ps:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm0
+; FMA-NEXT:    vfnmadd231ps (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_aba_ps:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vfnmaddps %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfnmadd.ps(<4 x float> %a, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fnmadd_bba_ps(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_bba_ps:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rdx), %xmm0
-; CHECK-NEXT:    vfnmadd213ps (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_bba_ps:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rdx), %xmm0
+; FMA-NEXT:    vfnmadd213ps (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_bba_ps:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rdx), %xmm0
+; FMA4-NEXT:    vfnmaddps (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfnmadd.ps(<4 x float> %b, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 declare <8 x float> @llvm.x86.fma.vfnmadd.ps.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone
 define <8 x float> @test_x86_fnmadd_baa_ps_y(<8 x float> %a, <8 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_baa_ps_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %ymm0
-; CHECK-NEXT:    vfnmadd132ps (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_baa_ps_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %ymm0
+; FMA-NEXT:    vfnmadd132ps (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_baa_ps_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %ymm0
+; FMA4-NEXT:    vfnmaddps %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <8 x float> @llvm.x86.fma.vfnmadd.ps.256(<8 x float> %b, <8 x float> %a, <8 x float> %a) nounwind
   ret <8 x float> %res
 }
 
 define <8 x float> @test_x86_fnmadd_aba_ps_y(<8 x float> %a, <8 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_aba_ps_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %ymm0
-; CHECK-NEXT:    vfnmadd231ps (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_aba_ps_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %ymm0
+; FMA-NEXT:    vfnmadd231ps (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_aba_ps_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %ymm0
+; FMA4-NEXT:    vfnmaddps %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <8 x float> @llvm.x86.fma.vfnmadd.ps.256(<8 x float> %a, <8 x float> %b, <8 x float> %a) nounwind
   ret <8 x float> %res
 }
 
 define <8 x float> @test_x86_fnmadd_bba_ps_y(<8 x float> %a, <8 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_bba_ps_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rdx), %ymm0
-; CHECK-NEXT:    vfnmadd213ps (%rcx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_bba_ps_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rdx), %ymm0
+; FMA-NEXT:    vfnmadd213ps (%rcx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_bba_ps_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rdx), %ymm0
+; FMA4-NEXT:    vfnmaddps (%rcx), %ymm0, %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <8 x float> @llvm.x86.fma.vfnmadd.ps.256(<8 x float> %b, <8 x float> %b, <8 x float> %a) nounwind
   ret <8 x float> %res
 }
 
 declare <2 x double> @llvm.x86.fma.vfnmadd.sd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
 define <2 x double> @test_x86_fnmadd_baa_sd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_baa_sd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm1
-; CHECK-NEXT:    vmovapd (%rdx), %xmm0
-; CHECK-NEXT:    vfnmadd213sd %xmm1, %xmm1, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_baa_sd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm1
+; FMA-NEXT:    vmovapd (%rdx), %xmm0
+; FMA-NEXT:    vfnmadd213sd %xmm1, %xmm1, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_baa_sd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vmovapd (%rdx), %xmm1
+; FMA4-NEXT:    vfnmaddsd %xmm0, %xmm0, %xmm1, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfnmadd.sd(<2 x double> %b, <2 x double> %a, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fnmadd_aba_sd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_aba_sd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm0
-; CHECK-NEXT:    vfnmadd132sd (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_aba_sd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm0
+; FMA-NEXT:    vfnmadd132sd (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_aba_sd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vfnmaddsd %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfnmadd.sd(<2 x double> %a, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fnmadd_bba_sd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_bba_sd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rdx), %xmm0
-; CHECK-NEXT:    vfnmadd213sd (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_bba_sd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rdx), %xmm0
+; FMA-NEXT:    vfnmadd213sd (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_bba_sd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rdx), %xmm0
+; FMA4-NEXT:    vfnmaddsd (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfnmadd.sd(<2 x double> %b, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 declare <2 x double> @llvm.x86.fma.vfnmadd.pd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
 define <2 x double> @test_x86_fnmadd_baa_pd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_baa_pd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm0
-; CHECK-NEXT:    vfnmadd132pd (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_baa_pd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm0
+; FMA-NEXT:    vfnmadd132pd (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_baa_pd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vfnmaddpd %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfnmadd.pd(<2 x double> %b, <2 x double> %a, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fnmadd_aba_pd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_aba_pd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm0
-; CHECK-NEXT:    vfnmadd231pd (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_aba_pd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm0
+; FMA-NEXT:    vfnmadd231pd (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_aba_pd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vfnmaddpd %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfnmadd.pd(<2 x double> %a, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fnmadd_bba_pd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_bba_pd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rdx), %xmm0
-; CHECK-NEXT:    vfnmadd213pd (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_bba_pd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rdx), %xmm0
+; FMA-NEXT:    vfnmadd213pd (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_bba_pd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rdx), %xmm0
+; FMA4-NEXT:    vfnmaddpd (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfnmadd.pd(<2 x double> %b, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 declare <4 x double> @llvm.x86.fma.vfnmadd.pd.256(<4 x double>, <4 x double>, <4 x double>) nounwind readnone
 define <4 x double> @test_x86_fnmadd_baa_pd_y(<4 x double> %a, <4 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_baa_pd_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %ymm0
-; CHECK-NEXT:    vfnmadd132pd (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_baa_pd_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %ymm0
+; FMA-NEXT:    vfnmadd132pd (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_baa_pd_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %ymm0
+; FMA4-NEXT:    vfnmaddpd %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <4 x double> @llvm.x86.fma.vfnmadd.pd.256(<4 x double> %b, <4 x double> %a, <4 x double> %a) nounwind
   ret <4 x double> %res
 }
 
 define <4 x double> @test_x86_fnmadd_aba_pd_y(<4 x double> %a, <4 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_aba_pd_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %ymm0
-; CHECK-NEXT:    vfnmadd231pd (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_aba_pd_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %ymm0
+; FMA-NEXT:    vfnmadd231pd (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_aba_pd_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %ymm0
+; FMA4-NEXT:    vfnmaddpd %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <4 x double> @llvm.x86.fma.vfnmadd.pd.256(<4 x double> %a, <4 x double> %b, <4 x double> %a) nounwind
   ret <4 x double> %res
 }
 
 define <4 x double> @test_x86_fnmadd_bba_pd_y(<4 x double> %a, <4 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmadd_bba_pd_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rdx), %ymm0
-; CHECK-NEXT:    vfnmadd213pd (%rcx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmadd_bba_pd_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rdx), %ymm0
+; FMA-NEXT:    vfnmadd213pd (%rcx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmadd_bba_pd_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rdx), %ymm0
+; FMA4-NEXT:    vfnmaddpd (%rcx), %ymm0, %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <4 x double> @llvm.x86.fma.vfnmadd.pd.256(<4 x double> %b, <4 x double> %b, <4 x double> %a) nounwind
   ret <4 x double> %res
 }
 
-
 declare <4 x float> @llvm.x86.fma.vfmsub.ss(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
 define <4 x float> @test_x86_fmsub_baa_ss(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_baa_ss:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm1
-; CHECK-NEXT:    vmovaps (%rdx), %xmm0
-; CHECK-NEXT:    vfmsub213ss %xmm1, %xmm1, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_baa_ss:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm1
+; FMA-NEXT:    vmovaps (%rdx), %xmm0
+; FMA-NEXT:    vfmsub213ss %xmm1, %xmm1, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_baa_ss:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vmovaps (%rdx), %xmm1
+; FMA4-NEXT:    vfmsubss %xmm0, %xmm0, %xmm1, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfmsub.ss(<4 x float> %b, <4 x float> %a, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fmsub_aba_ss(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_aba_ss:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm0
-; CHECK-NEXT:    vfmsub132ss (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_aba_ss:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm0
+; FMA-NEXT:    vfmsub132ss (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_aba_ss:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vfmsubss %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfmsub.ss(<4 x float> %a, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fmsub_bba_ss(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_bba_ss:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rdx), %xmm0
-; CHECK-NEXT:    vfmsub213ss (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_bba_ss:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rdx), %xmm0
+; FMA-NEXT:    vfmsub213ss (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_bba_ss:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rdx), %xmm0
+; FMA4-NEXT:    vfmsubss (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfmsub.ss(<4 x float> %b, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 declare <4 x float> @llvm.x86.fma.vfmsub.ps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
 define <4 x float> @test_x86_fmsub_baa_ps(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_baa_ps:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm0
-; CHECK-NEXT:    vfmsub132ps (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_baa_ps:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm0
+; FMA-NEXT:    vfmsub132ps (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_baa_ps:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vfmsubps %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfmsub.ps(<4 x float> %b, <4 x float> %a, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fmsub_aba_ps(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_aba_ps:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm0
-; CHECK-NEXT:    vfmsub231ps (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_aba_ps:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm0
+; FMA-NEXT:    vfmsub231ps (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_aba_ps:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vfmsubps %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfmsub.ps(<4 x float> %a, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fmsub_bba_ps(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_bba_ps:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rdx), %xmm0
-; CHECK-NEXT:    vfmsub213ps (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_bba_ps:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rdx), %xmm0
+; FMA-NEXT:    vfmsub213ps (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_bba_ps:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rdx), %xmm0
+; FMA4-NEXT:    vfmsubps (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfmsub.ps(<4 x float> %b, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 declare <8 x float> @llvm.x86.fma.vfmsub.ps.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone
 define <8 x float> @test_x86_fmsub_baa_ps_y(<8 x float> %a, <8 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_baa_ps_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %ymm0
-; CHECK-NEXT:    vfmsub132ps (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_baa_ps_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %ymm0
+; FMA-NEXT:    vfmsub132ps (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_baa_ps_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %ymm0
+; FMA4-NEXT:    vfmsubps %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <8 x float> @llvm.x86.fma.vfmsub.ps.256(<8 x float> %b, <8 x float> %a, <8 x float> %a) nounwind
   ret <8 x float> %res
 }
 
 define <8 x float> @test_x86_fmsub_aba_ps_y(<8 x float> %a, <8 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_aba_ps_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %ymm0
-; CHECK-NEXT:    vfmsub231ps (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_aba_ps_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %ymm0
+; FMA-NEXT:    vfmsub231ps (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_aba_ps_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %ymm0
+; FMA4-NEXT:    vfmsubps %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <8 x float> @llvm.x86.fma.vfmsub.ps.256(<8 x float> %a, <8 x float> %b, <8 x float> %a) nounwind
   ret <8 x float> %res
 }
 
 define <8 x float> @test_x86_fmsub_bba_ps_y(<8 x float> %a, <8 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_bba_ps_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rdx), %ymm0
-; CHECK-NEXT:    vfmsub213ps (%rcx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_bba_ps_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rdx), %ymm0
+; FMA-NEXT:    vfmsub213ps (%rcx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_bba_ps_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rdx), %ymm0
+; FMA4-NEXT:    vfmsubps (%rcx), %ymm0, %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <8 x float> @llvm.x86.fma.vfmsub.ps.256(<8 x float> %b, <8 x float> %b, <8 x float> %a) nounwind
   ret <8 x float> %res
 }
 
 declare <2 x double> @llvm.x86.fma.vfmsub.sd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
 define <2 x double> @test_x86_fmsub_baa_sd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_baa_sd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm1
-; CHECK-NEXT:    vmovapd (%rdx), %xmm0
-; CHECK-NEXT:    vfmsub213sd %xmm1, %xmm1, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_baa_sd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm1
+; FMA-NEXT:    vmovapd (%rdx), %xmm0
+; FMA-NEXT:    vfmsub213sd %xmm1, %xmm1, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_baa_sd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vmovapd (%rdx), %xmm1
+; FMA4-NEXT:    vfmsubsd %xmm0, %xmm0, %xmm1, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfmsub.sd(<2 x double> %b, <2 x double> %a, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fmsub_aba_sd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_aba_sd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm0
-; CHECK-NEXT:    vfmsub132sd (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_aba_sd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm0
+; FMA-NEXT:    vfmsub132sd (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_aba_sd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vfmsubsd %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfmsub.sd(<2 x double> %a, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fmsub_bba_sd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_bba_sd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rdx), %xmm0
-; CHECK-NEXT:    vfmsub213sd (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_bba_sd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rdx), %xmm0
+; FMA-NEXT:    vfmsub213sd (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_bba_sd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rdx), %xmm0
+; FMA4-NEXT:    vfmsubsd (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfmsub.sd(<2 x double> %b, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 declare <2 x double> @llvm.x86.fma.vfmsub.pd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
 define <2 x double> @test_x86_fmsub_baa_pd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_baa_pd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm0
-; CHECK-NEXT:    vfmsub132pd (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_baa_pd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm0
+; FMA-NEXT:    vfmsub132pd (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_baa_pd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vfmsubpd %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfmsub.pd(<2 x double> %b, <2 x double> %a, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fmsub_aba_pd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_aba_pd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm0
-; CHECK-NEXT:    vfmsub231pd (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_aba_pd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm0
+; FMA-NEXT:    vfmsub231pd (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_aba_pd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vfmsubpd %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfmsub.pd(<2 x double> %a, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fmsub_bba_pd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_bba_pd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rdx), %xmm0
-; CHECK-NEXT:    vfmsub213pd (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_bba_pd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rdx), %xmm0
+; FMA-NEXT:    vfmsub213pd (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_bba_pd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rdx), %xmm0
+; FMA4-NEXT:    vfmsubpd (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfmsub.pd(<2 x double> %b, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 declare <4 x double> @llvm.x86.fma.vfmsub.pd.256(<4 x double>, <4 x double>, <4 x double>) nounwind readnone
 define <4 x double> @test_x86_fmsub_baa_pd_y(<4 x double> %a, <4 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_baa_pd_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %ymm0
-; CHECK-NEXT:    vfmsub132pd (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_baa_pd_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %ymm0
+; FMA-NEXT:    vfmsub132pd (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_baa_pd_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %ymm0
+; FMA4-NEXT:    vfmsubpd %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <4 x double> @llvm.x86.fma.vfmsub.pd.256(<4 x double> %b, <4 x double> %a, <4 x double> %a) nounwind
   ret <4 x double> %res
 }
 
 define <4 x double> @test_x86_fmsub_aba_pd_y(<4 x double> %a, <4 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_aba_pd_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %ymm0
-; CHECK-NEXT:    vfmsub231pd (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_aba_pd_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %ymm0
+; FMA-NEXT:    vfmsub231pd (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_aba_pd_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %ymm0
+; FMA4-NEXT:    vfmsubpd %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <4 x double> @llvm.x86.fma.vfmsub.pd.256(<4 x double> %a, <4 x double> %b, <4 x double> %a) nounwind
   ret <4 x double> %res
 }
 
 define <4 x double> @test_x86_fmsub_bba_pd_y(<4 x double> %a, <4 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fmsub_bba_pd_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rdx), %ymm0
-; CHECK-NEXT:    vfmsub213pd (%rcx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fmsub_bba_pd_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rdx), %ymm0
+; FMA-NEXT:    vfmsub213pd (%rcx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fmsub_bba_pd_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rdx), %ymm0
+; FMA4-NEXT:    vfmsubpd (%rcx), %ymm0, %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <4 x double> @llvm.x86.fma.vfmsub.pd.256(<4 x double> %b, <4 x double> %b, <4 x double> %a) nounwind
   ret <4 x double> %res
 }
@@ -574,188 +904,298 @@ define <4 x double> @test_x86_fmsub_bba_
 
 declare <4 x float> @llvm.x86.fma.vfnmsub.ss(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
 define <4 x float> @test_x86_fnmsub_baa_ss(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_baa_ss:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm1
-; CHECK-NEXT:    vmovaps (%rdx), %xmm0
-; CHECK-NEXT:    vfnmsub213ss %xmm1, %xmm1, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_baa_ss:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm1
+; FMA-NEXT:    vmovaps (%rdx), %xmm0
+; FMA-NEXT:    vfnmsub213ss %xmm1, %xmm1, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_baa_ss:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vmovaps (%rdx), %xmm1
+; FMA4-NEXT:    vfnmsubss %xmm0, %xmm0, %xmm1, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfnmsub.ss(<4 x float> %b, <4 x float> %a, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fnmsub_aba_ss(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_aba_ss:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm0
-; CHECK-NEXT:    vfnmsub132ss (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_aba_ss:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm0
+; FMA-NEXT:    vfnmsub132ss (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_aba_ss:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vfnmsubss %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfnmsub.ss(<4 x float> %a, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fnmsub_bba_ss(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_bba_ss:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rdx), %xmm0
-; CHECK-NEXT:    vfnmsub213ss (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_bba_ss:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rdx), %xmm0
+; FMA-NEXT:    vfnmsub213ss (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_bba_ss:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rdx), %xmm0
+; FMA4-NEXT:    vfnmsubss (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfnmsub.ss(<4 x float> %b, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 declare <4 x float> @llvm.x86.fma.vfnmsub.ps(<4 x float>, <4 x float>, <4 x float>) nounwind readnone
 define <4 x float> @test_x86_fnmsub_baa_ps(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_baa_ps:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm0
-; CHECK-NEXT:    vfnmsub132ps (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_baa_ps:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm0
+; FMA-NEXT:    vfnmsub132ps (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_baa_ps:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vfnmsubps %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfnmsub.ps(<4 x float> %b, <4 x float> %a, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fnmsub_aba_ps(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_aba_ps:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %xmm0
-; CHECK-NEXT:    vfnmsub231ps (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_aba_ps:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %xmm0
+; FMA-NEXT:    vfnmsub231ps (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_aba_ps:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %xmm0
+; FMA4-NEXT:    vfnmsubps %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfnmsub.ps(<4 x float> %a, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 define <4 x float> @test_x86_fnmsub_bba_ps(<4 x float> %a, <4 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_bba_ps:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rdx), %xmm0
-; CHECK-NEXT:    vfnmsub213ps (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_bba_ps:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rdx), %xmm0
+; FMA-NEXT:    vfnmsub213ps (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_bba_ps:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rdx), %xmm0
+; FMA4-NEXT:    vfnmsubps (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <4 x float> @llvm.x86.fma.vfnmsub.ps(<4 x float> %b, <4 x float> %b, <4 x float> %a) nounwind
   ret <4 x float> %res
 }
 
 declare <8 x float> @llvm.x86.fma.vfnmsub.ps.256(<8 x float>, <8 x float>, <8 x float>) nounwind readnone
 define <8 x float> @test_x86_fnmsub_baa_ps_y(<8 x float> %a, <8 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_baa_ps_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %ymm0
-; CHECK-NEXT:    vfnmsub132ps (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_baa_ps_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %ymm0
+; FMA-NEXT:    vfnmsub132ps (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_baa_ps_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %ymm0
+; FMA4-NEXT:    vfnmsubps %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <8 x float> @llvm.x86.fma.vfnmsub.ps.256(<8 x float> %b, <8 x float> %a, <8 x float> %a) nounwind
   ret <8 x float> %res
 }
 
 define <8 x float> @test_x86_fnmsub_aba_ps_y(<8 x float> %a, <8 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_aba_ps_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rcx), %ymm0
-; CHECK-NEXT:    vfnmsub231ps (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_aba_ps_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rcx), %ymm0
+; FMA-NEXT:    vfnmsub231ps (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_aba_ps_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rcx), %ymm0
+; FMA4-NEXT:    vfnmsubps %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <8 x float> @llvm.x86.fma.vfnmsub.ps.256(<8 x float> %a, <8 x float> %b, <8 x float> %a) nounwind
   ret <8 x float> %res
 }
 
 define <8 x float> @test_x86_fnmsub_bba_ps_y(<8 x float> %a, <8 x float> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_bba_ps_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovaps (%rdx), %ymm0
-; CHECK-NEXT:    vfnmsub213ps (%rcx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_bba_ps_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovaps (%rdx), %ymm0
+; FMA-NEXT:    vfnmsub213ps (%rcx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_bba_ps_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovaps (%rdx), %ymm0
+; FMA4-NEXT:    vfnmsubps (%rcx), %ymm0, %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <8 x float> @llvm.x86.fma.vfnmsub.ps.256(<8 x float> %b, <8 x float> %b, <8 x float> %a) nounwind
   ret <8 x float> %res
 }
 
 declare <2 x double> @llvm.x86.fma.vfnmsub.sd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
 define <2 x double> @test_x86_fnmsub_baa_sd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_baa_sd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm1
-; CHECK-NEXT:    vmovapd (%rdx), %xmm0
-; CHECK-NEXT:    vfnmsub213sd %xmm1, %xmm1, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_baa_sd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm1
+; FMA-NEXT:    vmovapd (%rdx), %xmm0
+; FMA-NEXT:    vfnmsub213sd %xmm1, %xmm1, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_baa_sd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vmovapd (%rdx), %xmm1
+; FMA4-NEXT:    vfnmsubsd %xmm0, %xmm0, %xmm1, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfnmsub.sd(<2 x double> %b, <2 x double> %a, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fnmsub_aba_sd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_aba_sd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm0
-; CHECK-NEXT:    vfnmsub132sd (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_aba_sd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm0
+; FMA-NEXT:    vfnmsub132sd (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_aba_sd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vfnmsubsd %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfnmsub.sd(<2 x double> %a, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fnmsub_bba_sd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_bba_sd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rdx), %xmm0
-; CHECK-NEXT:    vfnmsub213sd (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_bba_sd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rdx), %xmm0
+; FMA-NEXT:    vfnmsub213sd (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_bba_sd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rdx), %xmm0
+; FMA4-NEXT:    vfnmsubsd (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfnmsub.sd(<2 x double> %b, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 declare <2 x double> @llvm.x86.fma.vfnmsub.pd(<2 x double>, <2 x double>, <2 x double>) nounwind readnone
 define <2 x double> @test_x86_fnmsub_baa_pd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_baa_pd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm0
-; CHECK-NEXT:    vfnmsub132pd (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_baa_pd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm0
+; FMA-NEXT:    vfnmsub132pd (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_baa_pd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vfnmsubpd %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfnmsub.pd(<2 x double> %b, <2 x double> %a, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fnmsub_aba_pd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_aba_pd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %xmm0
-; CHECK-NEXT:    vfnmsub231pd (%rdx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_aba_pd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %xmm0
+; FMA-NEXT:    vfnmsub231pd (%rdx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_aba_pd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %xmm0
+; FMA4-NEXT:    vfnmsubpd %xmm0, (%rdx), %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfnmsub.pd(<2 x double> %a, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 define <2 x double> @test_x86_fnmsub_bba_pd(<2 x double> %a, <2 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_bba_pd:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rdx), %xmm0
-; CHECK-NEXT:    vfnmsub213pd (%rcx), %xmm0, %xmm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_bba_pd:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rdx), %xmm0
+; FMA-NEXT:    vfnmsub213pd (%rcx), %xmm0, %xmm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_bba_pd:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rdx), %xmm0
+; FMA4-NEXT:    vfnmsubpd (%rcx), %xmm0, %xmm0, %xmm0
+; FMA4-NEXT:    retq
   %res = call <2 x double> @llvm.x86.fma.vfnmsub.pd(<2 x double> %b, <2 x double> %b, <2 x double> %a) nounwind
   ret <2 x double> %res
 }
 
 declare <4 x double> @llvm.x86.fma.vfnmsub.pd.256(<4 x double>, <4 x double>, <4 x double>) nounwind readnone
 define <4 x double> @test_x86_fnmsub_baa_pd_y(<4 x double> %a, <4 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_baa_pd_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %ymm0
-; CHECK-NEXT:    vfnmsub132pd (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_baa_pd_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %ymm0
+; FMA-NEXT:    vfnmsub132pd (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_baa_pd_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %ymm0
+; FMA4-NEXT:    vfnmsubpd %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <4 x double> @llvm.x86.fma.vfnmsub.pd.256(<4 x double> %b, <4 x double> %a, <4 x double> %a) nounwind
   ret <4 x double> %res
 }
 
 define <4 x double> @test_x86_fnmsub_aba_pd_y(<4 x double> %a, <4 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_aba_pd_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rcx), %ymm0
-; CHECK-NEXT:    vfnmsub231pd (%rdx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_aba_pd_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rcx), %ymm0
+; FMA-NEXT:    vfnmsub231pd (%rdx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_aba_pd_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rcx), %ymm0
+; FMA4-NEXT:    vfnmsubpd %ymm0, (%rdx), %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <4 x double> @llvm.x86.fma.vfnmsub.pd.256(<4 x double> %a, <4 x double> %b, <4 x double> %a) nounwind
   ret <4 x double> %res
 }
 
 define <4 x double> @test_x86_fnmsub_bba_pd_y(<4 x double> %a, <4 x double> %b) #0 {
-; CHECK-LABEL: test_x86_fnmsub_bba_pd_y:
-; CHECK:       # BB#0:
-; CHECK-NEXT:    vmovapd (%rdx), %ymm0
-; CHECK-NEXT:    vfnmsub213pd (%rcx), %ymm0, %ymm0
-; CHECK-NEXT:    retq
+; FMA-LABEL: test_x86_fnmsub_bba_pd_y:
+; FMA:       # BB#0:
+; FMA-NEXT:    vmovapd (%rdx), %ymm0
+; FMA-NEXT:    vfnmsub213pd (%rcx), %ymm0, %ymm0
+; FMA-NEXT:    retq
+;
+; FMA4-LABEL: test_x86_fnmsub_bba_pd_y:
+; FMA4:       # BB#0:
+; FMA4-NEXT:    vmovapd (%rdx), %ymm0
+; FMA4-NEXT:    vfnmsubpd (%rcx), %ymm0, %ymm0, %ymm0
+; FMA4-NEXT:    retq
   %res = call <4 x double> @llvm.x86.fma.vfnmsub.pd.256(<4 x double> %b, <4 x double> %b, <4 x double> %a) nounwind
   ret <4 x double> %res
 }




More information about the llvm-commits mailing list