• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 -mattr=+fma4 | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=bdver1 | FileCheck %s --check-prefix=CHECK --check-prefix=BDVER --check-prefix=BDVER1
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=bdver2 -mattr=-fma | FileCheck %s --check-prefix=CHECK --check-prefix=BDVER --check-prefix=BDVER1
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=bdver3 -mattr=-fma | FileCheck %s --check-prefix=CHECK --check-prefix=BDVER --check-prefix=BDVER1
6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=bdver4 -mattr=-fma | FileCheck %s --check-prefix=CHECK --check-prefix=BDVER --check-prefix=BDVER1
7
8;
9; VFMADD
10;
11
12define void @test_vfmaddpd_128(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) optsize {
13; GENERIC-LABEL: test_vfmaddpd_128:
14; GENERIC:       # %bb.0:
15; GENERIC-NEXT:    #APP
16; GENERIC-NEXT:    vfmaddpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
17; GENERIC-NEXT:    vfmaddpd (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
18; GENERIC-NEXT:    vfmaddpd %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
19; GENERIC-NEXT:    #NO_APP
20; GENERIC-NEXT:    retq # sched: [1:1.00]
21;
22; BDVER-LABEL: test_vfmaddpd_128:
23; BDVER:       # %bb.0:
24; BDVER-NEXT:    #APP
25; BDVER-NEXT:    vfmaddpd %xmm2, %xmm1, %xmm0, %xmm0
26; BDVER-NEXT:    vfmaddpd (%rdi), %xmm1, %xmm0, %xmm0
27; BDVER-NEXT:    vfmaddpd %xmm1, (%rdi), %xmm0, %xmm0
28; BDVER-NEXT:    #NO_APP
29; BDVER-NEXT:    retq
30  tail call void asm "vfmaddpd $2, $1, $0, $0 \0A\09 vfmaddpd $3, $1, $0, $0 \0A\09 vfmaddpd $1, $3, $0, $0", "x,x,x,*m"(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) nounwind
31  ret void
32}
33
34define void @test_vfmaddpd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, <4 x double> *%a3) optsize {
35; GENERIC-LABEL: test_vfmaddpd_256:
36; GENERIC:       # %bb.0:
37; GENERIC-NEXT:    #APP
38; GENERIC-NEXT:    vfmaddpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [5:0.50]
39; GENERIC-NEXT:    vfmaddpd (%rdi), %ymm1, %ymm0, %ymm0 # sched: [10:0.50]
40; GENERIC-NEXT:    vfmaddpd %ymm1, (%rdi), %ymm0, %ymm0 # sched: [10:0.50]
41; GENERIC-NEXT:    #NO_APP
42; GENERIC-NEXT:    vzeroupper # sched: [100:0.33]
43; GENERIC-NEXT:    retq # sched: [1:1.00]
44;
45; BDVER-LABEL: test_vfmaddpd_256:
46; BDVER:       # %bb.0:
47; BDVER-NEXT:    #APP
48; BDVER-NEXT:    vfmaddpd %ymm2, %ymm1, %ymm0, %ymm0
49; BDVER-NEXT:    vfmaddpd (%rdi), %ymm1, %ymm0, %ymm0
50; BDVER-NEXT:    vfmaddpd %ymm1, (%rdi), %ymm0, %ymm0
51; BDVER-NEXT:    #NO_APP
52; BDVER-NEXT:    vzeroupper
53; BDVER-NEXT:    retq
54  tail call void asm "vfmaddpd $2, $1, $0, $0 \0A\09 vfmaddpd $3, $1, $0, $0 \0A\09 vfmaddpd $1, $3, $0, $0", "x,x,x,*m"(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, <4 x double> *%a3) nounwind
55  ret void
56}
57
58define void @test_vfmaddps_128(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) optsize {
59; GENERIC-LABEL: test_vfmaddps_128:
60; GENERIC:       # %bb.0:
61; GENERIC-NEXT:    #APP
62; GENERIC-NEXT:    vfmaddps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
63; GENERIC-NEXT:    vfmaddps (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
64; GENERIC-NEXT:    vfmaddps %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
65; GENERIC-NEXT:    #NO_APP
66; GENERIC-NEXT:    retq # sched: [1:1.00]
67;
68; BDVER-LABEL: test_vfmaddps_128:
69; BDVER:       # %bb.0:
70; BDVER-NEXT:    #APP
71; BDVER-NEXT:    vfmaddps %xmm2, %xmm1, %xmm0, %xmm0
72; BDVER-NEXT:    vfmaddps (%rdi), %xmm1, %xmm0, %xmm0
73; BDVER-NEXT:    vfmaddps %xmm1, (%rdi), %xmm0, %xmm0
74; BDVER-NEXT:    #NO_APP
75; BDVER-NEXT:    retq
76  tail call void asm "vfmaddps $2, $1, $0, $0 \0A\09 vfmaddps $3, $1, $0, $0 \0A\09 vfmaddps $1, $3, $0, $0", "x,x,x,*m"(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) nounwind
77  ret void
78}
79
80define void @test_vfmaddps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, <8 x float> *%a3) optsize {
81; GENERIC-LABEL: test_vfmaddps_256:
82; GENERIC:       # %bb.0:
83; GENERIC-NEXT:    #APP
84; GENERIC-NEXT:    vfmaddps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [5:0.50]
85; GENERIC-NEXT:    vfmaddps (%rdi), %ymm1, %ymm0, %ymm0 # sched: [10:0.50]
86; GENERIC-NEXT:    vfmaddps %ymm1, (%rdi), %ymm0, %ymm0 # sched: [10:0.50]
87; GENERIC-NEXT:    #NO_APP
88; GENERIC-NEXT:    vzeroupper # sched: [100:0.33]
89; GENERIC-NEXT:    retq # sched: [1:1.00]
90;
91; BDVER-LABEL: test_vfmaddps_256:
92; BDVER:       # %bb.0:
93; BDVER-NEXT:    #APP
94; BDVER-NEXT:    vfmaddps %ymm2, %ymm1, %ymm0, %ymm0
95; BDVER-NEXT:    vfmaddps (%rdi), %ymm1, %ymm0, %ymm0
96; BDVER-NEXT:    vfmaddps %ymm1, (%rdi), %ymm0, %ymm0
97; BDVER-NEXT:    #NO_APP
98; BDVER-NEXT:    vzeroupper
99; BDVER-NEXT:    retq
100  tail call void asm "vfmaddps $2, $1, $0, $0 \0A\09 vfmaddps $3, $1, $0, $0 \0A\09 vfmaddps $1, $3, $0, $0", "x,x,x,*m"(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, <8 x float> *%a3) nounwind
101  ret void
102}
103
104define void @test_vfmaddsd_128(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) optsize {
105; GENERIC-LABEL: test_vfmaddsd_128:
106; GENERIC:       # %bb.0:
107; GENERIC-NEXT:    #APP
108; GENERIC-NEXT:    vfmaddsd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
109; GENERIC-NEXT:    vfmaddsd (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
110; GENERIC-NEXT:    vfmaddsd %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
111; GENERIC-NEXT:    #NO_APP
112; GENERIC-NEXT:    retq # sched: [1:1.00]
113;
114; BDVER-LABEL: test_vfmaddsd_128:
115; BDVER:       # %bb.0:
116; BDVER-NEXT:    #APP
117; BDVER-NEXT:    vfmaddsd %xmm2, %xmm1, %xmm0, %xmm0
118; BDVER-NEXT:    vfmaddsd (%rdi), %xmm1, %xmm0, %xmm0
119; BDVER-NEXT:    vfmaddsd %xmm1, (%rdi), %xmm0, %xmm0
120; BDVER-NEXT:    #NO_APP
121; BDVER-NEXT:    retq
122  tail call void asm "vfmaddsd $2, $1, $0, $0 \0A\09 vfmaddsd $3, $1, $0, $0 \0A\09 vfmaddsd $1, $3, $0, $0", "x,x,x,*m"(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) nounwind
123  ret void
124}
125
126define void @test_vfmaddss_128(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) optsize {
127; GENERIC-LABEL: test_vfmaddss_128:
128; GENERIC:       # %bb.0:
129; GENERIC-NEXT:    #APP
130; GENERIC-NEXT:    vfmaddss %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
131; GENERIC-NEXT:    vfmaddss (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
132; GENERIC-NEXT:    vfmaddss %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
133; GENERIC-NEXT:    #NO_APP
134; GENERIC-NEXT:    retq # sched: [1:1.00]
135;
136; BDVER-LABEL: test_vfmaddss_128:
137; BDVER:       # %bb.0:
138; BDVER-NEXT:    #APP
139; BDVER-NEXT:    vfmaddss %xmm2, %xmm1, %xmm0, %xmm0
140; BDVER-NEXT:    vfmaddss (%rdi), %xmm1, %xmm0, %xmm0
141; BDVER-NEXT:    vfmaddss %xmm1, (%rdi), %xmm0, %xmm0
142; BDVER-NEXT:    #NO_APP
143; BDVER-NEXT:    retq
144  tail call void asm "vfmaddss $2, $1, $0, $0 \0A\09 vfmaddss $3, $1, $0, $0 \0A\09 vfmaddss $1, $3, $0, $0", "x,x,x,*m"(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) nounwind
145  ret void
146}
147
148;
149; VFMADDSUB
150;
151
152define void @test_vfmaddsubpd_128(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) optsize {
153; GENERIC-LABEL: test_vfmaddsubpd_128:
154; GENERIC:       # %bb.0:
155; GENERIC-NEXT:    #APP
156; GENERIC-NEXT:    vfmaddsubpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
157; GENERIC-NEXT:    vfmaddsubpd (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
158; GENERIC-NEXT:    vfmaddsubpd %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
159; GENERIC-NEXT:    #NO_APP
160; GENERIC-NEXT:    retq # sched: [1:1.00]
161;
162; BDVER-LABEL: test_vfmaddsubpd_128:
163; BDVER:       # %bb.0:
164; BDVER-NEXT:    #APP
165; BDVER-NEXT:    vfmaddsubpd %xmm2, %xmm1, %xmm0, %xmm0
166; BDVER-NEXT:    vfmaddsubpd (%rdi), %xmm1, %xmm0, %xmm0
167; BDVER-NEXT:    vfmaddsubpd %xmm1, (%rdi), %xmm0, %xmm0
168; BDVER-NEXT:    #NO_APP
169; BDVER-NEXT:    retq
170  tail call void asm "vfmaddsubpd $2, $1, $0, $0 \0A\09 vfmaddsubpd $3, $1, $0, $0 \0A\09 vfmaddsubpd $1, $3, $0, $0", "x,x,x,*m"(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) nounwind
171  ret void
172}
173
174define void @test_vfmaddsubpd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, <4 x double> *%a3) optsize {
175; GENERIC-LABEL: test_vfmaddsubpd_256:
176; GENERIC:       # %bb.0:
177; GENERIC-NEXT:    #APP
178; GENERIC-NEXT:    vfmaddsubpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [5:0.50]
179; GENERIC-NEXT:    vfmaddsubpd (%rdi), %ymm1, %ymm0, %ymm0 # sched: [10:0.50]
180; GENERIC-NEXT:    vfmaddsubpd %ymm1, (%rdi), %ymm0, %ymm0 # sched: [10:0.50]
181; GENERIC-NEXT:    #NO_APP
182; GENERIC-NEXT:    vzeroupper # sched: [100:0.33]
183; GENERIC-NEXT:    retq # sched: [1:1.00]
184;
185; BDVER-LABEL: test_vfmaddsubpd_256:
186; BDVER:       # %bb.0:
187; BDVER-NEXT:    #APP
188; BDVER-NEXT:    vfmaddsubpd %ymm2, %ymm1, %ymm0, %ymm0
189; BDVER-NEXT:    vfmaddsubpd (%rdi), %ymm1, %ymm0, %ymm0
190; BDVER-NEXT:    vfmaddsubpd %ymm1, (%rdi), %ymm0, %ymm0
191; BDVER-NEXT:    #NO_APP
192; BDVER-NEXT:    vzeroupper
193; BDVER-NEXT:    retq
194  tail call void asm "vfmaddsubpd $2, $1, $0, $0 \0A\09 vfmaddsubpd $3, $1, $0, $0 \0A\09 vfmaddsubpd $1, $3, $0, $0", "x,x,x,*m"(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, <4 x double> *%a3) nounwind
195  ret void
196}
197
198define void @test_vfmaddsubps_128(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) optsize {
199; GENERIC-LABEL: test_vfmaddsubps_128:
200; GENERIC:       # %bb.0:
201; GENERIC-NEXT:    #APP
202; GENERIC-NEXT:    vfmaddsubps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
203; GENERIC-NEXT:    vfmaddsubps (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
204; GENERIC-NEXT:    vfmaddsubps %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
205; GENERIC-NEXT:    #NO_APP
206; GENERIC-NEXT:    retq # sched: [1:1.00]
207;
208; BDVER-LABEL: test_vfmaddsubps_128:
209; BDVER:       # %bb.0:
210; BDVER-NEXT:    #APP
211; BDVER-NEXT:    vfmaddsubps %xmm2, %xmm1, %xmm0, %xmm0
212; BDVER-NEXT:    vfmaddsubps (%rdi), %xmm1, %xmm0, %xmm0
213; BDVER-NEXT:    vfmaddsubps %xmm1, (%rdi), %xmm0, %xmm0
214; BDVER-NEXT:    #NO_APP
215; BDVER-NEXT:    retq
216  tail call void asm "vfmaddsubps $2, $1, $0, $0 \0A\09 vfmaddsubps $3, $1, $0, $0 \0A\09 vfmaddsubps $1, $3, $0, $0", "x,x,x,*m"(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) nounwind
217  ret void
218}
219
220define void @test_vfmaddsubps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, <8 x float> *%a3) optsize {
221; GENERIC-LABEL: test_vfmaddsubps_256:
222; GENERIC:       # %bb.0:
223; GENERIC-NEXT:    #APP
224; GENERIC-NEXT:    vfmaddsubps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [5:0.50]
225; GENERIC-NEXT:    vfmaddsubps (%rdi), %ymm1, %ymm0, %ymm0 # sched: [10:0.50]
226; GENERIC-NEXT:    vfmaddsubps %ymm1, (%rdi), %ymm0, %ymm0 # sched: [10:0.50]
227; GENERIC-NEXT:    #NO_APP
228; GENERIC-NEXT:    vzeroupper # sched: [100:0.33]
229; GENERIC-NEXT:    retq # sched: [1:1.00]
230;
231; BDVER-LABEL: test_vfmaddsubps_256:
232; BDVER:       # %bb.0:
233; BDVER-NEXT:    #APP
234; BDVER-NEXT:    vfmaddsubps %ymm2, %ymm1, %ymm0, %ymm0
235; BDVER-NEXT:    vfmaddsubps (%rdi), %ymm1, %ymm0, %ymm0
236; BDVER-NEXT:    vfmaddsubps %ymm1, (%rdi), %ymm0, %ymm0
237; BDVER-NEXT:    #NO_APP
238; BDVER-NEXT:    vzeroupper
239; BDVER-NEXT:    retq
240  tail call void asm "vfmaddsubps $2, $1, $0, $0 \0A\09 vfmaddsubps $3, $1, $0, $0 \0A\09 vfmaddsubps $1, $3, $0, $0", "x,x,x,*m"(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, <8 x float> *%a3) nounwind
241  ret void
242}
243
244;
245; VFMSUBADD
246;
247
248define void @test_vfmsubaddpd_128(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) optsize {
249; GENERIC-LABEL: test_vfmsubaddpd_128:
250; GENERIC:       # %bb.0:
251; GENERIC-NEXT:    #APP
252; GENERIC-NEXT:    vfmsubaddpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
253; GENERIC-NEXT:    vfmsubaddpd (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
254; GENERIC-NEXT:    vfmsubaddpd %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
255; GENERIC-NEXT:    #NO_APP
256; GENERIC-NEXT:    retq # sched: [1:1.00]
257;
258; BDVER-LABEL: test_vfmsubaddpd_128:
259; BDVER:       # %bb.0:
260; BDVER-NEXT:    #APP
261; BDVER-NEXT:    vfmsubaddpd %xmm2, %xmm1, %xmm0, %xmm0
262; BDVER-NEXT:    vfmsubaddpd (%rdi), %xmm1, %xmm0, %xmm0
263; BDVER-NEXT:    vfmsubaddpd %xmm1, (%rdi), %xmm0, %xmm0
264; BDVER-NEXT:    #NO_APP
265; BDVER-NEXT:    retq
266  tail call void asm "vfmsubaddpd $2, $1, $0, $0 \0A\09 vfmsubaddpd $3, $1, $0, $0 \0A\09 vfmsubaddpd $1, $3, $0, $0", "x,x,x,*m"(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) nounwind
267  ret void
268}
269
270define void @test_vfmsubaddpd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, <4 x double> *%a3) optsize {
271; GENERIC-LABEL: test_vfmsubaddpd_256:
272; GENERIC:       # %bb.0:
273; GENERIC-NEXT:    #APP
274; GENERIC-NEXT:    vfmsubaddpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [5:0.50]
275; GENERIC-NEXT:    vfmsubaddpd (%rdi), %ymm1, %ymm0, %ymm0 # sched: [10:0.50]
276; GENERIC-NEXT:    vfmsubaddpd %ymm1, (%rdi), %ymm0, %ymm0 # sched: [10:0.50]
277; GENERIC-NEXT:    #NO_APP
278; GENERIC-NEXT:    vzeroupper # sched: [100:0.33]
279; GENERIC-NEXT:    retq # sched: [1:1.00]
280;
281; BDVER-LABEL: test_vfmsubaddpd_256:
282; BDVER:       # %bb.0:
283; BDVER-NEXT:    #APP
284; BDVER-NEXT:    vfmsubaddpd %ymm2, %ymm1, %ymm0, %ymm0
285; BDVER-NEXT:    vfmsubaddpd (%rdi), %ymm1, %ymm0, %ymm0
286; BDVER-NEXT:    vfmsubaddpd %ymm1, (%rdi), %ymm0, %ymm0
287; BDVER-NEXT:    #NO_APP
288; BDVER-NEXT:    vzeroupper
289; BDVER-NEXT:    retq
290  tail call void asm "vfmsubaddpd $2, $1, $0, $0 \0A\09 vfmsubaddpd $3, $1, $0, $0 \0A\09 vfmsubaddpd $1, $3, $0, $0", "x,x,x,*m"(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, <4 x double> *%a3) nounwind
291  ret void
292}
293
294define void @test_vfmsubaddps_128(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) optsize {
295; GENERIC-LABEL: test_vfmsubaddps_128:
296; GENERIC:       # %bb.0:
297; GENERIC-NEXT:    #APP
298; GENERIC-NEXT:    vfmsubaddps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
299; GENERIC-NEXT:    vfmsubaddps (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
300; GENERIC-NEXT:    vfmsubaddps %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
301; GENERIC-NEXT:    #NO_APP
302; GENERIC-NEXT:    retq # sched: [1:1.00]
303;
304; BDVER-LABEL: test_vfmsubaddps_128:
305; BDVER:       # %bb.0:
306; BDVER-NEXT:    #APP
307; BDVER-NEXT:    vfmsubaddps %xmm2, %xmm1, %xmm0, %xmm0
308; BDVER-NEXT:    vfmsubaddps (%rdi), %xmm1, %xmm0, %xmm0
309; BDVER-NEXT:    vfmsubaddps %xmm1, (%rdi), %xmm0, %xmm0
310; BDVER-NEXT:    #NO_APP
311; BDVER-NEXT:    retq
312  tail call void asm "vfmsubaddps $2, $1, $0, $0 \0A\09 vfmsubaddps $3, $1, $0, $0 \0A\09 vfmsubaddps $1, $3, $0, $0", "x,x,x,*m"(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) nounwind
313  ret void
314}
315
316define void @test_vfmsubaddps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, <8 x float> *%a3) optsize {
317; GENERIC-LABEL: test_vfmsubaddps_256:
318; GENERIC:       # %bb.0:
319; GENERIC-NEXT:    #APP
320; GENERIC-NEXT:    vfmsubaddps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [5:0.50]
321; GENERIC-NEXT:    vfmsubaddps (%rdi), %ymm1, %ymm0, %ymm0 # sched: [10:0.50]
322; GENERIC-NEXT:    vfmsubaddps %ymm1, (%rdi), %ymm0, %ymm0 # sched: [10:0.50]
323; GENERIC-NEXT:    #NO_APP
324; GENERIC-NEXT:    vzeroupper # sched: [100:0.33]
325; GENERIC-NEXT:    retq # sched: [1:1.00]
326;
327; BDVER-LABEL: test_vfmsubaddps_256:
328; BDVER:       # %bb.0:
329; BDVER-NEXT:    #APP
330; BDVER-NEXT:    vfmsubaddps %ymm2, %ymm1, %ymm0, %ymm0
331; BDVER-NEXT:    vfmsubaddps (%rdi), %ymm1, %ymm0, %ymm0
332; BDVER-NEXT:    vfmsubaddps %ymm1, (%rdi), %ymm0, %ymm0
333; BDVER-NEXT:    #NO_APP
334; BDVER-NEXT:    vzeroupper
335; BDVER-NEXT:    retq
336  tail call void asm "vfmsubaddps $2, $1, $0, $0 \0A\09 vfmsubaddps $3, $1, $0, $0 \0A\09 vfmsubaddps $1, $3, $0, $0", "x,x,x,*m"(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, <8 x float> *%a3) nounwind
337  ret void
338}
339
340;
341; VFMSUB
342;
343
344define void @test_vfmsubpd_128(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) optsize {
345; GENERIC-LABEL: test_vfmsubpd_128:
346; GENERIC:       # %bb.0:
347; GENERIC-NEXT:    #APP
348; GENERIC-NEXT:    vfmsubpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
349; GENERIC-NEXT:    vfmsubpd (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
350; GENERIC-NEXT:    vfmsubpd %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
351; GENERIC-NEXT:    #NO_APP
352; GENERIC-NEXT:    retq # sched: [1:1.00]
353;
354; BDVER-LABEL: test_vfmsubpd_128:
355; BDVER:       # %bb.0:
356; BDVER-NEXT:    #APP
357; BDVER-NEXT:    vfmsubpd %xmm2, %xmm1, %xmm0, %xmm0
358; BDVER-NEXT:    vfmsubpd (%rdi), %xmm1, %xmm0, %xmm0
359; BDVER-NEXT:    vfmsubpd %xmm1, (%rdi), %xmm0, %xmm0
360; BDVER-NEXT:    #NO_APP
361; BDVER-NEXT:    retq
362  tail call void asm "vfmsubpd $2, $1, $0, $0 \0A\09 vfmsubpd $3, $1, $0, $0 \0A\09 vfmsubpd $1, $3, $0, $0", "x,x,x,*m"(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) nounwind
363  ret void
364}
365
366define void @test_vfmsubpd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, <4 x double> *%a3) optsize {
367; GENERIC-LABEL: test_vfmsubpd_256:
368; GENERIC:       # %bb.0:
369; GENERIC-NEXT:    #APP
370; GENERIC-NEXT:    vfmsubpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [5:0.50]
371; GENERIC-NEXT:    vfmsubpd (%rdi), %ymm1, %ymm0, %ymm0 # sched: [10:0.50]
372; GENERIC-NEXT:    vfmsubpd %ymm1, (%rdi), %ymm0, %ymm0 # sched: [10:0.50]
373; GENERIC-NEXT:    #NO_APP
374; GENERIC-NEXT:    vzeroupper # sched: [100:0.33]
375; GENERIC-NEXT:    retq # sched: [1:1.00]
376;
377; BDVER-LABEL: test_vfmsubpd_256:
378; BDVER:       # %bb.0:
379; BDVER-NEXT:    #APP
380; BDVER-NEXT:    vfmsubpd %ymm2, %ymm1, %ymm0, %ymm0
381; BDVER-NEXT:    vfmsubpd (%rdi), %ymm1, %ymm0, %ymm0
382; BDVER-NEXT:    vfmsubpd %ymm1, (%rdi), %ymm0, %ymm0
383; BDVER-NEXT:    #NO_APP
384; BDVER-NEXT:    vzeroupper
385; BDVER-NEXT:    retq
386  tail call void asm "vfmsubpd $2, $1, $0, $0 \0A\09 vfmsubpd $3, $1, $0, $0 \0A\09 vfmsubpd $1, $3, $0, $0", "x,x,x,*m"(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, <4 x double> *%a3) nounwind
387  ret void
388}
389
390define void @test_vfmsubps_128(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) optsize {
391; GENERIC-LABEL: test_vfmsubps_128:
392; GENERIC:       # %bb.0:
393; GENERIC-NEXT:    #APP
394; GENERIC-NEXT:    vfmsubps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
395; GENERIC-NEXT:    vfmsubps (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
396; GENERIC-NEXT:    vfmsubps %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
397; GENERIC-NEXT:    #NO_APP
398; GENERIC-NEXT:    retq # sched: [1:1.00]
399;
400; BDVER-LABEL: test_vfmsubps_128:
401; BDVER:       # %bb.0:
402; BDVER-NEXT:    #APP
403; BDVER-NEXT:    vfmsubps %xmm2, %xmm1, %xmm0, %xmm0
404; BDVER-NEXT:    vfmsubps (%rdi), %xmm1, %xmm0, %xmm0
405; BDVER-NEXT:    vfmsubps %xmm1, (%rdi), %xmm0, %xmm0
406; BDVER-NEXT:    #NO_APP
407; BDVER-NEXT:    retq
408  tail call void asm "vfmsubps $2, $1, $0, $0 \0A\09 vfmsubps $3, $1, $0, $0 \0A\09 vfmsubps $1, $3, $0, $0", "x,x,x,*m"(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) nounwind
409  ret void
410}
411
412define void @test_vfmsubps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, <8 x float> *%a3) optsize {
413; GENERIC-LABEL: test_vfmsubps_256:
414; GENERIC:       # %bb.0:
415; GENERIC-NEXT:    #APP
416; GENERIC-NEXT:    vfmsubps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [5:0.50]
417; GENERIC-NEXT:    vfmsubps (%rdi), %ymm1, %ymm0, %ymm0 # sched: [10:0.50]
418; GENERIC-NEXT:    vfmsubps %ymm1, (%rdi), %ymm0, %ymm0 # sched: [10:0.50]
419; GENERIC-NEXT:    #NO_APP
420; GENERIC-NEXT:    vzeroupper # sched: [100:0.33]
421; GENERIC-NEXT:    retq # sched: [1:1.00]
422;
423; BDVER-LABEL: test_vfmsubps_256:
424; BDVER:       # %bb.0:
425; BDVER-NEXT:    #APP
426; BDVER-NEXT:    vfmsubps %ymm2, %ymm1, %ymm0, %ymm0
427; BDVER-NEXT:    vfmsubps (%rdi), %ymm1, %ymm0, %ymm0
428; BDVER-NEXT:    vfmsubps %ymm1, (%rdi), %ymm0, %ymm0
429; BDVER-NEXT:    #NO_APP
430; BDVER-NEXT:    vzeroupper
431; BDVER-NEXT:    retq
432  tail call void asm "vfmsubps $2, $1, $0, $0 \0A\09 vfmsubps $3, $1, $0, $0 \0A\09 vfmsubps $1, $3, $0, $0", "x,x,x,*m"(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, <8 x float> *%a3) nounwind
433  ret void
434}
435
436define void @test_vfmsubsd_128(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) optsize {
437; GENERIC-LABEL: test_vfmsubsd_128:
438; GENERIC:       # %bb.0:
439; GENERIC-NEXT:    #APP
440; GENERIC-NEXT:    vfmsubsd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
441; GENERIC-NEXT:    vfmsubsd (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
442; GENERIC-NEXT:    vfmsubsd %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
443; GENERIC-NEXT:    #NO_APP
444; GENERIC-NEXT:    retq # sched: [1:1.00]
445;
446; BDVER-LABEL: test_vfmsubsd_128:
447; BDVER:       # %bb.0:
448; BDVER-NEXT:    #APP
449; BDVER-NEXT:    vfmsubsd %xmm2, %xmm1, %xmm0, %xmm0
450; BDVER-NEXT:    vfmsubsd (%rdi), %xmm1, %xmm0, %xmm0
451; BDVER-NEXT:    vfmsubsd %xmm1, (%rdi), %xmm0, %xmm0
452; BDVER-NEXT:    #NO_APP
453; BDVER-NEXT:    retq
454  tail call void asm "vfmsubsd $2, $1, $0, $0 \0A\09 vfmsubsd $3, $1, $0, $0 \0A\09 vfmsubsd $1, $3, $0, $0", "x,x,x,*m"(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) nounwind
455  ret void
456}
457
458define void @test_vfmsubss_128(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) optsize {
459; GENERIC-LABEL: test_vfmsubss_128:
460; GENERIC:       # %bb.0:
461; GENERIC-NEXT:    #APP
462; GENERIC-NEXT:    vfmsubss %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
463; GENERIC-NEXT:    vfmsubss (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
464; GENERIC-NEXT:    vfmsubss %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
465; GENERIC-NEXT:    #NO_APP
466; GENERIC-NEXT:    retq # sched: [1:1.00]
467;
468; BDVER-LABEL: test_vfmsubss_128:
469; BDVER:       # %bb.0:
470; BDVER-NEXT:    #APP
471; BDVER-NEXT:    vfmsubss %xmm2, %xmm1, %xmm0, %xmm0
472; BDVER-NEXT:    vfmsubss (%rdi), %xmm1, %xmm0, %xmm0
473; BDVER-NEXT:    vfmsubss %xmm1, (%rdi), %xmm0, %xmm0
474; BDVER-NEXT:    #NO_APP
475; BDVER-NEXT:    retq
476  tail call void asm "vfmsubss $2, $1, $0, $0 \0A\09 vfmsubss $3, $1, $0, $0 \0A\09 vfmsubss $1, $3, $0, $0", "x,x,x,*m"(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) nounwind
477  ret void
478}
479
480;
481; VFNMADD
482;
483
484define void @test_vfnmaddpd_128(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) optsize {
485; GENERIC-LABEL: test_vfnmaddpd_128:
486; GENERIC:       # %bb.0:
487; GENERIC-NEXT:    #APP
488; GENERIC-NEXT:    vfnmaddpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
489; GENERIC-NEXT:    vfnmaddpd (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
490; GENERIC-NEXT:    vfnmaddpd %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
491; GENERIC-NEXT:    #NO_APP
492; GENERIC-NEXT:    retq # sched: [1:1.00]
493;
494; BDVER-LABEL: test_vfnmaddpd_128:
495; BDVER:       # %bb.0:
496; BDVER-NEXT:    #APP
497; BDVER-NEXT:    vfnmaddpd %xmm2, %xmm1, %xmm0, %xmm0
498; BDVER-NEXT:    vfnmaddpd (%rdi), %xmm1, %xmm0, %xmm0
499; BDVER-NEXT:    vfnmaddpd %xmm1, (%rdi), %xmm0, %xmm0
500; BDVER-NEXT:    #NO_APP
501; BDVER-NEXT:    retq
502  tail call void asm "vfnmaddpd $2, $1, $0, $0 \0A\09 vfnmaddpd $3, $1, $0, $0 \0A\09 vfnmaddpd $1, $3, $0, $0", "x,x,x,*m"(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) nounwind
503  ret void
504}
505
506define void @test_vfnmaddpd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, <4 x double> *%a3) optsize {
507; GENERIC-LABEL: test_vfnmaddpd_256:
508; GENERIC:       # %bb.0:
509; GENERIC-NEXT:    #APP
510; GENERIC-NEXT:    vfnmaddpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [5:0.50]
511; GENERIC-NEXT:    vfnmaddpd (%rdi), %ymm1, %ymm0, %ymm0 # sched: [10:0.50]
512; GENERIC-NEXT:    vfnmaddpd %ymm1, (%rdi), %ymm0, %ymm0 # sched: [10:0.50]
513; GENERIC-NEXT:    #NO_APP
514; GENERIC-NEXT:    vzeroupper # sched: [100:0.33]
515; GENERIC-NEXT:    retq # sched: [1:1.00]
516;
517; BDVER-LABEL: test_vfnmaddpd_256:
518; BDVER:       # %bb.0:
519; BDVER-NEXT:    #APP
520; BDVER-NEXT:    vfnmaddpd %ymm2, %ymm1, %ymm0, %ymm0
521; BDVER-NEXT:    vfnmaddpd (%rdi), %ymm1, %ymm0, %ymm0
522; BDVER-NEXT:    vfnmaddpd %ymm1, (%rdi), %ymm0, %ymm0
523; BDVER-NEXT:    #NO_APP
524; BDVER-NEXT:    vzeroupper
525; BDVER-NEXT:    retq
526  tail call void asm "vfnmaddpd $2, $1, $0, $0 \0A\09 vfnmaddpd $3, $1, $0, $0 \0A\09 vfnmaddpd $1, $3, $0, $0", "x,x,x,*m"(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, <4 x double> *%a3) nounwind
527  ret void
528}
529
530define void @test_vfnmaddps_128(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) optsize {
531; GENERIC-LABEL: test_vfnmaddps_128:
532; GENERIC:       # %bb.0:
533; GENERIC-NEXT:    #APP
534; GENERIC-NEXT:    vfnmaddps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
535; GENERIC-NEXT:    vfnmaddps (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
536; GENERIC-NEXT:    vfnmaddps %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
537; GENERIC-NEXT:    #NO_APP
538; GENERIC-NEXT:    retq # sched: [1:1.00]
539;
540; BDVER-LABEL: test_vfnmaddps_128:
541; BDVER:       # %bb.0:
542; BDVER-NEXT:    #APP
543; BDVER-NEXT:    vfnmaddps %xmm2, %xmm1, %xmm0, %xmm0
544; BDVER-NEXT:    vfnmaddps (%rdi), %xmm1, %xmm0, %xmm0
545; BDVER-NEXT:    vfnmaddps %xmm1, (%rdi), %xmm0, %xmm0
546; BDVER-NEXT:    #NO_APP
547; BDVER-NEXT:    retq
548  tail call void asm "vfnmaddps $2, $1, $0, $0 \0A\09 vfnmaddps $3, $1, $0, $0 \0A\09 vfnmaddps $1, $3, $0, $0", "x,x,x,*m"(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) nounwind
549  ret void
550}
551
552define void @test_vfnmaddps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, <8 x float> *%a3) optsize {
553; GENERIC-LABEL: test_vfnmaddps_256:
554; GENERIC:       # %bb.0:
555; GENERIC-NEXT:    #APP
556; GENERIC-NEXT:    vfnmaddps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [5:0.50]
557; GENERIC-NEXT:    vfnmaddps (%rdi), %ymm1, %ymm0, %ymm0 # sched: [10:0.50]
558; GENERIC-NEXT:    vfnmaddps %ymm1, (%rdi), %ymm0, %ymm0 # sched: [10:0.50]
559; GENERIC-NEXT:    #NO_APP
560; GENERIC-NEXT:    vzeroupper # sched: [100:0.33]
561; GENERIC-NEXT:    retq # sched: [1:1.00]
562;
563; BDVER-LABEL: test_vfnmaddps_256:
564; BDVER:       # %bb.0:
565; BDVER-NEXT:    #APP
566; BDVER-NEXT:    vfnmaddps %ymm2, %ymm1, %ymm0, %ymm0
567; BDVER-NEXT:    vfnmaddps (%rdi), %ymm1, %ymm0, %ymm0
568; BDVER-NEXT:    vfnmaddps %ymm1, (%rdi), %ymm0, %ymm0
569; BDVER-NEXT:    #NO_APP
570; BDVER-NEXT:    vzeroupper
571; BDVER-NEXT:    retq
572  tail call void asm "vfnmaddps $2, $1, $0, $0 \0A\09 vfnmaddps $3, $1, $0, $0 \0A\09 vfnmaddps $1, $3, $0, $0", "x,x,x,*m"(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, <8 x float> *%a3) nounwind
573  ret void
574}
575
576define void @test_vfnmaddsd_128(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) optsize {
577; GENERIC-LABEL: test_vfnmaddsd_128:
578; GENERIC:       # %bb.0:
579; GENERIC-NEXT:    #APP
580; GENERIC-NEXT:    vfnmaddsd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
581; GENERIC-NEXT:    vfnmaddsd (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
582; GENERIC-NEXT:    vfnmaddsd %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
583; GENERIC-NEXT:    #NO_APP
584; GENERIC-NEXT:    retq # sched: [1:1.00]
585;
586; BDVER-LABEL: test_vfnmaddsd_128:
587; BDVER:       # %bb.0:
588; BDVER-NEXT:    #APP
589; BDVER-NEXT:    vfnmaddsd %xmm2, %xmm1, %xmm0, %xmm0
590; BDVER-NEXT:    vfnmaddsd (%rdi), %xmm1, %xmm0, %xmm0
591; BDVER-NEXT:    vfnmaddsd %xmm1, (%rdi), %xmm0, %xmm0
592; BDVER-NEXT:    #NO_APP
593; BDVER-NEXT:    retq
594  tail call void asm "vfnmaddsd $2, $1, $0, $0 \0A\09 vfnmaddsd $3, $1, $0, $0 \0A\09 vfnmaddsd $1, $3, $0, $0", "x,x,x,*m"(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) nounwind
595  ret void
596}
597
598define void @test_vfnmaddss_128(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) optsize {
599; GENERIC-LABEL: test_vfnmaddss_128:
600; GENERIC:       # %bb.0:
601; GENERIC-NEXT:    #APP
602; GENERIC-NEXT:    vfnmaddss %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
603; GENERIC-NEXT:    vfnmaddss (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
604; GENERIC-NEXT:    vfnmaddss %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
605; GENERIC-NEXT:    #NO_APP
606; GENERIC-NEXT:    retq # sched: [1:1.00]
607;
608; BDVER-LABEL: test_vfnmaddss_128:
609; BDVER:       # %bb.0:
610; BDVER-NEXT:    #APP
611; BDVER-NEXT:    vfnmaddss %xmm2, %xmm1, %xmm0, %xmm0
612; BDVER-NEXT:    vfnmaddss (%rdi), %xmm1, %xmm0, %xmm0
613; BDVER-NEXT:    vfnmaddss %xmm1, (%rdi), %xmm0, %xmm0
614; BDVER-NEXT:    #NO_APP
615; BDVER-NEXT:    retq
616  tail call void asm "vfnmaddss $2, $1, $0, $0 \0A\09 vfnmaddss $3, $1, $0, $0 \0A\09 vfnmaddss $1, $3, $0, $0", "x,x,x,*m"(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) nounwind
617  ret void
618}
619
620;
621; VFNMSUB
622;
623
624define void @test_vfnmsubpd_128(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) optsize {
625; GENERIC-LABEL: test_vfnmsubpd_128:
626; GENERIC:       # %bb.0:
627; GENERIC-NEXT:    #APP
628; GENERIC-NEXT:    vfnmsubpd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
629; GENERIC-NEXT:    vfnmsubpd (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
630; GENERIC-NEXT:    vfnmsubpd %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
631; GENERIC-NEXT:    #NO_APP
632; GENERIC-NEXT:    retq # sched: [1:1.00]
633;
634; BDVER-LABEL: test_vfnmsubpd_128:
635; BDVER:       # %bb.0:
636; BDVER-NEXT:    #APP
637; BDVER-NEXT:    vfnmsubpd %xmm2, %xmm1, %xmm0, %xmm0
638; BDVER-NEXT:    vfnmsubpd (%rdi), %xmm1, %xmm0, %xmm0
639; BDVER-NEXT:    vfnmsubpd %xmm1, (%rdi), %xmm0, %xmm0
640; BDVER-NEXT:    #NO_APP
641; BDVER-NEXT:    retq
642  tail call void asm "vfnmsubpd $2, $1, $0, $0 \0A\09 vfnmsubpd $3, $1, $0, $0 \0A\09 vfnmsubpd $1, $3, $0, $0", "x,x,x,*m"(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) nounwind
643  ret void
644}
645
646define void @test_vfnmsubpd_256(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, <4 x double> *%a3) optsize {
647; GENERIC-LABEL: test_vfnmsubpd_256:
648; GENERIC:       # %bb.0:
649; GENERIC-NEXT:    #APP
650; GENERIC-NEXT:    vfnmsubpd %ymm2, %ymm1, %ymm0, %ymm0 # sched: [5:0.50]
651; GENERIC-NEXT:    vfnmsubpd (%rdi), %ymm1, %ymm0, %ymm0 # sched: [10:0.50]
652; GENERIC-NEXT:    vfnmsubpd %ymm1, (%rdi), %ymm0, %ymm0 # sched: [10:0.50]
653; GENERIC-NEXT:    #NO_APP
654; GENERIC-NEXT:    vzeroupper # sched: [100:0.33]
655; GENERIC-NEXT:    retq # sched: [1:1.00]
656;
657; BDVER-LABEL: test_vfnmsubpd_256:
658; BDVER:       # %bb.0:
659; BDVER-NEXT:    #APP
660; BDVER-NEXT:    vfnmsubpd %ymm2, %ymm1, %ymm0, %ymm0
661; BDVER-NEXT:    vfnmsubpd (%rdi), %ymm1, %ymm0, %ymm0
662; BDVER-NEXT:    vfnmsubpd %ymm1, (%rdi), %ymm0, %ymm0
663; BDVER-NEXT:    #NO_APP
664; BDVER-NEXT:    vzeroupper
665; BDVER-NEXT:    retq
666  tail call void asm "vfnmsubpd $2, $1, $0, $0 \0A\09 vfnmsubpd $3, $1, $0, $0 \0A\09 vfnmsubpd $1, $3, $0, $0", "x,x,x,*m"(<4 x double> %a0, <4 x double> %a1, <4 x double> %a2, <4 x double> *%a3) nounwind
667  ret void
668}
669
670define void @test_vfnmsubps_128(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) optsize {
671; GENERIC-LABEL: test_vfnmsubps_128:
672; GENERIC:       # %bb.0:
673; GENERIC-NEXT:    #APP
674; GENERIC-NEXT:    vfnmsubps %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
675; GENERIC-NEXT:    vfnmsubps (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
676; GENERIC-NEXT:    vfnmsubps %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
677; GENERIC-NEXT:    #NO_APP
678; GENERIC-NEXT:    retq # sched: [1:1.00]
679;
680; BDVER-LABEL: test_vfnmsubps_128:
681; BDVER:       # %bb.0:
682; BDVER-NEXT:    #APP
683; BDVER-NEXT:    vfnmsubps %xmm2, %xmm1, %xmm0, %xmm0
684; BDVER-NEXT:    vfnmsubps (%rdi), %xmm1, %xmm0, %xmm0
685; BDVER-NEXT:    vfnmsubps %xmm1, (%rdi), %xmm0, %xmm0
686; BDVER-NEXT:    #NO_APP
687; BDVER-NEXT:    retq
688  tail call void asm "vfnmsubps $2, $1, $0, $0 \0A\09 vfnmsubps $3, $1, $0, $0 \0A\09 vfnmsubps $1, $3, $0, $0", "x,x,x,*m"(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) nounwind
689  ret void
690}
691
692define void @test_vfnmsubps_256(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, <8 x float> *%a3) optsize {
693; GENERIC-LABEL: test_vfnmsubps_256:
694; GENERIC:       # %bb.0:
695; GENERIC-NEXT:    #APP
696; GENERIC-NEXT:    vfnmsubps %ymm2, %ymm1, %ymm0, %ymm0 # sched: [5:0.50]
697; GENERIC-NEXT:    vfnmsubps (%rdi), %ymm1, %ymm0, %ymm0 # sched: [10:0.50]
698; GENERIC-NEXT:    vfnmsubps %ymm1, (%rdi), %ymm0, %ymm0 # sched: [10:0.50]
699; GENERIC-NEXT:    #NO_APP
700; GENERIC-NEXT:    vzeroupper # sched: [100:0.33]
701; GENERIC-NEXT:    retq # sched: [1:1.00]
702;
703; BDVER-LABEL: test_vfnmsubps_256:
704; BDVER:       # %bb.0:
705; BDVER-NEXT:    #APP
706; BDVER-NEXT:    vfnmsubps %ymm2, %ymm1, %ymm0, %ymm0
707; BDVER-NEXT:    vfnmsubps (%rdi), %ymm1, %ymm0, %ymm0
708; BDVER-NEXT:    vfnmsubps %ymm1, (%rdi), %ymm0, %ymm0
709; BDVER-NEXT:    #NO_APP
710; BDVER-NEXT:    vzeroupper
711; BDVER-NEXT:    retq
712  tail call void asm "vfnmsubps $2, $1, $0, $0 \0A\09 vfnmsubps $3, $1, $0, $0 \0A\09 vfnmsubps $1, $3, $0, $0", "x,x,x,*m"(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, <8 x float> *%a3) nounwind
713  ret void
714}
715
716define void @test_vfnmsubsd_128(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) optsize {
717; GENERIC-LABEL: test_vfnmsubsd_128:
718; GENERIC:       # %bb.0:
719; GENERIC-NEXT:    #APP
720; GENERIC-NEXT:    vfnmsubsd %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
721; GENERIC-NEXT:    vfnmsubsd (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
722; GENERIC-NEXT:    vfnmsubsd %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
723; GENERIC-NEXT:    #NO_APP
724; GENERIC-NEXT:    retq # sched: [1:1.00]
725;
726; BDVER-LABEL: test_vfnmsubsd_128:
727; BDVER:       # %bb.0:
728; BDVER-NEXT:    #APP
729; BDVER-NEXT:    vfnmsubsd %xmm2, %xmm1, %xmm0, %xmm0
730; BDVER-NEXT:    vfnmsubsd (%rdi), %xmm1, %xmm0, %xmm0
731; BDVER-NEXT:    vfnmsubsd %xmm1, (%rdi), %xmm0, %xmm0
732; BDVER-NEXT:    #NO_APP
733; BDVER-NEXT:    retq
734  tail call void asm "vfnmsubsd $2, $1, $0, $0 \0A\09 vfnmsubsd $3, $1, $0, $0 \0A\09 vfnmsubsd $1, $3, $0, $0", "x,x,x,*m"(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> *%a3) nounwind
735  ret void
736}
737
738define void @test_vfnmsubss_128(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) optsize {
739; GENERIC-LABEL: test_vfnmsubss_128:
740; GENERIC:       # %bb.0:
741; GENERIC-NEXT:    #APP
742; GENERIC-NEXT:    vfnmsubss %xmm2, %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
743; GENERIC-NEXT:    vfnmsubss (%rdi), %xmm1, %xmm0, %xmm0 # sched: [10:0.50]
744; GENERIC-NEXT:    vfnmsubss %xmm1, (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
745; GENERIC-NEXT:    #NO_APP
746; GENERIC-NEXT:    retq # sched: [1:1.00]
747;
748; BDVER-LABEL: test_vfnmsubss_128:
749; BDVER:       # %bb.0:
750; BDVER-NEXT:    #APP
751; BDVER-NEXT:    vfnmsubss %xmm2, %xmm1, %xmm0, %xmm0
752; BDVER-NEXT:    vfnmsubss (%rdi), %xmm1, %xmm0, %xmm0
753; BDVER-NEXT:    vfnmsubss %xmm1, (%rdi), %xmm0, %xmm0
754; BDVER-NEXT:    #NO_APP
755; BDVER-NEXT:    retq
756  tail call void asm "vfnmsubss $2, $1, $0, $0 \0A\09 vfnmsubss $3, $1, $0, $0 \0A\09 vfnmsubss $1, $3, $0, $0", "x,x,x,*m"(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, <4 x float> *%a3) nounwind
757  ret void
758}
759