xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/fma-intrinsics-x86.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -march=x86-64 -mcpu=corei7-avx -mattr=+fma | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FMA
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -march=x86-64 -mcpu=core-avx2 -mattr=+fma,+avx2 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FMA
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-pc-windows -march=x86-64 -mcpu=core-avx2 -mattr=+fma,+avx2 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FMA-WIN
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -march=x86-64 -mcpu=corei7-avx -mattr=+fma4 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FMA4
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=bdver2 -mattr=+avx,-fma | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FMA4
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=bdver2 -mattr=-fma4 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FMA
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker; VFMADD
9*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fma_vfmadd_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {
10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmadd_ss:
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
12*9880d681SAndroid Build Coastguard Worker;
13*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
14*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
15*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmadd132ss     (%rdx), %xmm1, %xmm0
16*9880d681SAndroid Build Coastguard Worker;
17*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmadd213ss %xmm2, %xmm1, %xmm0
18*9880d681SAndroid Build Coastguard Worker;
19*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmaddss %xmm2, %xmm1, %xmm0, %xmm0
20*9880d681SAndroid Build Coastguard Worker;
21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
22*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.fma.vfmadd.ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)
23*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
24*9880d681SAndroid Build Coastguard Worker}
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fma_vfmadd_bac_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {
27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmadd_bac_ss:
28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
29*9880d681SAndroid Build Coastguard Worker;
30*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
31*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
32*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmadd132ss (%rcx), %xmm1, %xmm0
33*9880d681SAndroid Build Coastguard Worker;
34*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmadd213ss %xmm2, %xmm0, %xmm1
35*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vmovaps	%xmm1, %xmm0
36*9880d681SAndroid Build Coastguard Worker;
37*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmaddss %xmm2, %xmm0, %xmm1, %xmm0
38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
39*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.fma.vfmadd.ss(<4 x float> %a1, <4 x float> %a0, <4 x float> %a2)
40*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.fma.vfmadd.ss(<4 x float>, <4 x float>, <4 x float>)
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_fma_vfmadd_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {
45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmadd_sd:
46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
47*9880d681SAndroid Build Coastguard Worker;
48*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
49*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
50*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmadd132sd (%rdx), %xmm1, %xmm0
51*9880d681SAndroid Build Coastguard Worker;
52*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmadd213sd %xmm2, %xmm1, %xmm0
53*9880d681SAndroid Build Coastguard Worker;
54*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmaddsd %xmm2, %xmm1, %xmm0, %xmm0
55*9880d681SAndroid Build Coastguard Worker;
56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
57*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.fma.vfmadd.sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)
58*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_fma_vfmadd_bac_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {
62*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmadd_bac_sd:
63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
64*9880d681SAndroid Build Coastguard Worker;
65*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
66*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
67*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmadd132sd (%rcx), %xmm1, %xmm0
68*9880d681SAndroid Build Coastguard Worker;
69*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmadd213sd %xmm2, %xmm0, %xmm1
70*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vmovapd	%xmm1, %xmm0
71*9880d681SAndroid Build Coastguard Worker;
72*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmaddsd %xmm2, %xmm0, %xmm1, %xmm0
73*9880d681SAndroid Build Coastguard Worker;
74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
75*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.fma.vfmadd.sd(<2 x double> %a1, <2 x double> %a0, <2 x double> %a2)
76*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.fma.vfmadd.sd(<2 x double>, <2 x double>, <2 x double>)
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fma_vfmadd_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {
81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmadd_ps:
82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
83*9880d681SAndroid Build Coastguard Worker;
84*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %xmm{{0|1}}
85*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %xmm{{0|1}}
86*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmadd213ps (%r8), %xmm1, %xmm0
87*9880d681SAndroid Build Coastguard Worker;
88*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmadd213ps %xmm2, %xmm1, %xmm0
89*9880d681SAndroid Build Coastguard Worker;
90*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmaddps %xmm2, %xmm1, %xmm0, %xmm0
91*9880d681SAndroid Build Coastguard Worker;
92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
93*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.fma.vfmadd.ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)
94*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
95*9880d681SAndroid Build Coastguard Worker}
96*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.fma.vfmadd.ps(<4 x float>, <4 x float>, <4 x float>)
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_fma_vfmadd_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {
99*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmadd_pd:
100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
101*9880d681SAndroid Build Coastguard Worker;
102*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %xmm{{0|1}}
103*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %xmm{{0|1}}
104*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmadd213pd (%r8), %xmm1, %xmm0
105*9880d681SAndroid Build Coastguard Worker;
106*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmadd213pd %xmm2, %xmm1, %xmm0
107*9880d681SAndroid Build Coastguard Worker;
108*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmaddpd %xmm2, %xmm1, %xmm0, %xmm0
109*9880d681SAndroid Build Coastguard Worker;
110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
111*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)
112*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
113*9880d681SAndroid Build Coastguard Worker}
114*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.fma.vfmadd.pd(<2 x double>, <2 x double>, <2 x double>)
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_x86_fma_vfmadd_ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) #0 {
117*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmadd_ps_256:
118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
119*9880d681SAndroid Build Coastguard Worker;
120*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %ymm{{0|1}}
121*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %ymm{{0|1}}
122*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmadd213ps (%r8), %ymm1, %ymm0
123*9880d681SAndroid Build Coastguard Worker;
124*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmadd213ps %ymm2, %ymm1, %ymm0
125*9880d681SAndroid Build Coastguard Worker;
126*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmaddps %ymm2, %ymm1, %ymm0, %ymm0
127*9880d681SAndroid Build Coastguard Worker;
128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
129*9880d681SAndroid Build Coastguard Worker  %res = call <8 x float> @llvm.x86.fma.vfmadd.ps.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2)
130*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %res
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.x86.fma.vfmadd.ps.256(<8 x float>, <8 x float>, <8 x float>)
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_x86_fma_vfmadd_pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) #0 {
135*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmadd_pd_256:
136*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
137*9880d681SAndroid Build Coastguard Worker;
138*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %ymm{{0|1}}
139*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %ymm{{0|1}}
140*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmadd213pd (%r8), %ymm1, %ymm0
141*9880d681SAndroid Build Coastguard Worker;
142*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmadd213pd %ymm2, %ymm1, %ymm0
143*9880d681SAndroid Build Coastguard Worker;
144*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmaddpd %ymm2, %ymm1, %ymm0, %ymm0
145*9880d681SAndroid Build Coastguard Worker;
146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
147*9880d681SAndroid Build Coastguard Worker  %res = call <4 x double> @llvm.x86.fma.vfmadd.pd.256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2)
148*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
149*9880d681SAndroid Build Coastguard Worker}
150*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.x86.fma.vfmadd.pd.256(<4 x double>, <4 x double>, <4 x double>)
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Worker; VFMSUB
153*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fma_vfmsub_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {
154*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmsub_ss:
155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
156*9880d681SAndroid Build Coastguard Worker;
157*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
158*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
159*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmsub132ss (%rdx), %xmm1, %xmm0
160*9880d681SAndroid Build Coastguard Worker;
161*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmsub213ss %xmm2, %xmm1, %xmm0
162*9880d681SAndroid Build Coastguard Worker;
163*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmsubss %xmm2, %xmm1, %xmm0, %xmm0
164*9880d681SAndroid Build Coastguard Worker;
165*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
166*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.fma.vfmsub.ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)
167*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
168*9880d681SAndroid Build Coastguard Worker}
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fma_vfmsub_bac_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {
171*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmsub_bac_ss:
172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
173*9880d681SAndroid Build Coastguard Worker;
174*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
175*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
176*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmsub132ss (%rcx), %xmm1, %xmm0
177*9880d681SAndroid Build Coastguard Worker;
178*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmsub213ss %xmm2, %xmm0, %xmm1
179*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vmovaps	%xmm1, %xmm0
180*9880d681SAndroid Build Coastguard Worker;
181*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmsubss %xmm2, %xmm0, %xmm1, %xmm0
182*9880d681SAndroid Build Coastguard Worker;
183*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
184*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.fma.vfmsub.ss(<4 x float> %a1, <4 x float> %a0, <4 x float> %a2)
185*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
186*9880d681SAndroid Build Coastguard Worker}
187*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.fma.vfmsub.ss(<4 x float>, <4 x float>, <4 x float>)
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_fma_vfmsub_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {
190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmsub_sd:
191*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
192*9880d681SAndroid Build Coastguard Worker;
193*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
194*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
195*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmsub132sd (%rdx), %xmm1, %xmm0
196*9880d681SAndroid Build Coastguard Worker;
197*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmsub213sd %xmm2, %xmm1, %xmm0
198*9880d681SAndroid Build Coastguard Worker;
199*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmsubsd %xmm2, %xmm1, %xmm0, %xmm0
200*9880d681SAndroid Build Coastguard Worker;
201*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
202*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.fma.vfmsub.sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)
203*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
204*9880d681SAndroid Build Coastguard Worker}
205*9880d681SAndroid Build Coastguard Worker
206*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_fma_vfmsub_bac_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {
207*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmsub_bac_sd:
208*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
209*9880d681SAndroid Build Coastguard Worker;
210*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
211*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
212*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmsub132sd (%rcx), %xmm1, %xmm0
213*9880d681SAndroid Build Coastguard Worker;
214*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmsub213sd %xmm2, %xmm0, %xmm1
215*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vmovapd	%xmm1, %xmm0
216*9880d681SAndroid Build Coastguard Worker;
217*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmsubsd %xmm2, %xmm0, %xmm1, %xmm0
218*9880d681SAndroid Build Coastguard Worker;
219*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
220*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.fma.vfmsub.sd(<2 x double> %a1, <2 x double> %a0, <2 x double> %a2)
221*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
222*9880d681SAndroid Build Coastguard Worker}
223*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.fma.vfmsub.sd(<2 x double>, <2 x double>, <2 x double>)
224*9880d681SAndroid Build Coastguard Worker
225*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fma_vfmsub_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {
226*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmsub_ps:
227*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
228*9880d681SAndroid Build Coastguard Worker;
229*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %xmm{{0|1}}
230*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %xmm{{0|1}}
231*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmsub213ps (%r8), %xmm1, %xmm0
232*9880d681SAndroid Build Coastguard Worker;
233*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmsub213ps %xmm2, %xmm1, %xmm0
234*9880d681SAndroid Build Coastguard Worker;
235*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmsubps %xmm2, %xmm1, %xmm0, %xmm0
236*9880d681SAndroid Build Coastguard Worker;
237*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
238*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.fma.vfmsub.ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)
239*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
240*9880d681SAndroid Build Coastguard Worker}
241*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.fma.vfmsub.ps(<4 x float>, <4 x float>, <4 x float>)
242*9880d681SAndroid Build Coastguard Worker
243*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_fma_vfmsub_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {
244*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmsub_pd:
245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
246*9880d681SAndroid Build Coastguard Worker;
247*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %xmm{{0|1}}
248*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %xmm{{0|1}}
249*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmsub213pd (%r8), %xmm1, %xmm0
250*9880d681SAndroid Build Coastguard Worker;
251*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmsub213pd %xmm2, %xmm1, %xmm0
252*9880d681SAndroid Build Coastguard Worker;
253*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmsubpd %xmm2, %xmm1, %xmm0, %xmm0
254*9880d681SAndroid Build Coastguard Worker;
255*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
256*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.fma.vfmsub.pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)
257*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
258*9880d681SAndroid Build Coastguard Worker}
259*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.fma.vfmsub.pd(<2 x double>, <2 x double>, <2 x double>)
260*9880d681SAndroid Build Coastguard Worker
261*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_x86_fma_vfmsub_ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) #0 {
262*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmsub_ps_256:
263*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
264*9880d681SAndroid Build Coastguard Worker;
265*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %ymm{{0|1}}
266*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %ymm{{0|1}}
267*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmsub213ps (%r8), %ymm1, %ymm0
268*9880d681SAndroid Build Coastguard Worker;
269*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmsub213ps %ymm2, %ymm1, %ymm0
270*9880d681SAndroid Build Coastguard Worker;
271*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmsubps %ymm2, %ymm1, %ymm0, %ymm0
272*9880d681SAndroid Build Coastguard Worker;
273*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
274*9880d681SAndroid Build Coastguard Worker  %res = call <8 x float> @llvm.x86.fma.vfmsub.ps.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2)
275*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %res
276*9880d681SAndroid Build Coastguard Worker}
277*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.x86.fma.vfmsub.ps.256(<8 x float>, <8 x float>, <8 x float>)
278*9880d681SAndroid Build Coastguard Worker
279*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_x86_fma_vfmsub_pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) #0 {
280*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmsub_pd_256:
281*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
282*9880d681SAndroid Build Coastguard Worker;
283*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %ymm{{0|1}}
284*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %ymm{{0|1}}
285*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmsub213pd (%r8), %ymm1, %ymm0
286*9880d681SAndroid Build Coastguard Worker;
287*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmsub213pd %ymm2, %ymm1, %ymm0
288*9880d681SAndroid Build Coastguard Worker;
289*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmsubpd %ymm2, %ymm1, %ymm0, %ymm0
290*9880d681SAndroid Build Coastguard Worker;
291*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
292*9880d681SAndroid Build Coastguard Worker  %res = call <4 x double> @llvm.x86.fma.vfmsub.pd.256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2)
293*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
294*9880d681SAndroid Build Coastguard Worker}
295*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.x86.fma.vfmsub.pd.256(<4 x double>, <4 x double>, <4 x double>)
296*9880d681SAndroid Build Coastguard Worker
297*9880d681SAndroid Build Coastguard Worker; VFNMADD
298*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fma_vfnmadd_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {
299*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmadd_ss:
300*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
301*9880d681SAndroid Build Coastguard Worker;
302*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
303*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
304*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmadd132ss (%rdx), %xmm1, %xmm0
305*9880d681SAndroid Build Coastguard Worker;
306*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmadd213ss %xmm2, %xmm1, %xmm0
307*9880d681SAndroid Build Coastguard Worker;
308*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmaddss %xmm2, %xmm1, %xmm0, %xmm0
309*9880d681SAndroid Build Coastguard Worker;
310*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
311*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.fma.vfnmadd.ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)
312*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
313*9880d681SAndroid Build Coastguard Worker}
314*9880d681SAndroid Build Coastguard Worker
315*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fma_vfnmadd_bac_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {
316*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmadd_bac_ss:
317*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
318*9880d681SAndroid Build Coastguard Worker;
319*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
320*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
321*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmadd132ss (%rcx), %xmm1, %xmm0
322*9880d681SAndroid Build Coastguard Worker;
323*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmadd213ss %xmm2, %xmm0, %xmm1
324*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vmovaps	%xmm1, %xmm0
325*9880d681SAndroid Build Coastguard Worker;
326*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmaddss %xmm2, %xmm0, %xmm1, %xmm0
327*9880d681SAndroid Build Coastguard Worker;
328*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
329*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.fma.vfnmadd.ss(<4 x float> %a1, <4 x float> %a0, <4 x float> %a2)
330*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
331*9880d681SAndroid Build Coastguard Worker}
332*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.fma.vfnmadd.ss(<4 x float>, <4 x float>, <4 x float>)
333*9880d681SAndroid Build Coastguard Worker
334*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_fma_vfnmadd_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {
335*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmadd_sd:
336*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
337*9880d681SAndroid Build Coastguard Worker;
338*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
339*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
340*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmadd132sd (%rdx), %xmm1, %xmm0
341*9880d681SAndroid Build Coastguard Worker;
342*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmadd213sd %xmm2, %xmm1, %xmm0
343*9880d681SAndroid Build Coastguard Worker;
344*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmaddsd %xmm2, %xmm1, %xmm0, %xmm0
345*9880d681SAndroid Build Coastguard Worker;
346*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
347*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.fma.vfnmadd.sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)
348*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
349*9880d681SAndroid Build Coastguard Worker}
350*9880d681SAndroid Build Coastguard Worker
351*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_fma_vfnmadd_bac_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {
352*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmadd_bac_sd:
353*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
354*9880d681SAndroid Build Coastguard Worker;
355*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
356*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
357*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmadd132sd (%rcx), %xmm1, %xmm0
358*9880d681SAndroid Build Coastguard Worker;
359*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmadd213sd %xmm2, %xmm0, %xmm1
360*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vmovapd	%xmm1, %xmm0
361*9880d681SAndroid Build Coastguard Worker;
362*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmaddsd %xmm2, %xmm0, %xmm1, %xmm0
363*9880d681SAndroid Build Coastguard Worker;
364*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
365*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.fma.vfnmadd.sd(<2 x double> %a1, <2 x double> %a0, <2 x double> %a2)
366*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
367*9880d681SAndroid Build Coastguard Worker}
368*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.fma.vfnmadd.sd(<2 x double>, <2 x double>, <2 x double>)
369*9880d681SAndroid Build Coastguard Worker
370*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fma_vfnmadd_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {
371*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmadd_ps:
372*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
373*9880d681SAndroid Build Coastguard Worker;
374*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %xmm{{0|1}}
375*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %xmm{{0|1}}
376*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmadd213ps (%r8), %xmm1, %xmm0
377*9880d681SAndroid Build Coastguard Worker;
378*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmadd213ps %xmm2, %xmm1, %xmm0
379*9880d681SAndroid Build Coastguard Worker;
380*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmaddps %xmm2, %xmm1, %xmm0, %xmm0
381*9880d681SAndroid Build Coastguard Worker;
382*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
383*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.fma.vfnmadd.ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)
384*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
385*9880d681SAndroid Build Coastguard Worker}
386*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.fma.vfnmadd.ps(<4 x float>, <4 x float>, <4 x float>)
387*9880d681SAndroid Build Coastguard Worker
388*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_fma_vfnmadd_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {
389*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmadd_pd:
390*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
391*9880d681SAndroid Build Coastguard Worker;
392*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %xmm{{0|1}}
393*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %xmm{{0|1}}
394*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmadd213pd (%r8), %xmm1, %xmm0
395*9880d681SAndroid Build Coastguard Worker;
396*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmadd213pd %xmm2, %xmm1, %xmm0
397*9880d681SAndroid Build Coastguard Worker;
398*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmaddpd %xmm2, %xmm1, %xmm0, %xmm0
399*9880d681SAndroid Build Coastguard Worker;
400*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
401*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.fma.vfnmadd.pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)
402*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
403*9880d681SAndroid Build Coastguard Worker}
404*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.fma.vfnmadd.pd(<2 x double>, <2 x double>, <2 x double>)
405*9880d681SAndroid Build Coastguard Worker
406*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_x86_fma_vfnmadd_ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) #0 {
407*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmadd_ps_256:
408*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
409*9880d681SAndroid Build Coastguard Worker;
410*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %ymm{{0|1}}
411*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %ymm{{0|1}}
412*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmadd213ps (%r8), %ymm1, %ymm0
413*9880d681SAndroid Build Coastguard Worker;
414*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmadd213ps %ymm2, %ymm1, %ymm0
415*9880d681SAndroid Build Coastguard Worker;
416*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmaddps %ymm2, %ymm1, %ymm0, %ymm0
417*9880d681SAndroid Build Coastguard Worker;
418*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
419*9880d681SAndroid Build Coastguard Worker  %res = call <8 x float> @llvm.x86.fma.vfnmadd.ps.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2)
420*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %res
421*9880d681SAndroid Build Coastguard Worker}
422*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.x86.fma.vfnmadd.ps.256(<8 x float>, <8 x float>, <8 x float>)
423*9880d681SAndroid Build Coastguard Worker
424*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_x86_fma_vfnmadd_pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) #0 {
425*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmadd_pd_256:
426*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
427*9880d681SAndroid Build Coastguard Worker;
428*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %ymm{{0|1}}
429*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %ymm{{0|1}}
430*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmadd213pd (%r8), %ymm1, %ymm0
431*9880d681SAndroid Build Coastguard Worker;
432*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmadd213pd %ymm2, %ymm1, %ymm0
433*9880d681SAndroid Build Coastguard Worker;
434*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmaddpd %ymm2, %ymm1, %ymm0, %ymm0
435*9880d681SAndroid Build Coastguard Worker;
436*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
437*9880d681SAndroid Build Coastguard Worker  %res = call <4 x double> @llvm.x86.fma.vfnmadd.pd.256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2)
438*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
439*9880d681SAndroid Build Coastguard Worker}
440*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.x86.fma.vfnmadd.pd.256(<4 x double>, <4 x double>, <4 x double>)
441*9880d681SAndroid Build Coastguard Worker
442*9880d681SAndroid Build Coastguard Worker; VFNMSUB
443*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fma_vfnmsub_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {
444*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmsub_ss:
445*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
446*9880d681SAndroid Build Coastguard Worker;
447*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
448*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
449*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmsub132ss (%rdx), %xmm1, %xmm0
450*9880d681SAndroid Build Coastguard Worker;
451*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmsub213ss %xmm2, %xmm1, %xmm0
452*9880d681SAndroid Build Coastguard Worker;
453*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmsubss %xmm2, %xmm1, %xmm0, %xmm0
454*9880d681SAndroid Build Coastguard Worker;
455*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
456*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.fma.vfnmsub.ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)
457*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
458*9880d681SAndroid Build Coastguard Worker}
459*9880d681SAndroid Build Coastguard Worker
460*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fma_vfnmsub_bac_ss(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {
461*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmsub_bac_ss:
462*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
463*9880d681SAndroid Build Coastguard Worker;
464*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
465*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
466*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmsub132ss (%rcx), %xmm1, %xmm0
467*9880d681SAndroid Build Coastguard Worker;
468*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmsub213ss %xmm2, %xmm0, %xmm1
469*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vmovaps	%xmm1, %xmm0
470*9880d681SAndroid Build Coastguard Worker;
471*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmsubss %xmm2, %xmm0, %xmm1, %xmm0
472*9880d681SAndroid Build Coastguard Worker;
473*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
474*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.fma.vfnmsub.ss(<4 x float> %a1, <4 x float> %a0, <4 x float> %a2)
475*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
476*9880d681SAndroid Build Coastguard Worker}
477*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.fma.vfnmsub.ss(<4 x float>, <4 x float>, <4 x float>)
478*9880d681SAndroid Build Coastguard Worker
479*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_fma_vfnmsub_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {
480*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmsub_sd:
481*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
482*9880d681SAndroid Build Coastguard Worker;
483*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
484*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rcx\), %xmm0|\(%r8\), %xmm1}}
485*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmsub132sd (%rdx), %xmm1, %xmm0
486*9880d681SAndroid Build Coastguard Worker;
487*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmsub213sd %xmm2, %xmm1, %xmm0
488*9880d681SAndroid Build Coastguard Worker;
489*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmsubsd %xmm2, %xmm1, %xmm0, %xmm0
490*9880d681SAndroid Build Coastguard Worker;
491*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
492*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.fma.vfnmsub.sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)
493*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
494*9880d681SAndroid Build Coastguard Worker}
495*9880d681SAndroid Build Coastguard Worker
496*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_fma_vfnmsub_bac_sd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {
497*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmsub_bac_sd:
498*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
499*9880d681SAndroid Build Coastguard Worker;
500*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
501*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd {{\(%rdx\), %xmm0|\(%r8\), %xmm1}}
502*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmsub132sd (%rcx), %xmm1, %xmm0
503*9880d681SAndroid Build Coastguard Worker;
504*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmsub213sd %xmm2, %xmm0, %xmm1
505*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vmovapd	%xmm1, %xmm0
506*9880d681SAndroid Build Coastguard Worker;
507*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmsubsd %xmm2, %xmm0, %xmm1, %xmm0
508*9880d681SAndroid Build Coastguard Worker;
509*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
510*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.fma.vfnmsub.sd(<2 x double> %a1, <2 x double> %a0, <2 x double> %a2)
511*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
512*9880d681SAndroid Build Coastguard Worker}
513*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.fma.vfnmsub.sd(<2 x double>, <2 x double>, <2 x double>)
514*9880d681SAndroid Build Coastguard Worker
515*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fma_vfnmsub_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {
516*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmsub_ps:
517*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
518*9880d681SAndroid Build Coastguard Worker;
519*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %xmm{{0|1}}
520*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %xmm{{0|1}}
521*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmsub213ps (%r8), %xmm1, %xmm0
522*9880d681SAndroid Build Coastguard Worker;
523*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmsub213ps %xmm2, %xmm1, %xmm0
524*9880d681SAndroid Build Coastguard Worker;
525*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmsubps %xmm2, %xmm1, %xmm0, %xmm0
526*9880d681SAndroid Build Coastguard Worker;
527*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
528*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.fma.vfnmsub.ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)
529*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
530*9880d681SAndroid Build Coastguard Worker}
531*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.fma.vfnmsub.ps(<4 x float>, <4 x float>, <4 x float>)
532*9880d681SAndroid Build Coastguard Worker
533*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_fma_vfnmsub_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {
534*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmsub_pd:
535*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
536*9880d681SAndroid Build Coastguard Worker;
537*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %xmm{{0|1}}
538*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %xmm{{0|1}}
539*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmsub213pd (%r8), %xmm1, %xmm0
540*9880d681SAndroid Build Coastguard Worker;
541*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmsub213pd %xmm2, %xmm1, %xmm0
542*9880d681SAndroid Build Coastguard Worker;
543*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmsubpd %xmm2, %xmm1, %xmm0, %xmm0
544*9880d681SAndroid Build Coastguard Worker;
545*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
546*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.fma.vfnmsub.pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)
547*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
548*9880d681SAndroid Build Coastguard Worker}
549*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.fma.vfnmsub.pd(<2 x double>, <2 x double>, <2 x double>)
550*9880d681SAndroid Build Coastguard Worker
551*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_x86_fma_vfnmsub_ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) #0 {
552*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmsub_ps_256:
553*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
554*9880d681SAndroid Build Coastguard Worker;
555*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %ymm{{0|1}}
556*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %ymm{{0|1}}
557*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmsub213ps (%r8), %ymm1, %ymm0
558*9880d681SAndroid Build Coastguard Worker;
559*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmsub213ps %ymm2, %ymm1, %ymm0
560*9880d681SAndroid Build Coastguard Worker;
561*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmsubps %ymm2, %ymm1, %ymm0, %ymm0
562*9880d681SAndroid Build Coastguard Worker;
563*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
564*9880d681SAndroid Build Coastguard Worker  %res = call <8 x float> @llvm.x86.fma.vfnmsub.ps.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2)
565*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %res
566*9880d681SAndroid Build Coastguard Worker}
567*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.x86.fma.vfnmsub.ps.256(<8 x float>, <8 x float>, <8 x float>)
568*9880d681SAndroid Build Coastguard Worker
569*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_x86_fma_vfnmsub_pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) #0 {
570*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfnmsub_pd_256:
571*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
572*9880d681SAndroid Build Coastguard Worker;
573*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %ymm{{0|1}}
574*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %ymm{{0|1}}
575*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfnmsub213pd (%r8), %ymm1, %ymm0
576*9880d681SAndroid Build Coastguard Worker;
577*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfnmsub213pd %ymm2, %ymm1, %ymm0
578*9880d681SAndroid Build Coastguard Worker;
579*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfnmsubpd %ymm2, %ymm1, %ymm0, %ymm0
580*9880d681SAndroid Build Coastguard Worker;
581*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
582*9880d681SAndroid Build Coastguard Worker  %res = call <4 x double> @llvm.x86.fma.vfnmsub.pd.256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2)
583*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
584*9880d681SAndroid Build Coastguard Worker}
585*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.x86.fma.vfnmsub.pd.256(<4 x double>, <4 x double>, <4 x double>)
586*9880d681SAndroid Build Coastguard Worker
587*9880d681SAndroid Build Coastguard Worker; VFMADDSUB
588*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fma_vfmaddsub_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {
589*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmaddsub_ps:
590*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
591*9880d681SAndroid Build Coastguard Worker;
592*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %xmm{{0|1}}
593*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %xmm{{0|1}}
594*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmaddsub213ps (%r8), %xmm1, %xmm0
595*9880d681SAndroid Build Coastguard Worker;
596*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmaddsub213ps %xmm2, %xmm1, %xmm0
597*9880d681SAndroid Build Coastguard Worker;
598*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmaddsubps %xmm2, %xmm1, %xmm0, %xmm0
599*9880d681SAndroid Build Coastguard Worker;
600*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
601*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.fma.vfmaddsub.ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)
602*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
603*9880d681SAndroid Build Coastguard Worker}
604*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.fma.vfmaddsub.ps(<4 x float>, <4 x float>, <4 x float>)
605*9880d681SAndroid Build Coastguard Worker
606*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_fma_vfmaddsub_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {
607*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmaddsub_pd:
608*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
609*9880d681SAndroid Build Coastguard Worker;
610*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %xmm{{0|1}}
611*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %xmm{{0|1}}
612*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmaddsub213pd (%r8), %xmm1, %xmm0
613*9880d681SAndroid Build Coastguard Worker;
614*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmaddsub213pd %xmm2, %xmm1, %xmm0
615*9880d681SAndroid Build Coastguard Worker;
616*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmaddsubpd %xmm2, %xmm1, %xmm0, %xmm0
617*9880d681SAndroid Build Coastguard Worker;
618*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
619*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.fma.vfmaddsub.pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)
620*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
621*9880d681SAndroid Build Coastguard Worker}
622*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.fma.vfmaddsub.pd(<2 x double>, <2 x double>, <2 x double>)
623*9880d681SAndroid Build Coastguard Worker
624*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_x86_fma_vfmaddsub_ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) #0 {
625*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmaddsub_ps_256:
626*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
627*9880d681SAndroid Build Coastguard Worker;
628*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %ymm{{0|1}}
629*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %ymm{{0|1}}
630*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmaddsub213ps (%r8), %ymm1, %ymm0
631*9880d681SAndroid Build Coastguard Worker;
632*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmaddsub213ps %ymm2, %ymm1, %ymm0
633*9880d681SAndroid Build Coastguard Worker;
634*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmaddsubps %ymm2, %ymm1, %ymm0, %ymm0
635*9880d681SAndroid Build Coastguard Worker;
636*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
637*9880d681SAndroid Build Coastguard Worker  %res = call <8 x float> @llvm.x86.fma.vfmaddsub.ps.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2)
638*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %res
639*9880d681SAndroid Build Coastguard Worker}
640*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.x86.fma.vfmaddsub.ps.256(<8 x float>, <8 x float>, <8 x float>)
641*9880d681SAndroid Build Coastguard Worker
642*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_x86_fma_vfmaddsub_pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) #0 {
643*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmaddsub_pd_256:
644*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
645*9880d681SAndroid Build Coastguard Worker;
646*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %ymm{{0|1}}
647*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %ymm{{0|1}}
648*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmaddsub213pd (%r8), %ymm1, %ymm0
649*9880d681SAndroid Build Coastguard Worker;
650*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmaddsub213pd %ymm2, %ymm1, %ymm0
651*9880d681SAndroid Build Coastguard Worker;
652*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmaddsubpd %ymm2, %ymm1, %ymm0, %ymm0
653*9880d681SAndroid Build Coastguard Worker;
654*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
655*9880d681SAndroid Build Coastguard Worker  %res = call <4 x double> @llvm.x86.fma.vfmaddsub.pd.256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2)
656*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
657*9880d681SAndroid Build Coastguard Worker}
658*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.x86.fma.vfmaddsub.pd.256(<4 x double>, <4 x double>, <4 x double>)
659*9880d681SAndroid Build Coastguard Worker
660*9880d681SAndroid Build Coastguard Worker; VFMSUBADD
661*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fma_vfmsubadd_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) #0 {
662*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmsubadd_ps:
663*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
664*9880d681SAndroid Build Coastguard Worker;
665*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %xmm{{0|1}}
666*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %xmm{{0|1}}
667*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmsubadd213ps (%r8), %xmm1, %xmm0
668*9880d681SAndroid Build Coastguard Worker;
669*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmsubadd213ps %xmm2, %xmm1, %xmm0
670*9880d681SAndroid Build Coastguard Worker;
671*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmsubaddps %xmm2, %xmm1, %xmm0, %xmm0
672*9880d681SAndroid Build Coastguard Worker;
673*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
674*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.fma.vfmsubadd.ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2)
675*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
676*9880d681SAndroid Build Coastguard Worker}
677*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.fma.vfmsubadd.ps(<4 x float>, <4 x float>, <4 x float>)
678*9880d681SAndroid Build Coastguard Worker
679*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_fma_vfmsubadd_pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2) #0 {
680*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmsubadd_pd:
681*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
682*9880d681SAndroid Build Coastguard Worker;
683*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %xmm{{0|1}}
684*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %xmm{{0|1}}
685*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmsubadd213pd (%r8), %xmm1, %xmm0
686*9880d681SAndroid Build Coastguard Worker;
687*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmsubadd213pd %xmm2, %xmm1, %xmm0
688*9880d681SAndroid Build Coastguard Worker;
689*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmsubaddpd %xmm2, %xmm1, %xmm0, %xmm0
690*9880d681SAndroid Build Coastguard Worker;
691*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
692*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.fma.vfmsubadd.pd(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2)
693*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
694*9880d681SAndroid Build Coastguard Worker}
695*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.fma.vfmsubadd.pd(<2 x double>, <2 x double>, <2 x double>)
696*9880d681SAndroid Build Coastguard Worker
697*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_x86_fma_vfmsubadd_ps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) #0 {
698*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmsubadd_ps_256:
699*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
700*9880d681SAndroid Build Coastguard Worker;
701*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %ymm{{0|1}}
702*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovaps (%{{(rcx|rdx)}}), %ymm{{0|1}}
703*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmsubadd213ps (%r8), %ymm1, %ymm0
704*9880d681SAndroid Build Coastguard Worker;
705*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmsubadd213ps %ymm2, %ymm1, %ymm0
706*9880d681SAndroid Build Coastguard Worker;
707*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmsubaddps %ymm2, %ymm1, %ymm0, %ymm0
708*9880d681SAndroid Build Coastguard Worker;
709*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
710*9880d681SAndroid Build Coastguard Worker  %res = call <8 x float> @llvm.x86.fma.vfmsubadd.ps.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2)
711*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %res
712*9880d681SAndroid Build Coastguard Worker}
713*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.x86.fma.vfmsubadd.ps.256(<8 x float>, <8 x float>, <8 x float>)
714*9880d681SAndroid Build Coastguard Worker
715*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_x86_fma_vfmsubadd_pd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2) #0 {
716*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_fma_vfmsubadd_pd_256:
717*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  # BB#0:
718*9880d681SAndroid Build Coastguard Worker;
719*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %ymm{{0|1}}
720*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vmovapd (%{{(rcx|rdx)}}), %ymm{{0|1}}
721*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-WIN-NEXT: vfmsubadd213pd (%r8), %ymm1, %ymm0
722*9880d681SAndroid Build Coastguard Worker;
723*9880d681SAndroid Build Coastguard Worker; CHECK-FMA-NEXT:    vfmsubadd213pd %ymm2, %ymm1, %ymm0
724*9880d681SAndroid Build Coastguard Worker;
725*9880d681SAndroid Build Coastguard Worker; CHECK-FMA4-NEXT: vfmsubaddpd %ymm2, %ymm1, %ymm0, %ymm0
726*9880d681SAndroid Build Coastguard Worker;
727*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq
728*9880d681SAndroid Build Coastguard Worker  %res = call <4 x double> @llvm.x86.fma.vfmsubadd.pd.256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2)
729*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
730*9880d681SAndroid Build Coastguard Worker}
731*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.x86.fma.vfmsubadd.pd.256(<4 x double>, <4 x double>, <4 x double>)
732*9880d681SAndroid Build Coastguard Worker
733*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind }
734