ec8cb3c8787ee7582e53a06351fa88c1428027b2
[lldb.git] / llvm / test / CodeGen / X86 / sse2-schedule.ll
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 | FileCheck %s --check-prefixes=CHECK,GENERIC
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=atom -mattr=-sse3 | FileCheck %s --check-prefixes=CHECK,ATOM
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=slm -mattr=-sse3 | FileCheck %s --check-prefixes=CHECK,SLM
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge -mattr=-sse3 | FileCheck %s --check-prefixes=CHECK,SANDY-SSE
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SANDY
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge -mattr=-sse3 | FileCheck %s --check-prefixes=CHECK,SANDY-SSE
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SANDY
9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell -mattr=-sse3 | FileCheck %s --check-prefixes=CHECK,HASWELL-SSE
10 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,HASWELL
11 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell -mattr=-sse3 | FileCheck %s --check-prefixes=CHECK,BROADWELL-SSE
12 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,BROADWELL
13 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake -mattr=-sse3 | FileCheck %s --check-prefixes=CHECK,SKYLAKE-SSE
14 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SKYLAKE
15 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx -mattr=-sse3 | FileCheck %s --check-prefixes=CHECK,SKX-SSE
16 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SKX
17 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=bdver2 -mattr=-sse3 | FileCheck %s --check-prefixes=CHECK,BDVER2-SSE
18 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=bdver2 -mattr=-avx2,-xop | FileCheck %s --check-prefixes=CHECK,BDVER2
19 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 -mattr=-sse3 | FileCheck %s --check-prefixes=CHECK,BTVER2-SSE
20 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,BTVER2
21 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 -mattr=-sse3 | FileCheck %s --check-prefixes=CHECK,ZNVER1-SSE
22 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,ZNVER1
23
24 define <2 x double> @test_addpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
25 ; GENERIC-LABEL: test_addpd:
26 ; GENERIC:       # %bb.0:
27 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
28 ; GENERIC-NEXT:    addpd (%rdi), %xmm0 # sched: [9:1.00]
29 ; GENERIC-NEXT:    retq # sched: [1:1.00]
30 ;
31 ; ATOM-LABEL: test_addpd:
32 ; ATOM:       # %bb.0:
33 ; ATOM-NEXT:    addpd %xmm1, %xmm0 # sched: [6:3.00]
34 ; ATOM-NEXT:    addpd (%rdi), %xmm0 # sched: [7:3.50]
35 ; ATOM-NEXT:    retq # sched: [79:39.50]
36 ;
37 ; SLM-LABEL: test_addpd:
38 ; SLM:       # %bb.0:
39 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
40 ; SLM-NEXT:    addpd (%rdi), %xmm0 # sched: [6:1.00]
41 ; SLM-NEXT:    retq # sched: [4:1.00]
42 ;
43 ; SANDY-SSE-LABEL: test_addpd:
44 ; SANDY-SSE:       # %bb.0:
45 ; SANDY-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
46 ; SANDY-SSE-NEXT:    addpd (%rdi), %xmm0 # sched: [9:1.00]
47 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
48 ;
49 ; SANDY-LABEL: test_addpd:
50 ; SANDY:       # %bb.0:
51 ; SANDY-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
52 ; SANDY-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
53 ; SANDY-NEXT:    retq # sched: [1:1.00]
54 ;
55 ; HASWELL-SSE-LABEL: test_addpd:
56 ; HASWELL-SSE:       # %bb.0:
57 ; HASWELL-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
58 ; HASWELL-SSE-NEXT:    addpd (%rdi), %xmm0 # sched: [9:1.00]
59 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
60 ;
61 ; HASWELL-LABEL: test_addpd:
62 ; HASWELL:       # %bb.0:
63 ; HASWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
64 ; HASWELL-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
65 ; HASWELL-NEXT:    retq # sched: [7:1.00]
66 ;
67 ; BROADWELL-SSE-LABEL: test_addpd:
68 ; BROADWELL-SSE:       # %bb.0:
69 ; BROADWELL-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
70 ; BROADWELL-SSE-NEXT:    addpd (%rdi), %xmm0 # sched: [8:1.00]
71 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
72 ;
73 ; BROADWELL-LABEL: test_addpd:
74 ; BROADWELL:       # %bb.0:
75 ; BROADWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
76 ; BROADWELL-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
77 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
78 ;
79 ; SKYLAKE-SSE-LABEL: test_addpd:
80 ; SKYLAKE-SSE:       # %bb.0:
81 ; SKYLAKE-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [4:0.50]
82 ; SKYLAKE-SSE-NEXT:    addpd (%rdi), %xmm0 # sched: [10:0.50]
83 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
84 ;
85 ; SKYLAKE-LABEL: test_addpd:
86 ; SKYLAKE:       # %bb.0:
87 ; SKYLAKE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
88 ; SKYLAKE-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
89 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
90 ;
91 ; SKX-SSE-LABEL: test_addpd:
92 ; SKX-SSE:       # %bb.0:
93 ; SKX-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [4:0.50]
94 ; SKX-SSE-NEXT:    addpd (%rdi), %xmm0 # sched: [10:0.50]
95 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
96 ;
97 ; SKX-LABEL: test_addpd:
98 ; SKX:       # %bb.0:
99 ; SKX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
100 ; SKX-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
101 ; SKX-NEXT:    retq # sched: [7:1.00]
102 ;
103 ; BDVER2-SSE-LABEL: test_addpd:
104 ; BDVER2-SSE:       # %bb.0:
105 ; BDVER2-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [5:1.00]
106 ; BDVER2-SSE-NEXT:    addpd (%rdi), %xmm0 # sched: [10:1.00]
107 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
108 ;
109 ; BDVER2-LABEL: test_addpd:
110 ; BDVER2:       # %bb.0:
111 ; BDVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
112 ; BDVER2-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
113 ; BDVER2-NEXT:    retq # sched: [5:1.00]
114 ;
115 ; BTVER2-SSE-LABEL: test_addpd:
116 ; BTVER2-SSE:       # %bb.0:
117 ; BTVER2-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
118 ; BTVER2-SSE-NEXT:    addpd (%rdi), %xmm0 # sched: [8:1.00]
119 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
120 ;
121 ; BTVER2-LABEL: test_addpd:
122 ; BTVER2:       # %bb.0:
123 ; BTVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
124 ; BTVER2-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
125 ; BTVER2-NEXT:    retq # sched: [4:1.00]
126 ;
127 ; ZNVER1-SSE-LABEL: test_addpd:
128 ; ZNVER1-SSE:       # %bb.0:
129 ; ZNVER1-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
130 ; ZNVER1-SSE-NEXT:    addpd (%rdi), %xmm0 # sched: [10:1.00]
131 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
132 ;
133 ; ZNVER1-LABEL: test_addpd:
134 ; ZNVER1:       # %bb.0:
135 ; ZNVER1-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
136 ; ZNVER1-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
137 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
138   %1 = fadd <2 x double> %a0, %a1
139   %2 = load <2 x double>, <2 x double> *%a2, align 16
140   %3 = fadd <2 x double> %1, %2
141   ret <2 x double> %3
142 }
143
144 define double @test_addsd(double %a0, double %a1, double *%a2) {
145 ; GENERIC-LABEL: test_addsd:
146 ; GENERIC:       # %bb.0:
147 ; GENERIC-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
148 ; GENERIC-NEXT:    addsd (%rdi), %xmm0 # sched: [9:1.00]
149 ; GENERIC-NEXT:    retq # sched: [1:1.00]
150 ;
151 ; ATOM-LABEL: test_addsd:
152 ; ATOM:       # %bb.0:
153 ; ATOM-NEXT:    addsd %xmm1, %xmm0 # sched: [5:5.00]
154 ; ATOM-NEXT:    addsd (%rdi), %xmm0 # sched: [5:5.00]
155 ; ATOM-NEXT:    retq # sched: [79:39.50]
156 ;
157 ; SLM-LABEL: test_addsd:
158 ; SLM:       # %bb.0:
159 ; SLM-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
160 ; SLM-NEXT:    addsd (%rdi), %xmm0 # sched: [6:1.00]
161 ; SLM-NEXT:    retq # sched: [4:1.00]
162 ;
163 ; SANDY-SSE-LABEL: test_addsd:
164 ; SANDY-SSE:       # %bb.0:
165 ; SANDY-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
166 ; SANDY-SSE-NEXT:    addsd (%rdi), %xmm0 # sched: [9:1.00]
167 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
168 ;
169 ; SANDY-LABEL: test_addsd:
170 ; SANDY:       # %bb.0:
171 ; SANDY-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
172 ; SANDY-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
173 ; SANDY-NEXT:    retq # sched: [1:1.00]
174 ;
175 ; HASWELL-SSE-LABEL: test_addsd:
176 ; HASWELL-SSE:       # %bb.0:
177 ; HASWELL-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
178 ; HASWELL-SSE-NEXT:    addsd (%rdi), %xmm0 # sched: [8:1.00]
179 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
180 ;
181 ; HASWELL-LABEL: test_addsd:
182 ; HASWELL:       # %bb.0:
183 ; HASWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
184 ; HASWELL-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
185 ; HASWELL-NEXT:    retq # sched: [7:1.00]
186 ;
187 ; BROADWELL-SSE-LABEL: test_addsd:
188 ; BROADWELL-SSE:       # %bb.0:
189 ; BROADWELL-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
190 ; BROADWELL-SSE-NEXT:    addsd (%rdi), %xmm0 # sched: [8:1.00]
191 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
192 ;
193 ; BROADWELL-LABEL: test_addsd:
194 ; BROADWELL:       # %bb.0:
195 ; BROADWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
196 ; BROADWELL-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
197 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
198 ;
199 ; SKYLAKE-SSE-LABEL: test_addsd:
200 ; SKYLAKE-SSE:       # %bb.0:
201 ; SKYLAKE-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [4:0.50]
202 ; SKYLAKE-SSE-NEXT:    addsd (%rdi), %xmm0 # sched: [9:0.50]
203 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
204 ;
205 ; SKYLAKE-LABEL: test_addsd:
206 ; SKYLAKE:       # %bb.0:
207 ; SKYLAKE-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
208 ; SKYLAKE-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
209 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
210 ;
211 ; SKX-SSE-LABEL: test_addsd:
212 ; SKX-SSE:       # %bb.0:
213 ; SKX-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [4:0.50]
214 ; SKX-SSE-NEXT:    addsd (%rdi), %xmm0 # sched: [9:0.50]
215 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
216 ;
217 ; SKX-LABEL: test_addsd:
218 ; SKX:       # %bb.0:
219 ; SKX-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
220 ; SKX-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
221 ; SKX-NEXT:    retq # sched: [7:1.00]
222 ;
223 ; BDVER2-SSE-LABEL: test_addsd:
224 ; BDVER2-SSE:       # %bb.0:
225 ; BDVER2-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [5:1.00]
226 ; BDVER2-SSE-NEXT:    addsd (%rdi), %xmm0 # sched: [10:1.00]
227 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
228 ;
229 ; BDVER2-LABEL: test_addsd:
230 ; BDVER2:       # %bb.0:
231 ; BDVER2-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
232 ; BDVER2-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
233 ; BDVER2-NEXT:    retq # sched: [5:1.00]
234 ;
235 ; BTVER2-SSE-LABEL: test_addsd:
236 ; BTVER2-SSE:       # %bb.0:
237 ; BTVER2-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
238 ; BTVER2-SSE-NEXT:    addsd (%rdi), %xmm0 # sched: [8:1.00]
239 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
240 ;
241 ; BTVER2-LABEL: test_addsd:
242 ; BTVER2:       # %bb.0:
243 ; BTVER2-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
244 ; BTVER2-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
245 ; BTVER2-NEXT:    retq # sched: [4:1.00]
246 ;
247 ; ZNVER1-SSE-LABEL: test_addsd:
248 ; ZNVER1-SSE:       # %bb.0:
249 ; ZNVER1-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
250 ; ZNVER1-SSE-NEXT:    addsd (%rdi), %xmm0 # sched: [10:1.00]
251 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
252 ;
253 ; ZNVER1-LABEL: test_addsd:
254 ; ZNVER1:       # %bb.0:
255 ; ZNVER1-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
256 ; ZNVER1-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
257 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
258   %1 = fadd double %a0, %a1
259   %2 = load double, double *%a2, align 8
260   %3 = fadd double %1, %2
261   ret double %3
262 }
263
264 define <2 x double> @test_andpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
265 ; GENERIC-LABEL: test_andpd:
266 ; GENERIC:       # %bb.0:
267 ; GENERIC-NEXT:    andpd %xmm1, %xmm0 # sched: [1:1.00]
268 ; GENERIC-NEXT:    andpd (%rdi), %xmm0 # sched: [7:1.00]
269 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
270 ; GENERIC-NEXT:    retq # sched: [1:1.00]
271 ;
272 ; ATOM-LABEL: test_andpd:
273 ; ATOM:       # %bb.0:
274 ; ATOM-NEXT:    andpd %xmm1, %xmm0 # sched: [1:0.50]
275 ; ATOM-NEXT:    andpd (%rdi), %xmm0 # sched: [1:1.00]
276 ; ATOM-NEXT:    addpd %xmm1, %xmm0 # sched: [6:3.00]
277 ; ATOM-NEXT:    retq # sched: [79:39.50]
278 ;
279 ; SLM-LABEL: test_andpd:
280 ; SLM:       # %bb.0:
281 ; SLM-NEXT:    andpd %xmm1, %xmm0 # sched: [1:0.50]
282 ; SLM-NEXT:    andpd (%rdi), %xmm0 # sched: [4:1.00]
283 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
284 ; SLM-NEXT:    retq # sched: [4:1.00]
285 ;
286 ; SANDY-SSE-LABEL: test_andpd:
287 ; SANDY-SSE:       # %bb.0:
288 ; SANDY-SSE-NEXT:    andpd %xmm1, %xmm0 # sched: [1:1.00]
289 ; SANDY-SSE-NEXT:    andpd (%rdi), %xmm0 # sched: [7:1.00]
290 ; SANDY-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
291 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
292 ;
293 ; SANDY-LABEL: test_andpd:
294 ; SANDY:       # %bb.0:
295 ; SANDY-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
296 ; SANDY-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
297 ; SANDY-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
298 ; SANDY-NEXT:    retq # sched: [1:1.00]
299 ;
300 ; HASWELL-SSE-LABEL: test_andpd:
301 ; HASWELL-SSE:       # %bb.0:
302 ; HASWELL-SSE-NEXT:    andpd %xmm1, %xmm0 # sched: [1:1.00]
303 ; HASWELL-SSE-NEXT:    andpd (%rdi), %xmm0 # sched: [7:1.00]
304 ; HASWELL-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
305 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
306 ;
307 ; HASWELL-LABEL: test_andpd:
308 ; HASWELL:       # %bb.0:
309 ; HASWELL-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
310 ; HASWELL-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
311 ; HASWELL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
312 ; HASWELL-NEXT:    retq # sched: [7:1.00]
313 ;
314 ; BROADWELL-SSE-LABEL: test_andpd:
315 ; BROADWELL-SSE:       # %bb.0:
316 ; BROADWELL-SSE-NEXT:    andpd %xmm1, %xmm0 # sched: [1:1.00]
317 ; BROADWELL-SSE-NEXT:    andpd (%rdi), %xmm0 # sched: [6:1.00]
318 ; BROADWELL-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
319 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
320 ;
321 ; BROADWELL-LABEL: test_andpd:
322 ; BROADWELL:       # %bb.0:
323 ; BROADWELL-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
324 ; BROADWELL-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
325 ; BROADWELL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
326 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
327 ;
328 ; SKYLAKE-SSE-LABEL: test_andpd:
329 ; SKYLAKE-SSE:       # %bb.0:
330 ; SKYLAKE-SSE-NEXT:    andpd %xmm1, %xmm0 # sched: [1:0.33]
331 ; SKYLAKE-SSE-NEXT:    andpd (%rdi), %xmm0 # sched: [7:0.50]
332 ; SKYLAKE-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [4:0.50]
333 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
334 ;
335 ; SKYLAKE-LABEL: test_andpd:
336 ; SKYLAKE:       # %bb.0:
337 ; SKYLAKE-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
338 ; SKYLAKE-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
339 ; SKYLAKE-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [4:0.50]
340 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
341 ;
342 ; SKX-SSE-LABEL: test_andpd:
343 ; SKX-SSE:       # %bb.0:
344 ; SKX-SSE-NEXT:    andpd %xmm1, %xmm0 # sched: [1:0.33]
345 ; SKX-SSE-NEXT:    andpd (%rdi), %xmm0 # sched: [7:0.50]
346 ; SKX-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [4:0.50]
347 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
348 ;
349 ; SKX-LABEL: test_andpd:
350 ; SKX:       # %bb.0:
351 ; SKX-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
352 ; SKX-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
353 ; SKX-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [4:0.50]
354 ; SKX-NEXT:    retq # sched: [7:1.00]
355 ;
356 ; BDVER2-SSE-LABEL: test_andpd:
357 ; BDVER2-SSE:       # %bb.0:
358 ; BDVER2-SSE-NEXT:    andpd %xmm1, %xmm0 # sched: [2:0.50]
359 ; BDVER2-SSE-NEXT:    andpd (%rdi), %xmm0 # sched: [7:0.50]
360 ; BDVER2-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [5:1.00]
361 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
362 ;
363 ; BDVER2-LABEL: test_andpd:
364 ; BDVER2:       # %bb.0:
365 ; BDVER2-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
366 ; BDVER2-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
367 ; BDVER2-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [5:1.00]
368 ; BDVER2-NEXT:    retq # sched: [5:1.00]
369 ;
370 ; BTVER2-SSE-LABEL: test_andpd:
371 ; BTVER2-SSE:       # %bb.0:
372 ; BTVER2-SSE-NEXT:    andpd %xmm1, %xmm0 # sched: [1:0.50]
373 ; BTVER2-SSE-NEXT:    andpd (%rdi), %xmm0 # sched: [6:1.00]
374 ; BTVER2-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
375 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
376 ;
377 ; BTVER2-LABEL: test_andpd:
378 ; BTVER2:       # %bb.0:
379 ; BTVER2-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
380 ; BTVER2-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
381 ; BTVER2-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
382 ; BTVER2-NEXT:    retq # sched: [4:1.00]
383 ;
384 ; ZNVER1-SSE-LABEL: test_andpd:
385 ; ZNVER1-SSE:       # %bb.0:
386 ; ZNVER1-SSE-NEXT:    andpd %xmm1, %xmm0 # sched: [1:0.25]
387 ; ZNVER1-SSE-NEXT:    andpd (%rdi), %xmm0 # sched: [8:0.50]
388 ; ZNVER1-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
389 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
390 ;
391 ; ZNVER1-LABEL: test_andpd:
392 ; ZNVER1:       # %bb.0:
393 ; ZNVER1-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
394 ; ZNVER1-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
395 ; ZNVER1-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
396 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
397   %1 = bitcast <2 x double> %a0 to <4 x i32>
398   %2 = bitcast <2 x double> %a1 to <4 x i32>
399   %3 = and <4 x i32> %1, %2
400   %4 = load <2 x double>, <2 x double> *%a2, align 16
401   %5 = bitcast <2 x double> %4 to <4 x i32>
402   %6 = and <4 x i32> %3, %5
403   %7 = bitcast <4 x i32> %6 to <2 x double>
404   %8 = fadd <2 x double> %a1, %7
405   ret <2 x double> %8
406 }
407
408 define <2 x double> @test_andnotpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
409 ; GENERIC-LABEL: test_andnotpd:
410 ; GENERIC:       # %bb.0:
411 ; GENERIC-NEXT:    andnpd %xmm1, %xmm0 # sched: [1:1.00]
412 ; GENERIC-NEXT:    andnpd (%rdi), %xmm0 # sched: [7:1.00]
413 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
414 ; GENERIC-NEXT:    retq # sched: [1:1.00]
415 ;
416 ; ATOM-LABEL: test_andnotpd:
417 ; ATOM:       # %bb.0:
418 ; ATOM-NEXT:    andnpd %xmm1, %xmm0 # sched: [1:0.50]
419 ; ATOM-NEXT:    andnpd (%rdi), %xmm0 # sched: [1:1.00]
420 ; ATOM-NEXT:    addpd %xmm1, %xmm0 # sched: [6:3.00]
421 ; ATOM-NEXT:    retq # sched: [79:39.50]
422 ;
423 ; SLM-LABEL: test_andnotpd:
424 ; SLM:       # %bb.0:
425 ; SLM-NEXT:    andnpd %xmm1, %xmm0 # sched: [1:0.50]
426 ; SLM-NEXT:    andnpd (%rdi), %xmm0 # sched: [4:1.00]
427 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
428 ; SLM-NEXT:    retq # sched: [4:1.00]
429 ;
430 ; SANDY-SSE-LABEL: test_andnotpd:
431 ; SANDY-SSE:       # %bb.0:
432 ; SANDY-SSE-NEXT:    andnpd %xmm1, %xmm0 # sched: [1:1.00]
433 ; SANDY-SSE-NEXT:    andnpd (%rdi), %xmm0 # sched: [7:1.00]
434 ; SANDY-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
435 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
436 ;
437 ; SANDY-LABEL: test_andnotpd:
438 ; SANDY:       # %bb.0:
439 ; SANDY-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
440 ; SANDY-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
441 ; SANDY-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
442 ; SANDY-NEXT:    retq # sched: [1:1.00]
443 ;
444 ; HASWELL-SSE-LABEL: test_andnotpd:
445 ; HASWELL-SSE:       # %bb.0:
446 ; HASWELL-SSE-NEXT:    andnpd %xmm1, %xmm0 # sched: [1:1.00]
447 ; HASWELL-SSE-NEXT:    andnpd (%rdi), %xmm0 # sched: [7:1.00]
448 ; HASWELL-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
449 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
450 ;
451 ; HASWELL-LABEL: test_andnotpd:
452 ; HASWELL:       # %bb.0:
453 ; HASWELL-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
454 ; HASWELL-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
455 ; HASWELL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
456 ; HASWELL-NEXT:    retq # sched: [7:1.00]
457 ;
458 ; BROADWELL-SSE-LABEL: test_andnotpd:
459 ; BROADWELL-SSE:       # %bb.0:
460 ; BROADWELL-SSE-NEXT:    andnpd %xmm1, %xmm0 # sched: [1:1.00]
461 ; BROADWELL-SSE-NEXT:    andnpd (%rdi), %xmm0 # sched: [6:1.00]
462 ; BROADWELL-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
463 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
464 ;
465 ; BROADWELL-LABEL: test_andnotpd:
466 ; BROADWELL:       # %bb.0:
467 ; BROADWELL-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
468 ; BROADWELL-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
469 ; BROADWELL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
470 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
471 ;
472 ; SKYLAKE-SSE-LABEL: test_andnotpd:
473 ; SKYLAKE-SSE:       # %bb.0:
474 ; SKYLAKE-SSE-NEXT:    andnpd %xmm1, %xmm0 # sched: [1:0.33]
475 ; SKYLAKE-SSE-NEXT:    andnpd (%rdi), %xmm0 # sched: [7:0.50]
476 ; SKYLAKE-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [4:0.50]
477 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
478 ;
479 ; SKYLAKE-LABEL: test_andnotpd:
480 ; SKYLAKE:       # %bb.0:
481 ; SKYLAKE-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
482 ; SKYLAKE-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
483 ; SKYLAKE-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [4:0.50]
484 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
485 ;
486 ; SKX-SSE-LABEL: test_andnotpd:
487 ; SKX-SSE:       # %bb.0:
488 ; SKX-SSE-NEXT:    andnpd %xmm1, %xmm0 # sched: [1:0.33]
489 ; SKX-SSE-NEXT:    andnpd (%rdi), %xmm0 # sched: [7:0.50]
490 ; SKX-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [4:0.50]
491 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
492 ;
493 ; SKX-LABEL: test_andnotpd:
494 ; SKX:       # %bb.0:
495 ; SKX-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
496 ; SKX-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
497 ; SKX-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [4:0.50]
498 ; SKX-NEXT:    retq # sched: [7:1.00]
499 ;
500 ; BDVER2-SSE-LABEL: test_andnotpd:
501 ; BDVER2-SSE:       # %bb.0:
502 ; BDVER2-SSE-NEXT:    andnpd %xmm1, %xmm0 # sched: [2:0.50]
503 ; BDVER2-SSE-NEXT:    andnpd (%rdi), %xmm0 # sched: [7:0.50]
504 ; BDVER2-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [5:1.00]
505 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
506 ;
507 ; BDVER2-LABEL: test_andnotpd:
508 ; BDVER2:       # %bb.0:
509 ; BDVER2-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
510 ; BDVER2-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
511 ; BDVER2-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [5:1.00]
512 ; BDVER2-NEXT:    retq # sched: [5:1.00]
513 ;
514 ; BTVER2-SSE-LABEL: test_andnotpd:
515 ; BTVER2-SSE:       # %bb.0:
516 ; BTVER2-SSE-NEXT:    andnpd %xmm1, %xmm0 # sched: [1:0.50]
517 ; BTVER2-SSE-NEXT:    andnpd (%rdi), %xmm0 # sched: [6:1.00]
518 ; BTVER2-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
519 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
520 ;
521 ; BTVER2-LABEL: test_andnotpd:
522 ; BTVER2:       # %bb.0:
523 ; BTVER2-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
524 ; BTVER2-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
525 ; BTVER2-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
526 ; BTVER2-NEXT:    retq # sched: [4:1.00]
527 ;
528 ; ZNVER1-SSE-LABEL: test_andnotpd:
529 ; ZNVER1-SSE:       # %bb.0:
530 ; ZNVER1-SSE-NEXT:    andnpd %xmm1, %xmm0 # sched: [1:0.25]
531 ; ZNVER1-SSE-NEXT:    andnpd (%rdi), %xmm0 # sched: [8:0.50]
532 ; ZNVER1-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
533 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
534 ;
535 ; ZNVER1-LABEL: test_andnotpd:
536 ; ZNVER1:       # %bb.0:
537 ; ZNVER1-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
538 ; ZNVER1-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
539 ; ZNVER1-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
540 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
541   %1 = bitcast <2 x double> %a0 to <4 x i32>
542   %2 = bitcast <2 x double> %a1 to <4 x i32>
543   %3 = xor <4 x i32> %1, <i32 -1, i32 -1, i32 -1, i32 -1>
544   %4 = and <4 x i32> %3, %2
545   %5 = load <2 x double>, <2 x double> *%a2, align 16
546   %6 = bitcast <2 x double> %5 to <4 x i32>
547   %7 = xor <4 x i32> %4, <i32 -1, i32 -1, i32 -1, i32 -1>
548   %8 = and <4 x i32> %6, %7
549   %9 = bitcast <4 x i32> %8 to <2 x double>
550   %10 = fadd <2 x double> %a1, %9
551   ret <2 x double> %10
552 }
553
554 define void @test_clflush(i8* %p){
555 ; GENERIC-LABEL: test_clflush:
556 ; GENERIC:       # %bb.0:
557 ; GENERIC-NEXT:    clflush (%rdi) # sched: [5:1.00]
558 ; GENERIC-NEXT:    retq # sched: [1:1.00]
559 ;
560 ; ATOM-LABEL: test_clflush:
561 ; ATOM:       # %bb.0:
562 ; ATOM-NEXT:    clflush (%rdi) # sched: [1:1.00]
563 ; ATOM-NEXT:    nop # sched: [1:0.50]
564 ; ATOM-NEXT:    nop # sched: [1:0.50]
565 ; ATOM-NEXT:    nop # sched: [1:0.50]
566 ; ATOM-NEXT:    nop # sched: [1:0.50]
567 ; ATOM-NEXT:    nop # sched: [1:0.50]
568 ; ATOM-NEXT:    nop # sched: [1:0.50]
569 ; ATOM-NEXT:    retq # sched: [79:39.50]
570 ;
571 ; SLM-LABEL: test_clflush:
572 ; SLM:       # %bb.0:
573 ; SLM-NEXT:    clflush (%rdi) # sched: [3:1.00]
574 ; SLM-NEXT:    retq # sched: [4:1.00]
575 ;
576 ; SANDY-SSE-LABEL: test_clflush:
577 ; SANDY-SSE:       # %bb.0:
578 ; SANDY-SSE-NEXT:    clflush (%rdi) # sched: [5:1.00]
579 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
580 ;
581 ; SANDY-LABEL: test_clflush:
582 ; SANDY:       # %bb.0:
583 ; SANDY-NEXT:    clflush (%rdi) # sched: [5:1.00]
584 ; SANDY-NEXT:    retq # sched: [1:1.00]
585 ;
586 ; HASWELL-SSE-LABEL: test_clflush:
587 ; HASWELL-SSE:       # %bb.0:
588 ; HASWELL-SSE-NEXT:    clflush (%rdi) # sched: [2:1.00]
589 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
590 ;
591 ; HASWELL-LABEL: test_clflush:
592 ; HASWELL:       # %bb.0:
593 ; HASWELL-NEXT:    clflush (%rdi) # sched: [2:1.00]
594 ; HASWELL-NEXT:    retq # sched: [7:1.00]
595 ;
596 ; BROADWELL-SSE-LABEL: test_clflush:
597 ; BROADWELL-SSE:       # %bb.0:
598 ; BROADWELL-SSE-NEXT:    clflush (%rdi) # sched: [2:1.00]
599 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
600 ;
601 ; BROADWELL-LABEL: test_clflush:
602 ; BROADWELL:       # %bb.0:
603 ; BROADWELL-NEXT:    clflush (%rdi) # sched: [2:1.00]
604 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
605 ;
606 ; SKYLAKE-SSE-LABEL: test_clflush:
607 ; SKYLAKE-SSE:       # %bb.0:
608 ; SKYLAKE-SSE-NEXT:    clflush (%rdi) # sched: [2:1.00]
609 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
610 ;
611 ; SKYLAKE-LABEL: test_clflush:
612 ; SKYLAKE:       # %bb.0:
613 ; SKYLAKE-NEXT:    clflush (%rdi) # sched: [2:1.00]
614 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
615 ;
616 ; SKX-SSE-LABEL: test_clflush:
617 ; SKX-SSE:       # %bb.0:
618 ; SKX-SSE-NEXT:    clflush (%rdi) # sched: [2:1.00]
619 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
620 ;
621 ; SKX-LABEL: test_clflush:
622 ; SKX:       # %bb.0:
623 ; SKX-NEXT:    clflush (%rdi) # sched: [2:1.00]
624 ; SKX-NEXT:    retq # sched: [7:1.00]
625 ;
626 ; BDVER2-SSE-LABEL: test_clflush:
627 ; BDVER2-SSE:       # %bb.0:
628 ; BDVER2-SSE-NEXT:    clflush (%rdi) # sched: [5:0.50]
629 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
630 ;
631 ; BDVER2-LABEL: test_clflush:
632 ; BDVER2:       # %bb.0:
633 ; BDVER2-NEXT:    clflush (%rdi) # sched: [5:0.50]
634 ; BDVER2-NEXT:    retq # sched: [5:1.00]
635 ;
636 ; BTVER2-SSE-LABEL: test_clflush:
637 ; BTVER2-SSE:       # %bb.0:
638 ; BTVER2-SSE-NEXT:    clflush (%rdi) # sched: [3:1.00]
639 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
640 ;
641 ; BTVER2-LABEL: test_clflush:
642 ; BTVER2:       # %bb.0:
643 ; BTVER2-NEXT:    clflush (%rdi) # sched: [3:1.00]
644 ; BTVER2-NEXT:    retq # sched: [4:1.00]
645 ;
646 ; ZNVER1-SSE-LABEL: test_clflush:
647 ; ZNVER1-SSE:       # %bb.0:
648 ; ZNVER1-SSE-NEXT:    clflush (%rdi) # sched: [8:0.50]
649 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
650 ;
651 ; ZNVER1-LABEL: test_clflush:
652 ; ZNVER1:       # %bb.0:
653 ; ZNVER1-NEXT:    clflush (%rdi) # sched: [8:0.50]
654 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
655   tail call void @llvm.x86.sse2.clflush(i8* %p)
656   ret void
657 }
658 declare void @llvm.x86.sse2.clflush(i8*) nounwind
659
660 define <2 x double> @test_cmppd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
661 ; GENERIC-LABEL: test_cmppd:
662 ; GENERIC:       # %bb.0:
663 ; GENERIC-NEXT:    cmpeqpd %xmm0, %xmm1 # sched: [3:1.00]
664 ; GENERIC-NEXT:    cmpeqpd (%rdi), %xmm0 # sched: [9:1.00]
665 ; GENERIC-NEXT:    orpd %xmm1, %xmm0 # sched: [1:1.00]
666 ; GENERIC-NEXT:    retq # sched: [1:1.00]
667 ;
668 ; ATOM-LABEL: test_cmppd:
669 ; ATOM:       # %bb.0:
670 ; ATOM-NEXT:    cmpeqpd %xmm0, %xmm1 # sched: [6:3.00]
671 ; ATOM-NEXT:    cmpeqpd (%rdi), %xmm0 # sched: [7:3.50]
672 ; ATOM-NEXT:    orpd %xmm1, %xmm0 # sched: [1:0.50]
673 ; ATOM-NEXT:    retq # sched: [79:39.50]
674 ;
675 ; SLM-LABEL: test_cmppd:
676 ; SLM:       # %bb.0:
677 ; SLM-NEXT:    cmpeqpd %xmm0, %xmm1 # sched: [3:1.00]
678 ; SLM-NEXT:    cmpeqpd (%rdi), %xmm0 # sched: [6:1.00]
679 ; SLM-NEXT:    orpd %xmm1, %xmm0 # sched: [1:0.50]
680 ; SLM-NEXT:    retq # sched: [4:1.00]
681 ;
682 ; SANDY-SSE-LABEL: test_cmppd:
683 ; SANDY-SSE:       # %bb.0:
684 ; SANDY-SSE-NEXT:    cmpeqpd %xmm0, %xmm1 # sched: [3:1.00]
685 ; SANDY-SSE-NEXT:    cmpeqpd (%rdi), %xmm0 # sched: [9:1.00]
686 ; SANDY-SSE-NEXT:    orpd %xmm1, %xmm0 # sched: [1:1.00]
687 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
688 ;
689 ; SANDY-LABEL: test_cmppd:
690 ; SANDY:       # %bb.0:
691 ; SANDY-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
692 ; SANDY-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
693 ; SANDY-NEXT:    vorpd %xmm0, %xmm1, %xmm0 # sched: [1:1.00]
694 ; SANDY-NEXT:    retq # sched: [1:1.00]
695 ;
696 ; HASWELL-SSE-LABEL: test_cmppd:
697 ; HASWELL-SSE:       # %bb.0:
698 ; HASWELL-SSE-NEXT:    cmpeqpd %xmm0, %xmm1 # sched: [3:1.00]
699 ; HASWELL-SSE-NEXT:    cmpeqpd (%rdi), %xmm0 # sched: [9:1.00]
700 ; HASWELL-SSE-NEXT:    orpd %xmm1, %xmm0 # sched: [1:1.00]
701 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
702 ;
703 ; HASWELL-LABEL: test_cmppd:
704 ; HASWELL:       # %bb.0:
705 ; HASWELL-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
706 ; HASWELL-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
707 ; HASWELL-NEXT:    vorpd %xmm0, %xmm1, %xmm0 # sched: [1:1.00]
708 ; HASWELL-NEXT:    retq # sched: [7:1.00]
709 ;
710 ; BROADWELL-SSE-LABEL: test_cmppd:
711 ; BROADWELL-SSE:       # %bb.0:
712 ; BROADWELL-SSE-NEXT:    cmpeqpd %xmm0, %xmm1 # sched: [3:1.00]
713 ; BROADWELL-SSE-NEXT:    cmpeqpd (%rdi), %xmm0 # sched: [8:1.00]
714 ; BROADWELL-SSE-NEXT:    orpd %xmm1, %xmm0 # sched: [1:1.00]
715 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
716 ;
717 ; BROADWELL-LABEL: test_cmppd:
718 ; BROADWELL:       # %bb.0:
719 ; BROADWELL-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
720 ; BROADWELL-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
721 ; BROADWELL-NEXT:    vorpd %xmm0, %xmm1, %xmm0 # sched: [1:1.00]
722 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
723 ;
724 ; SKYLAKE-SSE-LABEL: test_cmppd:
725 ; SKYLAKE-SSE:       # %bb.0:
726 ; SKYLAKE-SSE-NEXT:    cmpeqpd %xmm0, %xmm1 # sched: [4:0.50]
727 ; SKYLAKE-SSE-NEXT:    cmpeqpd (%rdi), %xmm0 # sched: [10:0.50]
728 ; SKYLAKE-SSE-NEXT:    orpd %xmm1, %xmm0 # sched: [1:0.33]
729 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
730 ;
731 ; SKYLAKE-LABEL: test_cmppd:
732 ; SKYLAKE:       # %bb.0:
733 ; SKYLAKE-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [4:0.50]
734 ; SKYLAKE-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
735 ; SKYLAKE-NEXT:    vorpd %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
736 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
737 ;
738 ; SKX-SSE-LABEL: test_cmppd:
739 ; SKX-SSE:       # %bb.0:
740 ; SKX-SSE-NEXT:    cmpeqpd %xmm0, %xmm1 # sched: [4:0.50]
741 ; SKX-SSE-NEXT:    cmpeqpd (%rdi), %xmm0 # sched: [10:0.50]
742 ; SKX-SSE-NEXT:    orpd %xmm1, %xmm0 # sched: [1:0.33]
743 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
744 ;
745 ; SKX-LABEL: test_cmppd:
746 ; SKX:       # %bb.0:
747 ; SKX-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [4:0.50]
748 ; SKX-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
749 ; SKX-NEXT:    vorpd %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
750 ; SKX-NEXT:    retq # sched: [7:1.00]
751 ;
752 ; BDVER2-SSE-LABEL: test_cmppd:
753 ; BDVER2-SSE:       # %bb.0:
754 ; BDVER2-SSE-NEXT:    cmpeqpd %xmm0, %xmm1 # sched: [2:1.00]
755 ; BDVER2-SSE-NEXT:    cmpeqpd (%rdi), %xmm0 # sched: [7:1.00]
756 ; BDVER2-SSE-NEXT:    orpd %xmm1, %xmm0 # sched: [2:0.50]
757 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
758 ;
759 ; BDVER2-LABEL: test_cmppd:
760 ; BDVER2:       # %bb.0:
761 ; BDVER2-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [2:1.00]
762 ; BDVER2-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
763 ; BDVER2-NEXT:    vorpd %xmm0, %xmm1, %xmm0 # sched: [2:0.50]
764 ; BDVER2-NEXT:    retq # sched: [5:1.00]
765 ;
766 ; BTVER2-SSE-LABEL: test_cmppd:
767 ; BTVER2-SSE:       # %bb.0:
768 ; BTVER2-SSE-NEXT:    cmpeqpd %xmm0, %xmm1 # sched: [2:1.00]
769 ; BTVER2-SSE-NEXT:    cmpeqpd (%rdi), %xmm0 # sched: [7:1.00]
770 ; BTVER2-SSE-NEXT:    orpd %xmm1, %xmm0 # sched: [1:0.50]
771 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
772 ;
773 ; BTVER2-LABEL: test_cmppd:
774 ; BTVER2:       # %bb.0:
775 ; BTVER2-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [2:1.00]
776 ; BTVER2-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
777 ; BTVER2-NEXT:    vorpd %xmm0, %xmm1, %xmm0 # sched: [1:0.50]
778 ; BTVER2-NEXT:    retq # sched: [4:1.00]
779 ;
780 ; ZNVER1-SSE-LABEL: test_cmppd:
781 ; ZNVER1-SSE:       # %bb.0:
782 ; ZNVER1-SSE-NEXT:    cmpeqpd %xmm0, %xmm1 # sched: [3:1.00]
783 ; ZNVER1-SSE-NEXT:    cmpeqpd (%rdi), %xmm0 # sched: [10:1.00]
784 ; ZNVER1-SSE-NEXT:    orpd %xmm1, %xmm0 # sched: [1:0.25]
785 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
786 ;
787 ; ZNVER1-LABEL: test_cmppd:
788 ; ZNVER1:       # %bb.0:
789 ; ZNVER1-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
790 ; ZNVER1-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
791 ; ZNVER1-NEXT:    vorpd %xmm0, %xmm1, %xmm0 # sched: [1:0.25]
792 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
793   %1 = fcmp oeq <2 x double> %a0, %a1
794   %2 = load <2 x double>, <2 x double> *%a2, align 16
795   %3 = fcmp oeq <2 x double> %a0, %2
796   %4 = or <2 x i1> %1, %3
797   %5 = sext <2 x i1> %4 to <2 x i64>
798   %6 = bitcast <2 x i64> %5 to <2 x double>
799   ret <2 x double> %6
800 }
801
802 define double @test_cmpsd(double %a0, double %a1, double *%a2) {
803 ; GENERIC-LABEL: test_cmpsd:
804 ; GENERIC:       # %bb.0:
805 ; GENERIC-NEXT:    cmpeqsd %xmm1, %xmm0 # sched: [3:1.00]
806 ; GENERIC-NEXT:    cmpeqsd (%rdi), %xmm0 # sched: [9:1.00]
807 ; GENERIC-NEXT:    retq # sched: [1:1.00]
808 ;
809 ; ATOM-LABEL: test_cmpsd:
810 ; ATOM:       # %bb.0:
811 ; ATOM-NEXT:    cmpeqsd %xmm1, %xmm0 # sched: [5:5.00]
812 ; ATOM-NEXT:    cmpeqsd (%rdi), %xmm0 # sched: [5:5.00]
813 ; ATOM-NEXT:    retq # sched: [79:39.50]
814 ;
815 ; SLM-LABEL: test_cmpsd:
816 ; SLM:       # %bb.0:
817 ; SLM-NEXT:    cmpeqsd %xmm1, %xmm0 # sched: [3:1.00]
818 ; SLM-NEXT:    cmpeqsd (%rdi), %xmm0 # sched: [6:1.00]
819 ; SLM-NEXT:    retq # sched: [4:1.00]
820 ;
821 ; SANDY-SSE-LABEL: test_cmpsd:
822 ; SANDY-SSE:       # %bb.0:
823 ; SANDY-SSE-NEXT:    cmpeqsd %xmm1, %xmm0 # sched: [3:1.00]
824 ; SANDY-SSE-NEXT:    cmpeqsd (%rdi), %xmm0 # sched: [9:1.00]
825 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
826 ;
827 ; SANDY-LABEL: test_cmpsd:
828 ; SANDY:       # %bb.0:
829 ; SANDY-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
830 ; SANDY-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
831 ; SANDY-NEXT:    retq # sched: [1:1.00]
832 ;
833 ; HASWELL-SSE-LABEL: test_cmpsd:
834 ; HASWELL-SSE:       # %bb.0:
835 ; HASWELL-SSE-NEXT:    cmpeqsd %xmm1, %xmm0 # sched: [3:1.00]
836 ; HASWELL-SSE-NEXT:    cmpeqsd (%rdi), %xmm0 # sched: [8:1.00]
837 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
838 ;
839 ; HASWELL-LABEL: test_cmpsd:
840 ; HASWELL:       # %bb.0:
841 ; HASWELL-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
842 ; HASWELL-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
843 ; HASWELL-NEXT:    retq # sched: [7:1.00]
844 ;
845 ; BROADWELL-SSE-LABEL: test_cmpsd:
846 ; BROADWELL-SSE:       # %bb.0:
847 ; BROADWELL-SSE-NEXT:    cmpeqsd %xmm1, %xmm0 # sched: [3:1.00]
848 ; BROADWELL-SSE-NEXT:    cmpeqsd (%rdi), %xmm0 # sched: [8:1.00]
849 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
850 ;
851 ; BROADWELL-LABEL: test_cmpsd:
852 ; BROADWELL:       # %bb.0:
853 ; BROADWELL-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
854 ; BROADWELL-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
855 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
856 ;
857 ; SKYLAKE-SSE-LABEL: test_cmpsd:
858 ; SKYLAKE-SSE:       # %bb.0:
859 ; SKYLAKE-SSE-NEXT:    cmpeqsd %xmm1, %xmm0 # sched: [4:0.50]
860 ; SKYLAKE-SSE-NEXT:    cmpeqsd (%rdi), %xmm0 # sched: [9:0.50]
861 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
862 ;
863 ; SKYLAKE-LABEL: test_cmpsd:
864 ; SKYLAKE:       # %bb.0:
865 ; SKYLAKE-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
866 ; SKYLAKE-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
867 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
868 ;
869 ; SKX-SSE-LABEL: test_cmpsd:
870 ; SKX-SSE:       # %bb.0:
871 ; SKX-SSE-NEXT:    cmpeqsd %xmm1, %xmm0 # sched: [4:0.50]
872 ; SKX-SSE-NEXT:    cmpeqsd (%rdi), %xmm0 # sched: [9:0.50]
873 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
874 ;
875 ; SKX-LABEL: test_cmpsd:
876 ; SKX:       # %bb.0:
877 ; SKX-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
878 ; SKX-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
879 ; SKX-NEXT:    retq # sched: [7:1.00]
880 ;
881 ; BDVER2-SSE-LABEL: test_cmpsd:
882 ; BDVER2-SSE:       # %bb.0:
883 ; BDVER2-SSE-NEXT:    cmpeqsd %xmm1, %xmm0 # sched: [2:1.00]
884 ; BDVER2-SSE-NEXT:    cmpeqsd (%rdi), %xmm0 # sched: [7:1.00]
885 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
886 ;
887 ; BDVER2-LABEL: test_cmpsd:
888 ; BDVER2:       # %bb.0:
889 ; BDVER2-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
890 ; BDVER2-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
891 ; BDVER2-NEXT:    retq # sched: [5:1.00]
892 ;
893 ; BTVER2-SSE-LABEL: test_cmpsd:
894 ; BTVER2-SSE:       # %bb.0:
895 ; BTVER2-SSE-NEXT:    cmpeqsd %xmm1, %xmm0 # sched: [2:1.00]
896 ; BTVER2-SSE-NEXT:    cmpeqsd (%rdi), %xmm0 # sched: [7:1.00]
897 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
898 ;
899 ; BTVER2-LABEL: test_cmpsd:
900 ; BTVER2:       # %bb.0:
901 ; BTVER2-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
902 ; BTVER2-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
903 ; BTVER2-NEXT:    retq # sched: [4:1.00]
904 ;
905 ; ZNVER1-SSE-LABEL: test_cmpsd:
906 ; ZNVER1-SSE:       # %bb.0:
907 ; ZNVER1-SSE-NEXT:    cmpeqsd %xmm1, %xmm0 # sched: [3:1.00]
908 ; ZNVER1-SSE-NEXT:    cmpeqsd (%rdi), %xmm0 # sched: [10:1.00]
909 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
910 ;
911 ; ZNVER1-LABEL: test_cmpsd:
912 ; ZNVER1:       # %bb.0:
913 ; ZNVER1-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
914 ; ZNVER1-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
915 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
916   %1 = insertelement <2 x double> undef, double %a0, i32 0
917   %2 = insertelement <2 x double> undef, double %a1, i32 0
918   %3 = call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %1, <2 x double> %2, i8 0)
919   %4 = load double, double *%a2, align 8
920   %5 = insertelement <2 x double> undef, double %4, i32 0
921   %6 = call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %3, <2 x double> %5, i8 0)
922   %7 = extractelement <2 x double> %6, i32 0
923   ret double %7
924 }
925 declare <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double>, <2 x double>, i8) nounwind readnone
926
927 define i32 @test_comisd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
928 ; GENERIC-LABEL: test_comisd:
929 ; GENERIC:       # %bb.0:
930 ; GENERIC-NEXT:    comisd %xmm1, %xmm0 # sched: [2:1.00]
931 ; GENERIC-NEXT:    setnp %al # sched: [1:0.50]
932 ; GENERIC-NEXT:    sete %cl # sched: [1:0.50]
933 ; GENERIC-NEXT:    andb %al, %cl # sched: [1:0.33]
934 ; GENERIC-NEXT:    comisd (%rdi), %xmm0 # sched: [8:1.00]
935 ; GENERIC-NEXT:    setnp %al # sched: [1:0.50]
936 ; GENERIC-NEXT:    sete %dl # sched: [1:0.50]
937 ; GENERIC-NEXT:    andb %al, %dl # sched: [1:0.33]
938 ; GENERIC-NEXT:    orb %cl, %dl # sched: [1:0.33]
939 ; GENERIC-NEXT:    movzbl %dl, %eax # sched: [1:0.33]
940 ; GENERIC-NEXT:    retq # sched: [1:1.00]
941 ;
942 ; ATOM-LABEL: test_comisd:
943 ; ATOM:       # %bb.0:
944 ; ATOM-NEXT:    comisd %xmm1, %xmm0 # sched: [9:4.50]
945 ; ATOM-NEXT:    setnp %al # sched: [1:0.50]
946 ; ATOM-NEXT:    sete %cl # sched: [1:0.50]
947 ; ATOM-NEXT:    andb %al, %cl # sched: [1:0.50]
948 ; ATOM-NEXT:    comisd (%rdi), %xmm0 # sched: [10:5.00]
949 ; ATOM-NEXT:    setnp %al # sched: [1:0.50]
950 ; ATOM-NEXT:    sete %dl # sched: [1:0.50]
951 ; ATOM-NEXT:    andb %al, %dl # sched: [1:0.50]
952 ; ATOM-NEXT:    orb %cl, %dl # sched: [1:0.50]
953 ; ATOM-NEXT:    movzbl %dl, %eax # sched: [1:1.00]
954 ; ATOM-NEXT:    retq # sched: [79:39.50]
955 ;
956 ; SLM-LABEL: test_comisd:
957 ; SLM:       # %bb.0:
958 ; SLM-NEXT:    comisd %xmm1, %xmm0 # sched: [3:1.00]
959 ; SLM-NEXT:    setnp %al # sched: [1:0.50]
960 ; SLM-NEXT:    sete %cl # sched: [1:0.50]
961 ; SLM-NEXT:    andb %al, %cl # sched: [1:0.50]
962 ; SLM-NEXT:    comisd (%rdi), %xmm0 # sched: [6:1.00]
963 ; SLM-NEXT:    setnp %al # sched: [1:0.50]
964 ; SLM-NEXT:    sete %dl # sched: [1:0.50]
965 ; SLM-NEXT:    andb %al, %dl # sched: [1:0.50]
966 ; SLM-NEXT:    orb %cl, %dl # sched: [1:0.50]
967 ; SLM-NEXT:    movzbl %dl, %eax # sched: [1:0.50]
968 ; SLM-NEXT:    retq # sched: [4:1.00]
969 ;
970 ; SANDY-SSE-LABEL: test_comisd:
971 ; SANDY-SSE:       # %bb.0:
972 ; SANDY-SSE-NEXT:    comisd %xmm1, %xmm0 # sched: [2:1.00]
973 ; SANDY-SSE-NEXT:    setnp %al # sched: [1:0.50]
974 ; SANDY-SSE-NEXT:    sete %cl # sched: [1:0.50]
975 ; SANDY-SSE-NEXT:    andb %al, %cl # sched: [1:0.33]
976 ; SANDY-SSE-NEXT:    comisd (%rdi), %xmm0 # sched: [8:1.00]
977 ; SANDY-SSE-NEXT:    setnp %al # sched: [1:0.50]
978 ; SANDY-SSE-NEXT:    sete %dl # sched: [1:0.50]
979 ; SANDY-SSE-NEXT:    andb %al, %dl # sched: [1:0.33]
980 ; SANDY-SSE-NEXT:    orb %cl, %dl # sched: [1:0.33]
981 ; SANDY-SSE-NEXT:    movzbl %dl, %eax # sched: [1:0.33]
982 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
983 ;
984 ; SANDY-LABEL: test_comisd:
985 ; SANDY:       # %bb.0:
986 ; SANDY-NEXT:    vcomisd %xmm1, %xmm0 # sched: [2:1.00]
987 ; SANDY-NEXT:    setnp %al # sched: [1:0.50]
988 ; SANDY-NEXT:    sete %cl # sched: [1:0.50]
989 ; SANDY-NEXT:    andb %al, %cl # sched: [1:0.33]
990 ; SANDY-NEXT:    vcomisd (%rdi), %xmm0 # sched: [8:1.00]
991 ; SANDY-NEXT:    setnp %al # sched: [1:0.50]
992 ; SANDY-NEXT:    sete %dl # sched: [1:0.50]
993 ; SANDY-NEXT:    andb %al, %dl # sched: [1:0.33]
994 ; SANDY-NEXT:    orb %cl, %dl # sched: [1:0.33]
995 ; SANDY-NEXT:    movzbl %dl, %eax # sched: [1:0.33]
996 ; SANDY-NEXT:    retq # sched: [1:1.00]
997 ;
998 ; HASWELL-SSE-LABEL: test_comisd:
999 ; HASWELL-SSE:       # %bb.0:
1000 ; HASWELL-SSE-NEXT:    comisd %xmm1, %xmm0 # sched: [3:1.00]
1001 ; HASWELL-SSE-NEXT:    setnp %al # sched: [1:0.50]
1002 ; HASWELL-SSE-NEXT:    sete %cl # sched: [1:0.50]
1003 ; HASWELL-SSE-NEXT:    andb %al, %cl # sched: [1:0.25]
1004 ; HASWELL-SSE-NEXT:    comisd (%rdi), %xmm0 # sched: [8:1.00]
1005 ; HASWELL-SSE-NEXT:    setnp %al # sched: [1:0.50]
1006 ; HASWELL-SSE-NEXT:    sete %dl # sched: [1:0.50]
1007 ; HASWELL-SSE-NEXT:    andb %al, %dl # sched: [1:0.25]
1008 ; HASWELL-SSE-NEXT:    orb %cl, %dl # sched: [1:0.25]
1009 ; HASWELL-SSE-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
1010 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1011 ;
1012 ; HASWELL-LABEL: test_comisd:
1013 ; HASWELL:       # %bb.0:
1014 ; HASWELL-NEXT:    vcomisd %xmm1, %xmm0 # sched: [3:1.00]
1015 ; HASWELL-NEXT:    setnp %al # sched: [1:0.50]
1016 ; HASWELL-NEXT:    sete %cl # sched: [1:0.50]
1017 ; HASWELL-NEXT:    andb %al, %cl # sched: [1:0.25]
1018 ; HASWELL-NEXT:    vcomisd (%rdi), %xmm0 # sched: [8:1.00]
1019 ; HASWELL-NEXT:    setnp %al # sched: [1:0.50]
1020 ; HASWELL-NEXT:    sete %dl # sched: [1:0.50]
1021 ; HASWELL-NEXT:    andb %al, %dl # sched: [1:0.25]
1022 ; HASWELL-NEXT:    orb %cl, %dl # sched: [1:0.25]
1023 ; HASWELL-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
1024 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1025 ;
1026 ; BROADWELL-SSE-LABEL: test_comisd:
1027 ; BROADWELL-SSE:       # %bb.0:
1028 ; BROADWELL-SSE-NEXT:    comisd %xmm1, %xmm0 # sched: [3:1.00]
1029 ; BROADWELL-SSE-NEXT:    setnp %al # sched: [1:0.50]
1030 ; BROADWELL-SSE-NEXT:    sete %cl # sched: [1:0.50]
1031 ; BROADWELL-SSE-NEXT:    andb %al, %cl # sched: [1:0.25]
1032 ; BROADWELL-SSE-NEXT:    comisd (%rdi), %xmm0 # sched: [8:1.00]
1033 ; BROADWELL-SSE-NEXT:    setnp %al # sched: [1:0.50]
1034 ; BROADWELL-SSE-NEXT:    sete %dl # sched: [1:0.50]
1035 ; BROADWELL-SSE-NEXT:    andb %al, %dl # sched: [1:0.25]
1036 ; BROADWELL-SSE-NEXT:    orb %cl, %dl # sched: [1:0.25]
1037 ; BROADWELL-SSE-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
1038 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1039 ;
1040 ; BROADWELL-LABEL: test_comisd:
1041 ; BROADWELL:       # %bb.0:
1042 ; BROADWELL-NEXT:    vcomisd %xmm1, %xmm0 # sched: [3:1.00]
1043 ; BROADWELL-NEXT:    setnp %al # sched: [1:0.50]
1044 ; BROADWELL-NEXT:    sete %cl # sched: [1:0.50]
1045 ; BROADWELL-NEXT:    andb %al, %cl # sched: [1:0.25]
1046 ; BROADWELL-NEXT:    vcomisd (%rdi), %xmm0 # sched: [8:1.00]
1047 ; BROADWELL-NEXT:    setnp %al # sched: [1:0.50]
1048 ; BROADWELL-NEXT:    sete %dl # sched: [1:0.50]
1049 ; BROADWELL-NEXT:    andb %al, %dl # sched: [1:0.25]
1050 ; BROADWELL-NEXT:    orb %cl, %dl # sched: [1:0.25]
1051 ; BROADWELL-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
1052 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1053 ;
1054 ; SKYLAKE-SSE-LABEL: test_comisd:
1055 ; SKYLAKE-SSE:       # %bb.0:
1056 ; SKYLAKE-SSE-NEXT:    comisd %xmm1, %xmm0 # sched: [2:1.00]
1057 ; SKYLAKE-SSE-NEXT:    setnp %al # sched: [1:0.50]
1058 ; SKYLAKE-SSE-NEXT:    sete %cl # sched: [1:0.50]
1059 ; SKYLAKE-SSE-NEXT:    andb %al, %cl # sched: [1:0.25]
1060 ; SKYLAKE-SSE-NEXT:    comisd (%rdi), %xmm0 # sched: [7:1.00]
1061 ; SKYLAKE-SSE-NEXT:    setnp %al # sched: [1:0.50]
1062 ; SKYLAKE-SSE-NEXT:    sete %dl # sched: [1:0.50]
1063 ; SKYLAKE-SSE-NEXT:    andb %al, %dl # sched: [1:0.25]
1064 ; SKYLAKE-SSE-NEXT:    orb %cl, %dl # sched: [1:0.25]
1065 ; SKYLAKE-SSE-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
1066 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1067 ;
1068 ; SKYLAKE-LABEL: test_comisd:
1069 ; SKYLAKE:       # %bb.0:
1070 ; SKYLAKE-NEXT:    vcomisd %xmm1, %xmm0 # sched: [2:1.00]
1071 ; SKYLAKE-NEXT:    setnp %al # sched: [1:0.50]
1072 ; SKYLAKE-NEXT:    sete %cl # sched: [1:0.50]
1073 ; SKYLAKE-NEXT:    andb %al, %cl # sched: [1:0.25]
1074 ; SKYLAKE-NEXT:    vcomisd (%rdi), %xmm0 # sched: [7:1.00]
1075 ; SKYLAKE-NEXT:    setnp %al # sched: [1:0.50]
1076 ; SKYLAKE-NEXT:    sete %dl # sched: [1:0.50]
1077 ; SKYLAKE-NEXT:    andb %al, %dl # sched: [1:0.25]
1078 ; SKYLAKE-NEXT:    orb %cl, %dl # sched: [1:0.25]
1079 ; SKYLAKE-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
1080 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1081 ;
1082 ; SKX-SSE-LABEL: test_comisd:
1083 ; SKX-SSE:       # %bb.0:
1084 ; SKX-SSE-NEXT:    comisd %xmm1, %xmm0 # sched: [2:1.00]
1085 ; SKX-SSE-NEXT:    setnp %al # sched: [1:0.50]
1086 ; SKX-SSE-NEXT:    sete %cl # sched: [1:0.50]
1087 ; SKX-SSE-NEXT:    andb %al, %cl # sched: [1:0.25]
1088 ; SKX-SSE-NEXT:    comisd (%rdi), %xmm0 # sched: [7:1.00]
1089 ; SKX-SSE-NEXT:    setnp %al # sched: [1:0.50]
1090 ; SKX-SSE-NEXT:    sete %dl # sched: [1:0.50]
1091 ; SKX-SSE-NEXT:    andb %al, %dl # sched: [1:0.25]
1092 ; SKX-SSE-NEXT:    orb %cl, %dl # sched: [1:0.25]
1093 ; SKX-SSE-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
1094 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1095 ;
1096 ; SKX-LABEL: test_comisd:
1097 ; SKX:       # %bb.0:
1098 ; SKX-NEXT:    vcomisd %xmm1, %xmm0 # sched: [2:1.00]
1099 ; SKX-NEXT:    setnp %al # sched: [1:0.50]
1100 ; SKX-NEXT:    sete %cl # sched: [1:0.50]
1101 ; SKX-NEXT:    andb %al, %cl # sched: [1:0.25]
1102 ; SKX-NEXT:    vcomisd (%rdi), %xmm0 # sched: [7:1.00]
1103 ; SKX-NEXT:    setnp %al # sched: [1:0.50]
1104 ; SKX-NEXT:    sete %dl # sched: [1:0.50]
1105 ; SKX-NEXT:    andb %al, %dl # sched: [1:0.25]
1106 ; SKX-NEXT:    orb %cl, %dl # sched: [1:0.25]
1107 ; SKX-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
1108 ; SKX-NEXT:    retq # sched: [7:1.00]
1109 ;
1110 ; BDVER2-SSE-LABEL: test_comisd:
1111 ; BDVER2-SSE:       # %bb.0:
1112 ; BDVER2-SSE-NEXT:    comisd %xmm1, %xmm0 # sched: [1:1.00]
1113 ; BDVER2-SSE-NEXT:    setnp %al # sched: [1:0.50]
1114 ; BDVER2-SSE-NEXT:    sete %cl # sched: [1:0.50]
1115 ; BDVER2-SSE-NEXT:    andb %al, %cl # sched: [1:0.50]
1116 ; BDVER2-SSE-NEXT:    comisd (%rdi), %xmm0 # sched: [6:1.00]
1117 ; BDVER2-SSE-NEXT:    setnp %al # sched: [1:0.50]
1118 ; BDVER2-SSE-NEXT:    sete %dl # sched: [1:0.50]
1119 ; BDVER2-SSE-NEXT:    andb %al, %dl # sched: [1:0.50]
1120 ; BDVER2-SSE-NEXT:    orb %cl, %dl # sched: [1:0.50]
1121 ; BDVER2-SSE-NEXT:    movzbl %dl, %eax # sched: [1:0.50]
1122 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1123 ;
1124 ; BDVER2-LABEL: test_comisd:
1125 ; BDVER2:       # %bb.0:
1126 ; BDVER2-NEXT:    vcomisd %xmm1, %xmm0 # sched: [1:1.00]
1127 ; BDVER2-NEXT:    setnp %al # sched: [1:0.50]
1128 ; BDVER2-NEXT:    sete %cl # sched: [1:0.50]
1129 ; BDVER2-NEXT:    andb %al, %cl # sched: [1:0.50]
1130 ; BDVER2-NEXT:    vcomisd (%rdi), %xmm0 # sched: [6:1.00]
1131 ; BDVER2-NEXT:    setnp %al # sched: [1:0.50]
1132 ; BDVER2-NEXT:    sete %dl # sched: [1:0.50]
1133 ; BDVER2-NEXT:    andb %al, %dl # sched: [1:0.50]
1134 ; BDVER2-NEXT:    orb %cl, %dl # sched: [1:0.50]
1135 ; BDVER2-NEXT:    movzbl %dl, %eax # sched: [1:0.50]
1136 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1137 ;
1138 ; BTVER2-SSE-LABEL: test_comisd:
1139 ; BTVER2-SSE:       # %bb.0:
1140 ; BTVER2-SSE-NEXT:    comisd %xmm1, %xmm0 # sched: [3:1.00]
1141 ; BTVER2-SSE-NEXT:    setnp %al # sched: [1:0.50]
1142 ; BTVER2-SSE-NEXT:    sete %cl # sched: [1:0.50]
1143 ; BTVER2-SSE-NEXT:    andb %al, %cl # sched: [1:0.50]
1144 ; BTVER2-SSE-NEXT:    comisd (%rdi), %xmm0 # sched: [8:1.00]
1145 ; BTVER2-SSE-NEXT:    setnp %al # sched: [1:0.50]
1146 ; BTVER2-SSE-NEXT:    sete %dl # sched: [1:0.50]
1147 ; BTVER2-SSE-NEXT:    andb %al, %dl # sched: [1:0.50]
1148 ; BTVER2-SSE-NEXT:    orb %cl, %dl # sched: [1:0.50]
1149 ; BTVER2-SSE-NEXT:    movzbl %dl, %eax # sched: [1:0.50]
1150 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1151 ;
1152 ; BTVER2-LABEL: test_comisd:
1153 ; BTVER2:       # %bb.0:
1154 ; BTVER2-NEXT:    vcomisd %xmm1, %xmm0 # sched: [3:1.00]
1155 ; BTVER2-NEXT:    setnp %al # sched: [1:0.50]
1156 ; BTVER2-NEXT:    sete %cl # sched: [1:0.50]
1157 ; BTVER2-NEXT:    andb %al, %cl # sched: [1:0.50]
1158 ; BTVER2-NEXT:    vcomisd (%rdi), %xmm0 # sched: [8:1.00]
1159 ; BTVER2-NEXT:    setnp %al # sched: [1:0.50]
1160 ; BTVER2-NEXT:    sete %dl # sched: [1:0.50]
1161 ; BTVER2-NEXT:    andb %al, %dl # sched: [1:0.50]
1162 ; BTVER2-NEXT:    orb %cl, %dl # sched: [1:0.50]
1163 ; BTVER2-NEXT:    movzbl %dl, %eax # sched: [1:0.50]
1164 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1165 ;
1166 ; ZNVER1-SSE-LABEL: test_comisd:
1167 ; ZNVER1-SSE:       # %bb.0:
1168 ; ZNVER1-SSE-NEXT:    comisd %xmm1, %xmm0 # sched: [3:1.00]
1169 ; ZNVER1-SSE-NEXT:    setnp %al # sched: [1:0.25]
1170 ; ZNVER1-SSE-NEXT:    sete %cl # sched: [1:0.25]
1171 ; ZNVER1-SSE-NEXT:    andb %al, %cl # sched: [1:0.25]
1172 ; ZNVER1-SSE-NEXT:    comisd (%rdi), %xmm0 # sched: [10:1.00]
1173 ; ZNVER1-SSE-NEXT:    setnp %al # sched: [1:0.25]
1174 ; ZNVER1-SSE-NEXT:    sete %dl # sched: [1:0.25]
1175 ; ZNVER1-SSE-NEXT:    andb %al, %dl # sched: [1:0.25]
1176 ; ZNVER1-SSE-NEXT:    orb %cl, %dl # sched: [1:0.25]
1177 ; ZNVER1-SSE-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
1178 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1179 ;
1180 ; ZNVER1-LABEL: test_comisd:
1181 ; ZNVER1:       # %bb.0:
1182 ; ZNVER1-NEXT:    vcomisd %xmm1, %xmm0 # sched: [3:1.00]
1183 ; ZNVER1-NEXT:    setnp %al # sched: [1:0.25]
1184 ; ZNVER1-NEXT:    sete %cl # sched: [1:0.25]
1185 ; ZNVER1-NEXT:    andb %al, %cl # sched: [1:0.25]
1186 ; ZNVER1-NEXT:    vcomisd (%rdi), %xmm0 # sched: [10:1.00]
1187 ; ZNVER1-NEXT:    setnp %al # sched: [1:0.25]
1188 ; ZNVER1-NEXT:    sete %dl # sched: [1:0.25]
1189 ; ZNVER1-NEXT:    andb %al, %dl # sched: [1:0.25]
1190 ; ZNVER1-NEXT:    orb %cl, %dl # sched: [1:0.25]
1191 ; ZNVER1-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
1192 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1193   %1 = call i32 @llvm.x86.sse2.comieq.sd(<2 x double> %a0, <2 x double> %a1)
1194   %2 = load <2 x double>, <2 x double> *%a2, align 8
1195   %3 = call i32 @llvm.x86.sse2.comieq.sd(<2 x double> %a0, <2 x double> %2)
1196   %4 = or i32 %1, %3
1197   ret i32 %4
1198 }
1199 declare i32 @llvm.x86.sse2.comieq.sd(<2 x double>, <2 x double>) nounwind readnone
1200
1201 define <2 x double> @test_cvtdq2pd(<4 x i32> %a0, <4 x i32> *%a1) {
1202 ; GENERIC-LABEL: test_cvtdq2pd:
1203 ; GENERIC:       # %bb.0:
1204 ; GENERIC-NEXT:    cvtdq2pd %xmm0, %xmm1 # sched: [4:1.00]
1205 ; GENERIC-NEXT:    cvtdq2pd (%rdi), %xmm0 # sched: [10:1.00]
1206 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
1207 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1208 ;
1209 ; ATOM-LABEL: test_cvtdq2pd:
1210 ; ATOM:       # %bb.0:
1211 ; ATOM-NEXT:    cvtdq2pd (%rdi), %xmm1 # sched: [8:4.00]
1212 ; ATOM-NEXT:    cvtdq2pd %xmm0, %xmm0 # sched: [7:3.50]
1213 ; ATOM-NEXT:    addpd %xmm0, %xmm1 # sched: [6:3.00]
1214 ; ATOM-NEXT:    movapd %xmm1, %xmm0 # sched: [1:0.50]
1215 ; ATOM-NEXT:    retq # sched: [79:39.50]
1216 ;
1217 ; SLM-LABEL: test_cvtdq2pd:
1218 ; SLM:       # %bb.0:
1219 ; SLM-NEXT:    cvtdq2pd %xmm0, %xmm1 # sched: [4:0.50]
1220 ; SLM-NEXT:    cvtdq2pd (%rdi), %xmm0 # sched: [7:1.00]
1221 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
1222 ; SLM-NEXT:    retq # sched: [4:1.00]
1223 ;
1224 ; SANDY-SSE-LABEL: test_cvtdq2pd:
1225 ; SANDY-SSE:       # %bb.0:
1226 ; SANDY-SSE-NEXT:    cvtdq2pd %xmm0, %xmm1 # sched: [4:1.00]
1227 ; SANDY-SSE-NEXT:    cvtdq2pd (%rdi), %xmm0 # sched: [10:1.00]
1228 ; SANDY-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
1229 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
1230 ;
1231 ; SANDY-LABEL: test_cvtdq2pd:
1232 ; SANDY:       # %bb.0:
1233 ; SANDY-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [4:1.00]
1234 ; SANDY-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [10:1.00]
1235 ; SANDY-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1236 ; SANDY-NEXT:    retq # sched: [1:1.00]
1237 ;
1238 ; HASWELL-SSE-LABEL: test_cvtdq2pd:
1239 ; HASWELL-SSE:       # %bb.0:
1240 ; HASWELL-SSE-NEXT:    cvtdq2pd %xmm0, %xmm1 # sched: [4:1.00]
1241 ; HASWELL-SSE-NEXT:    cvtdq2pd (%rdi), %xmm0 # sched: [10:1.00]
1242 ; HASWELL-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
1243 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1244 ;
1245 ; HASWELL-LABEL: test_cvtdq2pd:
1246 ; HASWELL:       # %bb.0:
1247 ; HASWELL-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [4:1.00]
1248 ; HASWELL-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [10:1.00]
1249 ; HASWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1250 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1251 ;
1252 ; BROADWELL-SSE-LABEL: test_cvtdq2pd:
1253 ; BROADWELL-SSE:       # %bb.0:
1254 ; BROADWELL-SSE-NEXT:    cvtdq2pd (%rdi), %xmm1 # sched: [9:1.00]
1255 ; BROADWELL-SSE-NEXT:    cvtdq2pd %xmm0, %xmm0 # sched: [4:1.00]
1256 ; BROADWELL-SSE-NEXT:    addpd %xmm0, %xmm1 # sched: [3:1.00]
1257 ; BROADWELL-SSE-NEXT:    movapd %xmm1, %xmm0 # sched: [1:1.00]
1258 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1259 ;
1260 ; BROADWELL-LABEL: test_cvtdq2pd:
1261 ; BROADWELL:       # %bb.0:
1262 ; BROADWELL-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [9:1.00]
1263 ; BROADWELL-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [4:1.00]
1264 ; BROADWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1265 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1266 ;
1267 ; SKYLAKE-SSE-LABEL: test_cvtdq2pd:
1268 ; SKYLAKE-SSE:       # %bb.0:
1269 ; SKYLAKE-SSE-NEXT:    cvtdq2pd %xmm0, %xmm1 # sched: [5:1.00]
1270 ; SKYLAKE-SSE-NEXT:    cvtdq2pd (%rdi), %xmm0 # sched: [11:1.00]
1271 ; SKYLAKE-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [4:0.50]
1272 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1273 ;
1274 ; SKYLAKE-LABEL: test_cvtdq2pd:
1275 ; SKYLAKE:       # %bb.0:
1276 ; SKYLAKE-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [5:1.00]
1277 ; SKYLAKE-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [11:1.00]
1278 ; SKYLAKE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
1279 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1280 ;
1281 ; SKX-SSE-LABEL: test_cvtdq2pd:
1282 ; SKX-SSE:       # %bb.0:
1283 ; SKX-SSE-NEXT:    cvtdq2pd %xmm0, %xmm1 # sched: [4:0.50]
1284 ; SKX-SSE-NEXT:    cvtdq2pd (%rdi), %xmm0 # sched: [11:1.00]
1285 ; SKX-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [4:0.50]
1286 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1287 ;
1288 ; SKX-LABEL: test_cvtdq2pd:
1289 ; SKX:       # %bb.0:
1290 ; SKX-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [4:0.50]
1291 ; SKX-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [11:1.00]
1292 ; SKX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
1293 ; SKX-NEXT:    retq # sched: [7:1.00]
1294 ;
1295 ; BDVER2-SSE-LABEL: test_cvtdq2pd:
1296 ; BDVER2-SSE:       # %bb.0:
1297 ; BDVER2-SSE-NEXT:    cvtdq2pd %xmm0, %xmm1 # sched: [8:1.00]
1298 ; BDVER2-SSE-NEXT:    cvtdq2pd (%rdi), %xmm0 # sched: [13:1.00]
1299 ; BDVER2-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [5:1.00]
1300 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1301 ;
1302 ; BDVER2-LABEL: test_cvtdq2pd:
1303 ; BDVER2:       # %bb.0:
1304 ; BDVER2-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [13:1.00]
1305 ; BDVER2-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [8:1.00]
1306 ; BDVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
1307 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1308 ;
1309 ; BTVER2-SSE-LABEL: test_cvtdq2pd:
1310 ; BTVER2-SSE:       # %bb.0:
1311 ; BTVER2-SSE-NEXT:    cvtdq2pd %xmm0, %xmm1 # sched: [3:1.00]
1312 ; BTVER2-SSE-NEXT:    cvtdq2pd (%rdi), %xmm0 # sched: [8:1.00]
1313 ; BTVER2-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
1314 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1315 ;
1316 ; BTVER2-LABEL: test_cvtdq2pd:
1317 ; BTVER2:       # %bb.0:
1318 ; BTVER2-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [8:1.00]
1319 ; BTVER2-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [3:1.00]
1320 ; BTVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1321 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1322 ;
1323 ; ZNVER1-SSE-LABEL: test_cvtdq2pd:
1324 ; ZNVER1-SSE:       # %bb.0:
1325 ; ZNVER1-SSE-NEXT:    cvtdq2pd %xmm0, %xmm1 # sched: [5:1.00]
1326 ; ZNVER1-SSE-NEXT:    cvtdq2pd (%rdi), %xmm0 # sched: [12:1.00]
1327 ; ZNVER1-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
1328 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1329 ;
1330 ; ZNVER1-LABEL: test_cvtdq2pd:
1331 ; ZNVER1:       # %bb.0:
1332 ; ZNVER1-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [12:1.00]
1333 ; ZNVER1-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [5:1.00]
1334 ; ZNVER1-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1335 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1336   %1 = shufflevector <4 x i32> %a0, <4 x i32> undef, <2 x i32> <i32 0, i32 1>
1337   %2 = sitofp <2 x i32> %1 to <2 x double>
1338   %3 = load <4 x i32>, <4 x i32>*%a1, align 16
1339   %4 = shufflevector <4 x i32> %3, <4 x i32> undef, <2 x i32> <i32 0, i32 1>
1340   %5 = sitofp <2 x i32> %4 to <2 x double>
1341   %6 = fadd <2 x double> %2, %5
1342   ret <2 x double> %6
1343 }
1344
1345 define <4 x float> @test_cvtdq2ps(<4 x i32> %a0, <4 x i32> *%a1) {
1346 ; GENERIC-LABEL: test_cvtdq2ps:
1347 ; GENERIC:       # %bb.0:
1348 ; GENERIC-NEXT:    cvtdq2ps %xmm0, %xmm1 # sched: [3:1.00]
1349 ; GENERIC-NEXT:    cvtdq2ps (%rdi), %xmm0 # sched: [9:1.00]
1350 ; GENERIC-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
1351 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1352 ;
1353 ; ATOM-LABEL: test_cvtdq2ps:
1354 ; ATOM:       # %bb.0:
1355 ; ATOM-NEXT:    cvtdq2ps (%rdi), %xmm1 # sched: [7:3.50]
1356 ; ATOM-NEXT:    cvtdq2ps %xmm0, %xmm0 # sched: [6:3.00]
1357 ; ATOM-NEXT:    addps %xmm0, %xmm1 # sched: [5:5.00]
1358 ; ATOM-NEXT:    movaps %xmm1, %xmm0 # sched: [1:0.50]
1359 ; ATOM-NEXT:    retq # sched: [79:39.50]
1360 ;
1361 ; SLM-LABEL: test_cvtdq2ps:
1362 ; SLM:       # %bb.0:
1363 ; SLM-NEXT:    cvtdq2ps %xmm0, %xmm1 # sched: [4:0.50]
1364 ; SLM-NEXT:    cvtdq2ps (%rdi), %xmm0 # sched: [7:1.00]
1365 ; SLM-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
1366 ; SLM-NEXT:    retq # sched: [4:1.00]
1367 ;
1368 ; SANDY-SSE-LABEL: test_cvtdq2ps:
1369 ; SANDY-SSE:       # %bb.0:
1370 ; SANDY-SSE-NEXT:    cvtdq2ps %xmm0, %xmm1 # sched: [3:1.00]
1371 ; SANDY-SSE-NEXT:    cvtdq2ps (%rdi), %xmm0 # sched: [9:1.00]
1372 ; SANDY-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
1373 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
1374 ;
1375 ; SANDY-LABEL: test_cvtdq2ps:
1376 ; SANDY:       # %bb.0:
1377 ; SANDY-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [3:1.00]
1378 ; SANDY-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [9:1.00]
1379 ; SANDY-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1380 ; SANDY-NEXT:    retq # sched: [1:1.00]
1381 ;
1382 ; HASWELL-SSE-LABEL: test_cvtdq2ps:
1383 ; HASWELL-SSE:       # %bb.0:
1384 ; HASWELL-SSE-NEXT:    cvtdq2ps %xmm0, %xmm1 # sched: [3:1.00]
1385 ; HASWELL-SSE-NEXT:    cvtdq2ps (%rdi), %xmm0 # sched: [9:1.00]
1386 ; HASWELL-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
1387 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1388 ;
1389 ; HASWELL-LABEL: test_cvtdq2ps:
1390 ; HASWELL:       # %bb.0:
1391 ; HASWELL-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [3:1.00]
1392 ; HASWELL-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [9:1.00]
1393 ; HASWELL-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1394 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1395 ;
1396 ; BROADWELL-SSE-LABEL: test_cvtdq2ps:
1397 ; BROADWELL-SSE:       # %bb.0:
1398 ; BROADWELL-SSE-NEXT:    cvtdq2ps %xmm0, %xmm1 # sched: [3:1.00]
1399 ; BROADWELL-SSE-NEXT:    cvtdq2ps (%rdi), %xmm0 # sched: [8:1.00]
1400 ; BROADWELL-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
1401 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1402 ;
1403 ; BROADWELL-LABEL: test_cvtdq2ps:
1404 ; BROADWELL:       # %bb.0:
1405 ; BROADWELL-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [3:1.00]
1406 ; BROADWELL-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [8:1.00]
1407 ; BROADWELL-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1408 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1409 ;
1410 ; SKYLAKE-SSE-LABEL: test_cvtdq2ps:
1411 ; SKYLAKE-SSE:       # %bb.0:
1412 ; SKYLAKE-SSE-NEXT:    cvtdq2ps %xmm0, %xmm1 # sched: [4:0.50]
1413 ; SKYLAKE-SSE-NEXT:    cvtdq2ps (%rdi), %xmm0 # sched: [10:0.50]
1414 ; SKYLAKE-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [4:0.50]
1415 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1416 ;
1417 ; SKYLAKE-LABEL: test_cvtdq2ps:
1418 ; SKYLAKE:       # %bb.0:
1419 ; SKYLAKE-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [4:0.50]
1420 ; SKYLAKE-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [10:0.50]
1421 ; SKYLAKE-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
1422 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1423 ;
1424 ; SKX-SSE-LABEL: test_cvtdq2ps:
1425 ; SKX-SSE:       # %bb.0:
1426 ; SKX-SSE-NEXT:    cvtdq2ps %xmm0, %xmm1 # sched: [4:0.50]
1427 ; SKX-SSE-NEXT:    cvtdq2ps (%rdi), %xmm0 # sched: [10:0.50]
1428 ; SKX-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [4:0.50]
1429 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1430 ;
1431 ; SKX-LABEL: test_cvtdq2ps:
1432 ; SKX:       # %bb.0:
1433 ; SKX-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [4:0.50]
1434 ; SKX-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [10:0.50]
1435 ; SKX-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
1436 ; SKX-NEXT:    retq # sched: [7:1.00]
1437 ;
1438 ; BDVER2-SSE-LABEL: test_cvtdq2ps:
1439 ; BDVER2-SSE:       # %bb.0:
1440 ; BDVER2-SSE-NEXT:    cvtdq2ps %xmm0, %xmm1 # sched: [4:1.00]
1441 ; BDVER2-SSE-NEXT:    cvtdq2ps (%rdi), %xmm0 # sched: [9:1.00]
1442 ; BDVER2-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [5:1.00]
1443 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1444 ;
1445 ; BDVER2-LABEL: test_cvtdq2ps:
1446 ; BDVER2:       # %bb.0:
1447 ; BDVER2-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [9:1.00]
1448 ; BDVER2-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [4:1.00]
1449 ; BDVER2-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
1450 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1451 ;
1452 ; BTVER2-SSE-LABEL: test_cvtdq2ps:
1453 ; BTVER2-SSE:       # %bb.0:
1454 ; BTVER2-SSE-NEXT:    cvtdq2ps %xmm0, %xmm1 # sched: [3:1.00]
1455 ; BTVER2-SSE-NEXT:    cvtdq2ps (%rdi), %xmm0 # sched: [8:1.00]
1456 ; BTVER2-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
1457 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1458 ;
1459 ; BTVER2-LABEL: test_cvtdq2ps:
1460 ; BTVER2:       # %bb.0:
1461 ; BTVER2-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [8:1.00]
1462 ; BTVER2-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [3:1.00]
1463 ; BTVER2-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1464 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1465 ;
1466 ; ZNVER1-SSE-LABEL: test_cvtdq2ps:
1467 ; ZNVER1-SSE:       # %bb.0:
1468 ; ZNVER1-SSE-NEXT:    cvtdq2ps %xmm0, %xmm1 # sched: [5:1.00]
1469 ; ZNVER1-SSE-NEXT:    cvtdq2ps (%rdi), %xmm0 # sched: [12:1.00]
1470 ; ZNVER1-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
1471 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1472 ;
1473 ; ZNVER1-LABEL: test_cvtdq2ps:
1474 ; ZNVER1:       # %bb.0:
1475 ; ZNVER1-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [12:1.00]
1476 ; ZNVER1-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [5:1.00]
1477 ; ZNVER1-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1478 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1479   %1 = sitofp <4 x i32> %a0 to <4 x float>
1480   %2 = load <4 x i32>, <4 x i32>*%a1, align 16
1481   %3 = sitofp <4 x i32> %2 to <4 x float>
1482   %4 = fadd <4 x float> %1, %3
1483   ret <4 x float> %4
1484 }
1485
1486 define <4 x i32> @test_cvtpd2dq(<2 x double> %a0, <2 x double> *%a1) {
1487 ; GENERIC-LABEL: test_cvtpd2dq:
1488 ; GENERIC:       # %bb.0:
1489 ; GENERIC-NEXT:    cvtpd2dq %xmm0, %xmm1 # sched: [4:1.00]
1490 ; GENERIC-NEXT:    cvtpd2dq (%rdi), %xmm0 # sched: [10:1.00]
1491 ; GENERIC-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1492 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1493 ;
1494 ; ATOM-LABEL: test_cvtpd2dq:
1495 ; ATOM:       # %bb.0:
1496 ; ATOM-NEXT:    cvtpd2dq (%rdi), %xmm1 # sched: [8:4.00]
1497 ; ATOM-NEXT:    cvtpd2dq %xmm0, %xmm0 # sched: [7:3.50]
1498 ; ATOM-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
1499 ; ATOM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
1500 ; ATOM-NEXT:    retq # sched: [79:39.50]
1501 ;
1502 ; SLM-LABEL: test_cvtpd2dq:
1503 ; SLM:       # %bb.0:
1504 ; SLM-NEXT:    cvtpd2dq %xmm0, %xmm1 # sched: [4:0.50]
1505 ; SLM-NEXT:    cvtpd2dq (%rdi), %xmm0 # sched: [7:1.00]
1506 ; SLM-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1507 ; SLM-NEXT:    retq # sched: [4:1.00]
1508 ;
1509 ; SANDY-SSE-LABEL: test_cvtpd2dq:
1510 ; SANDY-SSE:       # %bb.0:
1511 ; SANDY-SSE-NEXT:    cvtpd2dq %xmm0, %xmm1 # sched: [4:1.00]
1512 ; SANDY-SSE-NEXT:    cvtpd2dq (%rdi), %xmm0 # sched: [10:1.00]
1513 ; SANDY-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1514 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
1515 ;
1516 ; SANDY-LABEL: test_cvtpd2dq:
1517 ; SANDY:       # %bb.0:
1518 ; SANDY-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [4:1.00]
1519 ; SANDY-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [10:1.00]
1520 ; SANDY-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1521 ; SANDY-NEXT:    retq # sched: [1:1.00]
1522 ;
1523 ; HASWELL-SSE-LABEL: test_cvtpd2dq:
1524 ; HASWELL-SSE:       # %bb.0:
1525 ; HASWELL-SSE-NEXT:    cvtpd2dq %xmm0, %xmm1 # sched: [4:1.00]
1526 ; HASWELL-SSE-NEXT:    cvtpd2dq (%rdi), %xmm0 # sched: [10:1.00]
1527 ; HASWELL-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1528 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1529 ;
1530 ; HASWELL-LABEL: test_cvtpd2dq:
1531 ; HASWELL:       # %bb.0:
1532 ; HASWELL-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [4:1.00]
1533 ; HASWELL-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
1534 ; HASWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1535 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1536 ;
1537 ; BROADWELL-SSE-LABEL: test_cvtpd2dq:
1538 ; BROADWELL-SSE:       # %bb.0:
1539 ; BROADWELL-SSE-NEXT:    cvtpd2dq (%rdi), %xmm1 # sched: [9:1.00]
1540 ; BROADWELL-SSE-NEXT:    cvtpd2dq %xmm0, %xmm0 # sched: [4:1.00]
1541 ; BROADWELL-SSE-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
1542 ; BROADWELL-SSE-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.33]
1543 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1544 ;
1545 ; BROADWELL-LABEL: test_cvtpd2dq:
1546 ; BROADWELL:       # %bb.0:
1547 ; BROADWELL-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [4:1.00]
1548 ; BROADWELL-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
1549 ; BROADWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1550 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1551 ;
1552 ; SKYLAKE-SSE-LABEL: test_cvtpd2dq:
1553 ; SKYLAKE-SSE:       # %bb.0:
1554 ; SKYLAKE-SSE-NEXT:    cvtpd2dq %xmm0, %xmm1 # sched: [5:1.00]
1555 ; SKYLAKE-SSE-NEXT:    cvtpd2dq (%rdi), %xmm0 # sched: [11:1.00]
1556 ; SKYLAKE-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.33]
1557 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1558 ;
1559 ; SKYLAKE-LABEL: test_cvtpd2dq:
1560 ; SKYLAKE:       # %bb.0:
1561 ; SKYLAKE-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [5:1.00]
1562 ; SKYLAKE-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
1563 ; SKYLAKE-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
1564 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1565 ;
1566 ; SKX-SSE-LABEL: test_cvtpd2dq:
1567 ; SKX-SSE:       # %bb.0:
1568 ; SKX-SSE-NEXT:    cvtpd2dq %xmm0, %xmm1 # sched: [5:1.00]
1569 ; SKX-SSE-NEXT:    cvtpd2dq (%rdi), %xmm0 # sched: [11:1.00]
1570 ; SKX-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.33]
1571 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1572 ;
1573 ; SKX-LABEL: test_cvtpd2dq:
1574 ; SKX:       # %bb.0:
1575 ; SKX-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [5:1.00]
1576 ; SKX-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [8:0.50]
1577 ; SKX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
1578 ; SKX-NEXT:    retq # sched: [7:1.00]
1579 ;
1580 ; BDVER2-SSE-LABEL: test_cvtpd2dq:
1581 ; BDVER2-SSE:       # %bb.0:
1582 ; BDVER2-SSE-NEXT:    cvtpd2dq %xmm0, %xmm1 # sched: [8:1.00]
1583 ; BDVER2-SSE-NEXT:    cvtpd2dq (%rdi), %xmm0 # sched: [13:1.00]
1584 ; BDVER2-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [2:0.50]
1585 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1586 ;
1587 ; BDVER2-LABEL: test_cvtpd2dq:
1588 ; BDVER2:       # %bb.0:
1589 ; BDVER2-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [13:1.00]
1590 ; BDVER2-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [8:1.00]
1591 ; BDVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
1592 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1593 ;
1594 ; BTVER2-SSE-LABEL: test_cvtpd2dq:
1595 ; BTVER2-SSE:       # %bb.0:
1596 ; BTVER2-SSE-NEXT:    cvtpd2dq %xmm0, %xmm1 # sched: [3:1.00]
1597 ; BTVER2-SSE-NEXT:    cvtpd2dq (%rdi), %xmm0 # sched: [8:1.00]
1598 ; BTVER2-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1599 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1600 ;
1601 ; BTVER2-LABEL: test_cvtpd2dq:
1602 ; BTVER2:       # %bb.0:
1603 ; BTVER2-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
1604 ; BTVER2-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [3:1.00]
1605 ; BTVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1606 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1607 ;
1608 ; ZNVER1-SSE-LABEL: test_cvtpd2dq:
1609 ; ZNVER1-SSE:       # %bb.0:
1610 ; ZNVER1-SSE-NEXT:    cvtpd2dq %xmm0, %xmm1 # sched: [5:1.00]
1611 ; ZNVER1-SSE-NEXT:    cvtpd2dq (%rdi), %xmm0 # sched: [12:1.00]
1612 ; ZNVER1-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.25]
1613 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1614 ;
1615 ; ZNVER1-LABEL: test_cvtpd2dq:
1616 ; ZNVER1:       # %bb.0:
1617 ; ZNVER1-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [12:1.00]
1618 ; ZNVER1-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [5:1.00]
1619 ; ZNVER1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
1620 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1621   %1 = call <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double> %a0)
1622   %2 = load <2 x double>, <2 x double> *%a1, align 16
1623   %3 = call <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double> %2)
1624   %4 = add <4 x i32> %1, %3
1625   ret <4 x i32> %4
1626 }
1627 declare <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double>) nounwind readnone
1628
1629 define <4 x float> @test_cvtpd2ps(<2 x double> %a0, <2 x double> *%a1) {
1630 ; GENERIC-LABEL: test_cvtpd2ps:
1631 ; GENERIC:       # %bb.0:
1632 ; GENERIC-NEXT:    cvtpd2ps %xmm0, %xmm1 # sched: [4:1.00]
1633 ; GENERIC-NEXT:    cvtpd2ps (%rdi), %xmm0 # sched: [10:1.00]
1634 ; GENERIC-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
1635 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1636 ;
1637 ; ATOM-LABEL: test_cvtpd2ps:
1638 ; ATOM:       # %bb.0:
1639 ; ATOM-NEXT:    cvtpd2ps (%rdi), %xmm1 # sched: [8:4.00]
1640 ; ATOM-NEXT:    cvtpd2ps %xmm0, %xmm0 # sched: [7:3.50]
1641 ; ATOM-NEXT:    addps %xmm0, %xmm1 # sched: [5:5.00]
1642 ; ATOM-NEXT:    movaps %xmm1, %xmm0 # sched: [1:0.50]
1643 ; ATOM-NEXT:    retq # sched: [79:39.50]
1644 ;
1645 ; SLM-LABEL: test_cvtpd2ps:
1646 ; SLM:       # %bb.0:
1647 ; SLM-NEXT:    cvtpd2ps %xmm0, %xmm1 # sched: [4:0.50]
1648 ; SLM-NEXT:    cvtpd2ps (%rdi), %xmm0 # sched: [7:1.00]
1649 ; SLM-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
1650 ; SLM-NEXT:    retq # sched: [4:1.00]
1651 ;
1652 ; SANDY-SSE-LABEL: test_cvtpd2ps:
1653 ; SANDY-SSE:       # %bb.0:
1654 ; SANDY-SSE-NEXT:    cvtpd2ps %xmm0, %xmm1 # sched: [4:1.00]
1655 ; SANDY-SSE-NEXT:    cvtpd2ps (%rdi), %xmm0 # sched: [10:1.00]
1656 ; SANDY-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
1657 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
1658 ;
1659 ; SANDY-LABEL: test_cvtpd2ps:
1660 ; SANDY:       # %bb.0:
1661 ; SANDY-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [4:1.00]
1662 ; SANDY-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [10:1.00]
1663 ; SANDY-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1664 ; SANDY-NEXT:    retq # sched: [1:1.00]
1665 ;
1666 ; HASWELL-SSE-LABEL: test_cvtpd2ps:
1667 ; HASWELL-SSE:       # %bb.0:
1668 ; HASWELL-SSE-NEXT:    cvtpd2ps %xmm0, %xmm1 # sched: [4:1.00]
1669 ; HASWELL-SSE-NEXT:    cvtpd2ps (%rdi), %xmm0 # sched: [10:1.00]
1670 ; HASWELL-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
1671 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1672 ;
1673 ; HASWELL-LABEL: test_cvtpd2ps:
1674 ; HASWELL:       # %bb.0:
1675 ; HASWELL-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [4:1.00]
1676 ; HASWELL-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [8:1.00]
1677 ; HASWELL-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1678 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1679 ;
1680 ; BROADWELL-SSE-LABEL: test_cvtpd2ps:
1681 ; BROADWELL-SSE:       # %bb.0:
1682 ; BROADWELL-SSE-NEXT:    cvtpd2ps (%rdi), %xmm1 # sched: [9:1.00]
1683 ; BROADWELL-SSE-NEXT:    cvtpd2ps %xmm0, %xmm0 # sched: [4:1.00]
1684 ; BROADWELL-SSE-NEXT:    addps %xmm0, %xmm1 # sched: [3:1.00]
1685 ; BROADWELL-SSE-NEXT:    movaps %xmm1, %xmm0 # sched: [1:1.00]
1686 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1687 ;
1688 ; BROADWELL-LABEL: test_cvtpd2ps:
1689 ; BROADWELL:       # %bb.0:
1690 ; BROADWELL-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [4:1.00]
1691 ; BROADWELL-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [8:1.00]
1692 ; BROADWELL-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1693 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1694 ;
1695 ; SKYLAKE-SSE-LABEL: test_cvtpd2ps:
1696 ; SKYLAKE-SSE:       # %bb.0:
1697 ; SKYLAKE-SSE-NEXT:    cvtpd2ps %xmm0, %xmm1 # sched: [5:1.00]
1698 ; SKYLAKE-SSE-NEXT:    cvtpd2ps (%rdi), %xmm0 # sched: [11:1.00]
1699 ; SKYLAKE-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [4:0.50]
1700 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1701 ;
1702 ; SKYLAKE-LABEL: test_cvtpd2ps:
1703 ; SKYLAKE:       # %bb.0:
1704 ; SKYLAKE-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [5:1.00]
1705 ; SKYLAKE-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [8:1.00]
1706 ; SKYLAKE-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
1707 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1708 ;
1709 ; SKX-SSE-LABEL: test_cvtpd2ps:
1710 ; SKX-SSE:       # %bb.0:
1711 ; SKX-SSE-NEXT:    cvtpd2ps %xmm0, %xmm1 # sched: [5:1.00]
1712 ; SKX-SSE-NEXT:    cvtpd2ps (%rdi), %xmm0 # sched: [11:1.00]
1713 ; SKX-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [4:0.50]
1714 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1715 ;
1716 ; SKX-LABEL: test_cvtpd2ps:
1717 ; SKX:       # %bb.0:
1718 ; SKX-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [5:1.00]
1719 ; SKX-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [8:1.00]
1720 ; SKX-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
1721 ; SKX-NEXT:    retq # sched: [7:1.00]
1722 ;
1723 ; BDVER2-SSE-LABEL: test_cvtpd2ps:
1724 ; BDVER2-SSE:       # %bb.0:
1725 ; BDVER2-SSE-NEXT:    cvtpd2ps %xmm0, %xmm1 # sched: [8:1.00]
1726 ; BDVER2-SSE-NEXT:    cvtpd2ps (%rdi), %xmm0 # sched: [13:1.00]
1727 ; BDVER2-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [5:1.00]
1728 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1729 ;
1730 ; BDVER2-LABEL: test_cvtpd2ps:
1731 ; BDVER2:       # %bb.0:
1732 ; BDVER2-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [13:1.00]
1733 ; BDVER2-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [8:1.00]
1734 ; BDVER2-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
1735 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1736 ;
1737 ; BTVER2-SSE-LABEL: test_cvtpd2ps:
1738 ; BTVER2-SSE:       # %bb.0:
1739 ; BTVER2-SSE-NEXT:    cvtpd2ps %xmm0, %xmm1 # sched: [3:1.00]
1740 ; BTVER2-SSE-NEXT:    cvtpd2ps (%rdi), %xmm0 # sched: [8:1.00]
1741 ; BTVER2-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
1742 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1743 ;
1744 ; BTVER2-LABEL: test_cvtpd2ps:
1745 ; BTVER2:       # %bb.0:
1746 ; BTVER2-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [8:1.00]
1747 ; BTVER2-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [3:1.00]
1748 ; BTVER2-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1749 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1750 ;
1751 ; ZNVER1-SSE-LABEL: test_cvtpd2ps:
1752 ; ZNVER1-SSE:       # %bb.0:
1753 ; ZNVER1-SSE-NEXT:    cvtpd2ps %xmm0, %xmm1 # sched: [4:1.00]
1754 ; ZNVER1-SSE-NEXT:    cvtpd2ps (%rdi), %xmm0 # sched: [11:1.00]
1755 ; ZNVER1-SSE-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
1756 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1757 ;
1758 ; ZNVER1-LABEL: test_cvtpd2ps:
1759 ; ZNVER1:       # %bb.0:
1760 ; ZNVER1-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [11:1.00]
1761 ; ZNVER1-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [4:1.00]
1762 ; ZNVER1-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1763 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1764   %1 = call <4 x float> @llvm.x86.sse2.cvtpd2ps(<2 x double> %a0)
1765   %2 = load <2 x double>, <2 x double> *%a1, align 16
1766   %3 = call <4 x float> @llvm.x86.sse2.cvtpd2ps(<2 x double> %2)
1767   %4 = fadd <4 x float> %1, %3
1768   ret <4 x float> %4
1769 }
1770 declare <4 x float> @llvm.x86.sse2.cvtpd2ps(<2 x double>) nounwind readnone
1771
1772 define <4 x i32> @test_cvtps2dq(<4 x float> %a0, <4 x float> *%a1) {
1773 ; GENERIC-LABEL: test_cvtps2dq:
1774 ; GENERIC:       # %bb.0:
1775 ; GENERIC-NEXT:    cvtps2dq %xmm0, %xmm1 # sched: [3:1.00]
1776 ; GENERIC-NEXT:    cvtps2dq (%rdi), %xmm0 # sched: [9:1.00]
1777 ; GENERIC-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1778 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1779 ;
1780 ; ATOM-LABEL: test_cvtps2dq:
1781 ; ATOM:       # %bb.0:
1782 ; ATOM-NEXT:    cvtps2dq (%rdi), %xmm1 # sched: [7:3.50]
1783 ; ATOM-NEXT:    cvtps2dq %xmm0, %xmm0 # sched: [6:3.00]
1784 ; ATOM-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
1785 ; ATOM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
1786 ; ATOM-NEXT:    retq # sched: [79:39.50]
1787 ;
1788 ; SLM-LABEL: test_cvtps2dq:
1789 ; SLM:       # %bb.0:
1790 ; SLM-NEXT:    cvtps2dq %xmm0, %xmm1 # sched: [4:0.50]
1791 ; SLM-NEXT:    cvtps2dq (%rdi), %xmm0 # sched: [7:1.00]
1792 ; SLM-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1793 ; SLM-NEXT:    retq # sched: [4:1.00]
1794 ;
1795 ; SANDY-SSE-LABEL: test_cvtps2dq:
1796 ; SANDY-SSE:       # %bb.0:
1797 ; SANDY-SSE-NEXT:    cvtps2dq %xmm0, %xmm1 # sched: [3:1.00]
1798 ; SANDY-SSE-NEXT:    cvtps2dq (%rdi), %xmm0 # sched: [9:1.00]
1799 ; SANDY-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1800 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
1801 ;
1802 ; SANDY-LABEL: test_cvtps2dq:
1803 ; SANDY:       # %bb.0:
1804 ; SANDY-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [3:1.00]
1805 ; SANDY-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [9:1.00]
1806 ; SANDY-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1807 ; SANDY-NEXT:    retq # sched: [1:1.00]
1808 ;
1809 ; HASWELL-SSE-LABEL: test_cvtps2dq:
1810 ; HASWELL-SSE:       # %bb.0:
1811 ; HASWELL-SSE-NEXT:    cvtps2dq %xmm0, %xmm1 # sched: [3:1.00]
1812 ; HASWELL-SSE-NEXT:    cvtps2dq (%rdi), %xmm0 # sched: [9:1.00]
1813 ; HASWELL-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1814 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1815 ;
1816 ; HASWELL-LABEL: test_cvtps2dq:
1817 ; HASWELL:       # %bb.0:
1818 ; HASWELL-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [3:1.00]
1819 ; HASWELL-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [9:1.00]
1820 ; HASWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1821 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1822 ;
1823 ; BROADWELL-SSE-LABEL: test_cvtps2dq:
1824 ; BROADWELL-SSE:       # %bb.0:
1825 ; BROADWELL-SSE-NEXT:    cvtps2dq %xmm0, %xmm1 # sched: [3:1.00]
1826 ; BROADWELL-SSE-NEXT:    cvtps2dq (%rdi), %xmm0 # sched: [8:1.00]
1827 ; BROADWELL-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1828 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1829 ;
1830 ; BROADWELL-LABEL: test_cvtps2dq:
1831 ; BROADWELL:       # %bb.0:
1832 ; BROADWELL-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [3:1.00]
1833 ; BROADWELL-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [8:1.00]
1834 ; BROADWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1835 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1836 ;
1837 ; SKYLAKE-SSE-LABEL: test_cvtps2dq:
1838 ; SKYLAKE-SSE:       # %bb.0:
1839 ; SKYLAKE-SSE-NEXT:    cvtps2dq %xmm0, %xmm1 # sched: [4:0.50]
1840 ; SKYLAKE-SSE-NEXT:    cvtps2dq (%rdi), %xmm0 # sched: [10:0.50]
1841 ; SKYLAKE-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.33]
1842 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1843 ;
1844 ; SKYLAKE-LABEL: test_cvtps2dq:
1845 ; SKYLAKE:       # %bb.0:
1846 ; SKYLAKE-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [4:0.50]
1847 ; SKYLAKE-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [10:0.50]
1848 ; SKYLAKE-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
1849 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1850 ;
1851 ; SKX-SSE-LABEL: test_cvtps2dq:
1852 ; SKX-SSE:       # %bb.0:
1853 ; SKX-SSE-NEXT:    cvtps2dq %xmm0, %xmm1 # sched: [4:0.50]
1854 ; SKX-SSE-NEXT:    cvtps2dq (%rdi), %xmm0 # sched: [10:0.50]
1855 ; SKX-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.33]
1856 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1857 ;
1858 ; SKX-LABEL: test_cvtps2dq:
1859 ; SKX:       # %bb.0:
1860 ; SKX-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [4:0.50]
1861 ; SKX-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [10:0.50]
1862 ; SKX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
1863 ; SKX-NEXT:    retq # sched: [7:1.00]
1864 ;
1865 ; BDVER2-SSE-LABEL: test_cvtps2dq:
1866 ; BDVER2-SSE:       # %bb.0:
1867 ; BDVER2-SSE-NEXT:    cvtps2dq %xmm0, %xmm1 # sched: [4:1.00]
1868 ; BDVER2-SSE-NEXT:    cvtps2dq (%rdi), %xmm0 # sched: [9:1.00]
1869 ; BDVER2-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [2:0.50]
1870 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
1871 ;
1872 ; BDVER2-LABEL: test_cvtps2dq:
1873 ; BDVER2:       # %bb.0:
1874 ; BDVER2-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [9:1.00]
1875 ; BDVER2-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [4:1.00]
1876 ; BDVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
1877 ; BDVER2-NEXT:    retq # sched: [5:1.00]
1878 ;
1879 ; BTVER2-SSE-LABEL: test_cvtps2dq:
1880 ; BTVER2-SSE:       # %bb.0:
1881 ; BTVER2-SSE-NEXT:    cvtps2dq %xmm0, %xmm1 # sched: [3:1.00]
1882 ; BTVER2-SSE-NEXT:    cvtps2dq (%rdi), %xmm0 # sched: [8:1.00]
1883 ; BTVER2-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1884 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
1885 ;
1886 ; BTVER2-LABEL: test_cvtps2dq:
1887 ; BTVER2:       # %bb.0:
1888 ; BTVER2-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [8:1.00]
1889 ; BTVER2-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [3:1.00]
1890 ; BTVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1891 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1892 ;
1893 ; ZNVER1-SSE-LABEL: test_cvtps2dq:
1894 ; ZNVER1-SSE:       # %bb.0:
1895 ; ZNVER1-SSE-NEXT:    cvtps2dq %xmm0, %xmm1 # sched: [5:1.00]
1896 ; ZNVER1-SSE-NEXT:    cvtps2dq (%rdi), %xmm0 # sched: [12:1.00]
1897 ; ZNVER1-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.25]
1898 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
1899 ;
1900 ; ZNVER1-LABEL: test_cvtps2dq:
1901 ; ZNVER1:       # %bb.0:
1902 ; ZNVER1-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [12:1.00]
1903 ; ZNVER1-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [5:1.00]
1904 ; ZNVER1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
1905 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1906   %1 = call <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float> %a0)
1907   %2 = load <4 x float>, <4 x float> *%a1, align 16
1908   %3 = call <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float> %2)
1909   %4 = add <4 x i32> %1, %3
1910   ret <4 x i32> %4
1911 }
1912 declare <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float>) nounwind readnone
1913
1914 define <2 x double> @test_cvtps2pd(<4 x float> %a0, <4 x float> *%a1) {
1915 ; GENERIC-LABEL: test_cvtps2pd:
1916 ; GENERIC:       # %bb.0:
1917 ; GENERIC-NEXT:    cvtps2pd %xmm0, %xmm1 # sched: [2:1.00]
1918 ; GENERIC-NEXT:    cvtps2pd (%rdi), %xmm0 # sched: [7:1.00]
1919 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
1920 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1921 ;
1922 ; ATOM-LABEL: test_cvtps2pd:
1923 ; ATOM:       # %bb.0:
1924 ; ATOM-NEXT:    cvtps2pd (%rdi), %xmm1 # sched: [8:4.00]
1925 ; ATOM-NEXT:    cvtps2pd %xmm0, %xmm0 # sched: [7:3.50]
1926 ; ATOM-NEXT:    addpd %xmm0, %xmm1 # sched: [6:3.00]
1927 ; ATOM-NEXT:    movapd %xmm1, %xmm0 # sched: [1:0.50]
1928 ; ATOM-NEXT:    retq # sched: [79:39.50]
1929 ;
1930 ; SLM-LABEL: test_cvtps2pd:
1931 ; SLM:       # %bb.0:
1932 ; SLM-NEXT:    cvtps2pd %xmm0, %xmm1 # sched: [4:0.50]
1933 ; SLM-NEXT:    cvtps2pd (%rdi), %xmm0 # sched: [7:1.00]
1934 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
1935 ; SLM-NEXT:    retq # sched: [4:1.00]
1936 ;
1937 ; SANDY-SSE-LABEL: test_cvtps2pd:
1938 ; SANDY-SSE:       # %bb.0:
1939 ; SANDY-SSE-NEXT:    cvtps2pd %xmm0, %xmm1 # sched: [2:1.00]
1940 ; SANDY-SSE-NEXT:    cvtps2pd (%rdi), %xmm0 # sched: [7:1.00]
1941 ; SANDY-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
1942 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
1943 ;
1944 ; SANDY-LABEL: test_cvtps2pd:
1945 ; SANDY:       # %bb.0:
1946 ; SANDY-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [2:1.00]
1947 ; SANDY-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [7:1.00]
1948 ; SANDY-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1949 ; SANDY-NEXT:    retq # sched: [1:1.00]
1950 ;
1951 ; HASWELL-SSE-LABEL: test_cvtps2pd:
1952 ; HASWELL-SSE:       # %bb.0:
1953 ; HASWELL-SSE-NEXT:    cvtps2pd %xmm0, %xmm1 # sched: [2:1.00]
1954 ; HASWELL-SSE-NEXT:    cvtps2pd (%rdi), %xmm0 # sched: [6:1.00]
1955 ; HASWELL-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
1956 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
1957 ;
1958 ; HASWELL-LABEL: test_cvtps2pd:
1959 ; HASWELL:       # %bb.0:
1960 ; HASWELL-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [2:1.00]
1961 ; HASWELL-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [6:1.00]
1962 ; HASWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1963 ; HASWELL-NEXT:    retq # sched: [7:1.00]
1964 ;
1965 ; BROADWELL-SSE-LABEL: test_cvtps2pd:
1966 ; BROADWELL-SSE:       # %bb.0:
1967 ; BROADWELL-SSE-NEXT:    cvtps2pd %xmm0, %xmm1 # sched: [2:1.00]
1968 ; BROADWELL-SSE-NEXT:    cvtps2pd (%rdi), %xmm0 # sched: [6:1.00]
1969 ; BROADWELL-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
1970 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
1971 ;
1972 ; BROADWELL-LABEL: test_cvtps2pd:
1973 ; BROADWELL:       # %bb.0:
1974 ; BROADWELL-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [2:1.00]
1975 ; BROADWELL-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [6:1.00]
1976 ; BROADWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1977 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1978 ;
1979 ; SKYLAKE-SSE-LABEL: test_cvtps2pd:
1980 ; SKYLAKE-SSE:       # %bb.0:
1981 ; SKYLAKE-SSE-NEXT:    cvtps2pd %xmm0, %xmm1 # sched: [5:1.00]
1982 ; SKYLAKE-SSE-NEXT:    cvtps2pd (%rdi), %xmm0 # sched: [9:0.50]
1983 ; SKYLAKE-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [4:0.50]
1984 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
1985 ;
1986 ; SKYLAKE-LABEL: test_cvtps2pd:
1987 ; SKYLAKE:       # %bb.0:
1988 ; SKYLAKE-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [5:1.00]
1989 ; SKYLAKE-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [9:0.50]
1990 ; SKYLAKE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
1991 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1992 ;
1993 ; SKX-SSE-LABEL: test_cvtps2pd:
1994 ; SKX-SSE:       # %bb.0:
1995 ; SKX-SSE-NEXT:    cvtps2pd %xmm0, %xmm1 # sched: [5:1.00]
1996 ; SKX-SSE-NEXT:    cvtps2pd (%rdi), %xmm0 # sched: [9:0.50]
1997 ; SKX-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [4:0.50]
1998 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
1999 ;
2000 ; SKX-LABEL: test_cvtps2pd:
2001 ; SKX:       # %bb.0:
2002 ; SKX-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [5:1.00]
2003 ; SKX-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [9:0.50]
2004 ; SKX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
2005 ; SKX-NEXT:    retq # sched: [7:1.00]
2006 ;
2007 ; BDVER2-SSE-LABEL: test_cvtps2pd:
2008 ; BDVER2-SSE:       # %bb.0:
2009 ; BDVER2-SSE-NEXT:    cvtps2pd %xmm0, %xmm1 # sched: [8:1.00]
2010 ; BDVER2-SSE-NEXT:    cvtps2pd (%rdi), %xmm0 # sched: [13:1.00]
2011 ; BDVER2-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [5:1.00]
2012 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2013 ;
2014 ; BDVER2-LABEL: test_cvtps2pd:
2015 ; BDVER2:       # %bb.0:
2016 ; BDVER2-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [13:1.00]
2017 ; BDVER2-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [8:1.00]
2018 ; BDVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
2019 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2020 ;
2021 ; BTVER2-SSE-LABEL: test_cvtps2pd:
2022 ; BTVER2-SSE:       # %bb.0:
2023 ; BTVER2-SSE-NEXT:    cvtps2pd %xmm0, %xmm1 # sched: [2:1.00]
2024 ; BTVER2-SSE-NEXT:    cvtps2pd (%rdi), %xmm0 # sched: [7:1.00]
2025 ; BTVER2-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
2026 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2027 ;
2028 ; BTVER2-LABEL: test_cvtps2pd:
2029 ; BTVER2:       # %bb.0:
2030 ; BTVER2-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [7:1.00]
2031 ; BTVER2-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [2:1.00]
2032 ; BTVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2033 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2034 ;
2035 ; ZNVER1-SSE-LABEL: test_cvtps2pd:
2036 ; ZNVER1-SSE:       # %bb.0:
2037 ; ZNVER1-SSE-NEXT:    cvtps2pd %xmm0, %xmm1 # sched: [3:1.00]
2038 ; ZNVER1-SSE-NEXT:    cvtps2pd (%rdi), %xmm0 # sched: [10:1.00]
2039 ; ZNVER1-SSE-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
2040 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2041 ;
2042 ; ZNVER1-LABEL: test_cvtps2pd:
2043 ; ZNVER1:       # %bb.0:
2044 ; ZNVER1-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [10:1.00]
2045 ; ZNVER1-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [3:1.00]
2046 ; ZNVER1-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2047 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2048   %1 = shufflevector <4 x float> %a0, <4 x float> undef, <2 x i32> <i32 0, i32 1>
2049   %2 = fpext <2 x float> %1 to <2 x double>
2050   %3 = load <4 x float>, <4 x float> *%a1, align 16
2051   %4 = shufflevector <4 x float> %3, <4 x float> undef, <2 x i32> <i32 0, i32 1>
2052   %5 = fpext <2 x float> %4 to <2 x double>
2053   %6 = fadd <2 x double> %2, %5
2054   ret <2 x double> %6
2055 }
2056
2057 define i32 @test_cvtsd2si(double %a0, double *%a1) {
2058 ; GENERIC-LABEL: test_cvtsd2si:
2059 ; GENERIC:       # %bb.0:
2060 ; GENERIC-NEXT:    cvtsd2si %xmm0, %ecx # sched: [5:1.00]
2061 ; GENERIC-NEXT:    cvtsd2si (%rdi), %eax # sched: [9:1.00]
2062 ; GENERIC-NEXT:    addl %ecx, %eax # sched: [1:0.33]
2063 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2064 ;
2065 ; ATOM-LABEL: test_cvtsd2si:
2066 ; ATOM:       # %bb.0:
2067 ; ATOM-NEXT:    cvtsd2si (%rdi), %eax # sched: [9:4.50]
2068 ; ATOM-NEXT:    cvtsd2si %xmm0, %ecx # sched: [8:4.00]
2069 ; ATOM-NEXT:    addl %ecx, %eax # sched: [1:0.50]
2070 ; ATOM-NEXT:    retq # sched: [79:39.50]
2071 ;
2072 ; SLM-LABEL: test_cvtsd2si:
2073 ; SLM:       # %bb.0:
2074 ; SLM-NEXT:    cvtsd2si (%rdi), %eax # sched: [7:1.00]
2075 ; SLM-NEXT:    cvtsd2si %xmm0, %ecx # sched: [4:0.50]
2076 ; SLM-NEXT:    addl %ecx, %eax # sched: [1:0.50]
2077 ; SLM-NEXT:    retq # sched: [4:1.00]
2078 ;
2079 ; SANDY-SSE-LABEL: test_cvtsd2si:
2080 ; SANDY-SSE:       # %bb.0:
2081 ; SANDY-SSE-NEXT:    cvtsd2si %xmm0, %ecx # sched: [5:1.00]
2082 ; SANDY-SSE-NEXT:    cvtsd2si (%rdi), %eax # sched: [9:1.00]
2083 ; SANDY-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.33]
2084 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2085 ;
2086 ; SANDY-LABEL: test_cvtsd2si:
2087 ; SANDY:       # %bb.0:
2088 ; SANDY-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [5:1.00]
2089 ; SANDY-NEXT:    vcvtsd2si (%rdi), %eax # sched: [10:1.00]
2090 ; SANDY-NEXT:    addl %ecx, %eax # sched: [1:0.33]
2091 ; SANDY-NEXT:    retq # sched: [1:1.00]
2092 ;
2093 ; HASWELL-SSE-LABEL: test_cvtsd2si:
2094 ; HASWELL-SSE:       # %bb.0:
2095 ; HASWELL-SSE-NEXT:    cvtsd2si %xmm0, %ecx # sched: [4:1.00]
2096 ; HASWELL-SSE-NEXT:    cvtsd2si (%rdi), %eax # sched: [9:1.00]
2097 ; HASWELL-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.25]
2098 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2099 ;
2100 ; HASWELL-LABEL: test_cvtsd2si:
2101 ; HASWELL:       # %bb.0:
2102 ; HASWELL-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [4:1.00]
2103 ; HASWELL-NEXT:    vcvtsd2si (%rdi), %eax # sched: [9:1.00]
2104 ; HASWELL-NEXT:    addl %ecx, %eax # sched: [1:0.25]
2105 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2106 ;
2107 ; BROADWELL-SSE-LABEL: test_cvtsd2si:
2108 ; BROADWELL-SSE:       # %bb.0:
2109 ; BROADWELL-SSE-NEXT:    cvtsd2si (%rdi), %eax # sched: [9:1.00]
2110 ; BROADWELL-SSE-NEXT:    cvtsd2si %xmm0, %ecx # sched: [4:1.00]
2111 ; BROADWELL-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.25]
2112 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2113 ;
2114 ; BROADWELL-LABEL: test_cvtsd2si:
2115 ; BROADWELL:       # %bb.0:
2116 ; BROADWELL-NEXT:    vcvtsd2si (%rdi), %eax # sched: [9:1.00]
2117 ; BROADWELL-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [4:1.00]
2118 ; BROADWELL-NEXT:    addl %ecx, %eax # sched: [1:0.25]
2119 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2120 ;
2121 ; SKYLAKE-SSE-LABEL: test_cvtsd2si:
2122 ; SKYLAKE-SSE:       # %bb.0:
2123 ; SKYLAKE-SSE-NEXT:    cvtsd2si %xmm0, %ecx # sched: [6:1.00]
2124 ; SKYLAKE-SSE-NEXT:    cvtsd2si (%rdi), %eax # sched: [11:1.00]
2125 ; SKYLAKE-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.25]
2126 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2127 ;
2128 ; SKYLAKE-LABEL: test_cvtsd2si:
2129 ; SKYLAKE:       # %bb.0:
2130 ; SKYLAKE-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [6:1.00]
2131 ; SKYLAKE-NEXT:    vcvtsd2si (%rdi), %eax # sched: [11:1.00]
2132 ; SKYLAKE-NEXT:    addl %ecx, %eax # sched: [1:0.25]
2133 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2134 ;
2135 ; SKX-SSE-LABEL: test_cvtsd2si:
2136 ; SKX-SSE:       # %bb.0:
2137 ; SKX-SSE-NEXT:    cvtsd2si %xmm0, %ecx # sched: [6:1.00]
2138 ; SKX-SSE-NEXT:    cvtsd2si (%rdi), %eax # sched: [11:1.00]
2139 ; SKX-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.25]
2140 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
2141 ;
2142 ; SKX-LABEL: test_cvtsd2si:
2143 ; SKX:       # %bb.0:
2144 ; SKX-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [6:1.00]
2145 ; SKX-NEXT:    vcvtsd2si (%rdi), %eax # sched: [11:1.00]
2146 ; SKX-NEXT:    addl %ecx, %eax # sched: [1:0.25]
2147 ; SKX-NEXT:    retq # sched: [7:1.00]
2148 ;
2149 ; BDVER2-SSE-LABEL: test_cvtsd2si:
2150 ; BDVER2-SSE:       # %bb.0:
2151 ; BDVER2-SSE-NEXT:    cvtsd2si (%rdi), %eax # sched: [18:1.00]
2152 ; BDVER2-SSE-NEXT:    cvtsd2si %xmm0, %ecx # sched: [13:1.00]
2153 ; BDVER2-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.50]
2154 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2155 ;
2156 ; BDVER2-LABEL: test_cvtsd2si:
2157 ; BDVER2:       # %bb.0:
2158 ; BDVER2-NEXT:    vcvtsd2si (%rdi), %eax # sched: [18:1.00]
2159 ; BDVER2-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [13:1.00]
2160 ; BDVER2-NEXT:    addl %ecx, %eax # sched: [1:0.50]
2161 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2162 ;
2163 ; BTVER2-SSE-LABEL: test_cvtsd2si:
2164 ; BTVER2-SSE:       # %bb.0:
2165 ; BTVER2-SSE-NEXT:    cvtsd2si (%rdi), %eax # sched: [12:1.00]
2166 ; BTVER2-SSE-NEXT:    cvtsd2si %xmm0, %ecx # sched: [7:1.00]
2167 ; BTVER2-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.50]
2168 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2169 ;
2170 ; BTVER2-LABEL: test_cvtsd2si:
2171 ; BTVER2:       # %bb.0:
2172 ; BTVER2-NEXT:    vcvtsd2si (%rdi), %eax # sched: [12:1.00]
2173 ; BTVER2-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [7:1.00]
2174 ; BTVER2-NEXT:    addl %ecx, %eax # sched: [1:0.50]
2175 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2176 ;
2177 ; ZNVER1-SSE-LABEL: test_cvtsd2si:
2178 ; ZNVER1-SSE:       # %bb.0:
2179 ; ZNVER1-SSE-NEXT:    cvtsd2si (%rdi), %eax # sched: [12:1.00]
2180 ; ZNVER1-SSE-NEXT:    cvtsd2si %xmm0, %ecx # sched: [5:1.00]
2181 ; ZNVER1-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.25]
2182 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2183 ;
2184 ; ZNVER1-LABEL: test_cvtsd2si:
2185 ; ZNVER1:       # %bb.0:
2186 ; ZNVER1-NEXT:    vcvtsd2si (%rdi), %eax # sched: [12:1.00]
2187 ; ZNVER1-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [5:1.00]
2188 ; ZNVER1-NEXT:    addl %ecx, %eax # sched: [1:0.25]
2189 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2190   %1 = insertelement <2 x double> undef, double %a0, i32 0
2191   %2 = call i32 @llvm.x86.sse2.cvtsd2si(<2 x double> %1)
2192   %3 = load double, double *%a1, align 8
2193   %4 = insertelement <2 x double> undef, double %3, i32 0
2194   %5 = call i32 @llvm.x86.sse2.cvtsd2si(<2 x double> %4)
2195   %6 = add i32 %2, %5
2196   ret i32 %6
2197 }
2198 declare i32 @llvm.x86.sse2.cvtsd2si(<2 x double>) nounwind readnone
2199
2200 define i64 @test_cvtsd2siq(double %a0, double *%a1) {
2201 ; GENERIC-LABEL: test_cvtsd2siq:
2202 ; GENERIC:       # %bb.0:
2203 ; GENERIC-NEXT:    cvtsd2si %xmm0, %rcx # sched: [5:1.00]
2204 ; GENERIC-NEXT:    cvtsd2si (%rdi), %rax # sched: [9:1.00]
2205 ; GENERIC-NEXT:    addq %rcx, %rax # sched: [1:0.33]
2206 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2207 ;
2208 ; ATOM-LABEL: test_cvtsd2siq:
2209 ; ATOM:       # %bb.0:
2210 ; ATOM-NEXT:    cvtsd2si (%rdi), %rax # sched: [9:4.50]
2211 ; ATOM-NEXT:    cvtsd2si %xmm0, %rcx # sched: [8:4.00]
2212 ; ATOM-NEXT:    addq %rcx, %rax # sched: [1:0.50]
2213 ; ATOM-NEXT:    retq # sched: [79:39.50]
2214 ;
2215 ; SLM-LABEL: test_cvtsd2siq:
2216 ; SLM:       # %bb.0:
2217 ; SLM-NEXT:    cvtsd2si (%rdi), %rax # sched: [7:1.00]
2218 ; SLM-NEXT:    cvtsd2si %xmm0, %rcx # sched: [4:0.50]
2219 ; SLM-NEXT:    addq %rcx, %rax # sched: [1:0.50]
2220 ; SLM-NEXT:    retq # sched: [4:1.00]
2221 ;
2222 ; SANDY-SSE-LABEL: test_cvtsd2siq:
2223 ; SANDY-SSE:       # %bb.0:
2224 ; SANDY-SSE-NEXT:    cvtsd2si %xmm0, %rcx # sched: [5:1.00]
2225 ; SANDY-SSE-NEXT:    cvtsd2si (%rdi), %rax # sched: [9:1.00]
2226 ; SANDY-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.33]
2227 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2228 ;
2229 ; SANDY-LABEL: test_cvtsd2siq:
2230 ; SANDY:       # %bb.0:
2231 ; SANDY-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [5:1.00]
2232 ; SANDY-NEXT:    vcvtsd2si (%rdi), %rax # sched: [10:1.00]
2233 ; SANDY-NEXT:    addq %rcx, %rax # sched: [1:0.33]
2234 ; SANDY-NEXT:    retq # sched: [1:1.00]
2235 ;
2236 ; HASWELL-SSE-LABEL: test_cvtsd2siq:
2237 ; HASWELL-SSE:       # %bb.0:
2238 ; HASWELL-SSE-NEXT:    cvtsd2si %xmm0, %rcx # sched: [4:1.00]
2239 ; HASWELL-SSE-NEXT:    cvtsd2si (%rdi), %rax # sched: [9:1.00]
2240 ; HASWELL-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.25]
2241 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2242 ;
2243 ; HASWELL-LABEL: test_cvtsd2siq:
2244 ; HASWELL:       # %bb.0:
2245 ; HASWELL-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [4:1.00]
2246 ; HASWELL-NEXT:    vcvtsd2si (%rdi), %rax # sched: [9:1.00]
2247 ; HASWELL-NEXT:    addq %rcx, %rax # sched: [1:0.25]
2248 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2249 ;
2250 ; BROADWELL-SSE-LABEL: test_cvtsd2siq:
2251 ; BROADWELL-SSE:       # %bb.0:
2252 ; BROADWELL-SSE-NEXT:    cvtsd2si (%rdi), %rax # sched: [9:1.00]
2253 ; BROADWELL-SSE-NEXT:    cvtsd2si %xmm0, %rcx # sched: [4:1.00]
2254 ; BROADWELL-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.25]
2255 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2256 ;
2257 ; BROADWELL-LABEL: test_cvtsd2siq:
2258 ; BROADWELL:       # %bb.0:
2259 ; BROADWELL-NEXT:    vcvtsd2si (%rdi), %rax # sched: [9:1.00]
2260 ; BROADWELL-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [4:1.00]
2261 ; BROADWELL-NEXT:    addq %rcx, %rax # sched: [1:0.25]
2262 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2263 ;
2264 ; SKYLAKE-SSE-LABEL: test_cvtsd2siq:
2265 ; SKYLAKE-SSE:       # %bb.0:
2266 ; SKYLAKE-SSE-NEXT:    cvtsd2si %xmm0, %rcx # sched: [6:1.00]
2267 ; SKYLAKE-SSE-NEXT:    cvtsd2si (%rdi), %rax # sched: [11:1.00]
2268 ; SKYLAKE-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.25]
2269 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2270 ;
2271 ; SKYLAKE-LABEL: test_cvtsd2siq:
2272 ; SKYLAKE:       # %bb.0:
2273 ; SKYLAKE-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [6:1.00]
2274 ; SKYLAKE-NEXT:    vcvtsd2si (%rdi), %rax # sched: [11:1.00]
2275 ; SKYLAKE-NEXT:    addq %rcx, %rax # sched: [1:0.25]
2276 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2277 ;
2278 ; SKX-SSE-LABEL: test_cvtsd2siq:
2279 ; SKX-SSE:       # %bb.0:
2280 ; SKX-SSE-NEXT:    cvtsd2si %xmm0, %rcx # sched: [6:1.00]
2281 ; SKX-SSE-NEXT:    cvtsd2si (%rdi), %rax # sched: [11:1.00]
2282 ; SKX-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.25]
2283 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
2284 ;
2285 ; SKX-LABEL: test_cvtsd2siq:
2286 ; SKX:       # %bb.0:
2287 ; SKX-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [6:1.00]
2288 ; SKX-NEXT:    vcvtsd2si (%rdi), %rax # sched: [11:1.00]
2289 ; SKX-NEXT:    addq %rcx, %rax # sched: [1:0.25]
2290 ; SKX-NEXT:    retq # sched: [7:1.00]
2291 ;
2292 ; BDVER2-SSE-LABEL: test_cvtsd2siq:
2293 ; BDVER2-SSE:       # %bb.0:
2294 ; BDVER2-SSE-NEXT:    cvtsd2si (%rdi), %rax # sched: [18:1.00]
2295 ; BDVER2-SSE-NEXT:    cvtsd2si %xmm0, %rcx # sched: [13:1.00]
2296 ; BDVER2-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.50]
2297 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2298 ;
2299 ; BDVER2-LABEL: test_cvtsd2siq:
2300 ; BDVER2:       # %bb.0:
2301 ; BDVER2-NEXT:    vcvtsd2si (%rdi), %rax # sched: [18:1.00]
2302 ; BDVER2-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [13:1.00]
2303 ; BDVER2-NEXT:    addq %rcx, %rax # sched: [1:0.50]
2304 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2305 ;
2306 ; BTVER2-SSE-LABEL: test_cvtsd2siq:
2307 ; BTVER2-SSE:       # %bb.0:
2308 ; BTVER2-SSE-NEXT:    cvtsd2si (%rdi), %rax # sched: [12:1.00]
2309 ; BTVER2-SSE-NEXT:    cvtsd2si %xmm0, %rcx # sched: [7:1.00]
2310 ; BTVER2-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.50]
2311 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2312 ;
2313 ; BTVER2-LABEL: test_cvtsd2siq:
2314 ; BTVER2:       # %bb.0:
2315 ; BTVER2-NEXT:    vcvtsd2si (%rdi), %rax # sched: [12:1.00]
2316 ; BTVER2-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [7:1.00]
2317 ; BTVER2-NEXT:    addq %rcx, %rax # sched: [1:0.50]
2318 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2319 ;
2320 ; ZNVER1-SSE-LABEL: test_cvtsd2siq:
2321 ; ZNVER1-SSE:       # %bb.0:
2322 ; ZNVER1-SSE-NEXT:    cvtsd2si (%rdi), %rax # sched: [12:1.00]
2323 ; ZNVER1-SSE-NEXT:    cvtsd2si %xmm0, %rcx # sched: [5:1.00]
2324 ; ZNVER1-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.25]
2325 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2326 ;
2327 ; ZNVER1-LABEL: test_cvtsd2siq:
2328 ; ZNVER1:       # %bb.0:
2329 ; ZNVER1-NEXT:    vcvtsd2si (%rdi), %rax # sched: [12:1.00]
2330 ; ZNVER1-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [5:1.00]
2331 ; ZNVER1-NEXT:    addq %rcx, %rax # sched: [1:0.25]
2332 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2333   %1 = insertelement <2 x double> undef, double %a0, i32 0
2334   %2 = call i64 @llvm.x86.sse2.cvtsd2si64(<2 x double> %1)
2335   %3 = load double, double *%a1, align 8
2336   %4 = insertelement <2 x double> undef, double %3, i32 0
2337   %5 = call i64 @llvm.x86.sse2.cvtsd2si64(<2 x double> %4)
2338   %6 = add i64 %2, %5
2339   ret i64 %6
2340 }
2341 declare i64 @llvm.x86.sse2.cvtsd2si64(<2 x double>) nounwind readnone
2342
2343 define float @test_cvtsd2ss(double %a0, double *%a1) {
2344 ; GENERIC-LABEL: test_cvtsd2ss:
2345 ; GENERIC:       # %bb.0:
2346 ; GENERIC-NEXT:    cvtsd2ss %xmm0, %xmm1 # sched: [4:1.00]
2347 ; GENERIC-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [6:0.50]
2348 ; GENERIC-NEXT:    cvtsd2ss %xmm0, %xmm0 # sched: [4:1.00]
2349 ; GENERIC-NEXT:    addss %xmm1, %xmm0 # sched: [3:1.00]
2350 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2351 ;
2352 ; ATOM-LABEL: test_cvtsd2ss:
2353 ; ATOM:       # %bb.0:
2354 ; ATOM-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero sched: [1:1.00]
2355 ; ATOM-NEXT:    cvtsd2ss %xmm0, %xmm2 # sched: [6:3.00]
2356 ; ATOM-NEXT:    xorps %xmm0, %xmm0 # sched: [1:0.50]
2357 ; ATOM-NEXT:    cvtsd2ss %xmm1, %xmm0 # sched: [6:3.00]
2358 ; ATOM-NEXT:    addss %xmm2, %xmm0 # sched: [5:5.00]
2359 ; ATOM-NEXT:    retq # sched: [79:39.50]
2360 ;
2361 ; SLM-LABEL: test_cvtsd2ss:
2362 ; SLM:       # %bb.0:
2363 ; SLM-NEXT:    cvtsd2ss %xmm0, %xmm1 # sched: [4:0.50]
2364 ; SLM-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [3:1.00]
2365 ; SLM-NEXT:    cvtsd2ss %xmm0, %xmm0 # sched: [4:0.50]
2366 ; SLM-NEXT:    addss %xmm1, %xmm0 # sched: [3:1.00]
2367 ; SLM-NEXT:    retq # sched: [4:1.00]
2368 ;
2369 ; SANDY-SSE-LABEL: test_cvtsd2ss:
2370 ; SANDY-SSE:       # %bb.0:
2371 ; SANDY-SSE-NEXT:    cvtsd2ss %xmm0, %xmm1 # sched: [4:1.00]
2372 ; SANDY-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [6:0.50]
2373 ; SANDY-SSE-NEXT:    cvtsd2ss %xmm0, %xmm0 # sched: [4:1.00]
2374 ; SANDY-SSE-NEXT:    addss %xmm1, %xmm0 # sched: [3:1.00]
2375 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2376 ;
2377 ; SANDY-LABEL: test_cvtsd2ss:
2378 ; SANDY:       # %bb.0:
2379 ; SANDY-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
2380 ; SANDY-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [6:0.50]
2381 ; SANDY-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
2382 ; SANDY-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2383 ; SANDY-NEXT:    retq # sched: [1:1.00]
2384 ;
2385 ; HASWELL-SSE-LABEL: test_cvtsd2ss:
2386 ; HASWELL-SSE:       # %bb.0:
2387 ; HASWELL-SSE-NEXT:    cvtsd2ss %xmm0, %xmm1 # sched: [4:1.00]
2388 ; HASWELL-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [5:0.50]
2389 ; HASWELL-SSE-NEXT:    cvtsd2ss %xmm0, %xmm0 # sched: [4:1.00]
2390 ; HASWELL-SSE-NEXT:    addss %xmm1, %xmm0 # sched: [3:1.00]
2391 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2392 ;
2393 ; HASWELL-LABEL: test_cvtsd2ss:
2394 ; HASWELL:       # %bb.0:
2395 ; HASWELL-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
2396 ; HASWELL-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [5:0.50]
2397 ; HASWELL-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
2398 ; HASWELL-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2399 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2400 ;
2401 ; BROADWELL-SSE-LABEL: test_cvtsd2ss:
2402 ; BROADWELL-SSE:       # %bb.0:
2403 ; BROADWELL-SSE-NEXT:    cvtsd2ss %xmm0, %xmm1 # sched: [4:1.00]
2404 ; BROADWELL-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [5:0.50]
2405 ; BROADWELL-SSE-NEXT:    cvtsd2ss %xmm0, %xmm0 # sched: [4:1.00]
2406 ; BROADWELL-SSE-NEXT:    addss %xmm1, %xmm0 # sched: [3:1.00]
2407 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2408 ;
2409 ; BROADWELL-LABEL: test_cvtsd2ss:
2410 ; BROADWELL:       # %bb.0:
2411 ; BROADWELL-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
2412 ; BROADWELL-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [5:0.50]
2413 ; BROADWELL-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
2414 ; BROADWELL-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2415 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2416 ;
2417 ; SKYLAKE-SSE-LABEL: test_cvtsd2ss:
2418 ; SKYLAKE-SSE:       # %bb.0:
2419 ; SKYLAKE-SSE-NEXT:    cvtsd2ss %xmm0, %xmm1 # sched: [5:1.00]
2420 ; SKYLAKE-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [5:0.50]
2421 ; SKYLAKE-SSE-NEXT:    cvtsd2ss %xmm0, %xmm0 # sched: [5:1.00]
2422 ; SKYLAKE-SSE-NEXT:    addss %xmm1, %xmm0 # sched: [4:0.50]
2423 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2424 ;
2425 ; SKYLAKE-LABEL: test_cvtsd2ss:
2426 ; SKYLAKE:       # %bb.0:
2427 ; SKYLAKE-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
2428 ; SKYLAKE-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [5:0.50]
2429 ; SKYLAKE-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
2430 ; SKYLAKE-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
2431 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2432 ;
2433 ; SKX-SSE-LABEL: test_cvtsd2ss:
2434 ; SKX-SSE:       # %bb.0:
2435 ; SKX-SSE-NEXT:    cvtsd2ss %xmm0, %xmm1 # sched: [5:1.00]
2436 ; SKX-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [5:0.50]
2437 ; SKX-SSE-NEXT:    cvtsd2ss %xmm0, %xmm0 # sched: [5:1.00]
2438 ; SKX-SSE-NEXT:    addss %xmm1, %xmm0 # sched: [4:0.50]
2439 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
2440 ;
2441 ; SKX-LABEL: test_cvtsd2ss:
2442 ; SKX:       # %bb.0:
2443 ; SKX-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
2444 ; SKX-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [5:0.50]
2445 ; SKX-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
2446 ; SKX-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
2447 ; SKX-NEXT:    retq # sched: [7:1.00]
2448 ;
2449 ; BDVER2-SSE-LABEL: test_cvtsd2ss:
2450 ; BDVER2-SSE:       # %bb.0:
2451 ; BDVER2-SSE-NEXT:    cvtsd2ss %xmm0, %xmm1 # sched: [4:1.00]
2452 ; BDVER2-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [5:0.50]
2453 ; BDVER2-SSE-NEXT:    cvtsd2ss %xmm0, %xmm0 # sched: [4:1.00]
2454 ; BDVER2-SSE-NEXT:    addss %xmm1, %xmm0 # sched: [5:1.00]
2455 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2456 ;
2457 ; BDVER2-LABEL: test_cvtsd2ss:
2458 ; BDVER2:       # %bb.0:
2459 ; BDVER2-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [5:0.50]
2460 ; BDVER2-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
2461 ; BDVER2-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
2462 ; BDVER2-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
2463 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2464 ;
2465 ; BTVER2-SSE-LABEL: test_cvtsd2ss:
2466 ; BTVER2-SSE:       # %bb.0:
2467 ; BTVER2-SSE-NEXT:    cvtsd2ss %xmm0, %xmm1 # sched: [7:2.00]
2468 ; BTVER2-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [5:1.00]
2469 ; BTVER2-SSE-NEXT:    cvtsd2ss %xmm0, %xmm0 # sched: [7:2.00]
2470 ; BTVER2-SSE-NEXT:    addss %xmm1, %xmm0 # sched: [3:1.00]
2471 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2472 ;
2473 ; BTVER2-LABEL: test_cvtsd2ss:
2474 ; BTVER2:       # %bb.0:
2475 ; BTVER2-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [7:2.00]
2476 ; BTVER2-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [5:1.00]
2477 ; BTVER2-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [7:2.00]
2478 ; BTVER2-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2479 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2480 ;
2481 ; ZNVER1-SSE-LABEL: test_cvtsd2ss:
2482 ; ZNVER1-SSE:       # %bb.0:
2483 ; ZNVER1-SSE-NEXT:    cvtsd2ss %xmm0, %xmm1 # sched: [4:1.00]
2484 ; ZNVER1-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [8:0.50]
2485 ; ZNVER1-SSE-NEXT:    cvtsd2ss %xmm0, %xmm0 # sched: [4:1.00]
2486 ; ZNVER1-SSE-NEXT:    addss %xmm1, %xmm0 # sched: [3:1.00]
2487 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2488 ;
2489 ; ZNVER1-LABEL: test_cvtsd2ss:
2490 ; ZNVER1:       # %bb.0:
2491 ; ZNVER1-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [8:0.50]
2492 ; ZNVER1-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
2493 ; ZNVER1-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
2494 ; ZNVER1-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2495 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2496   %1 = fptrunc double %a0 to float
2497   %2 = load double, double *%a1, align 8
2498   %3 = fptrunc double %2 to float
2499   %4 = fadd float %1, %3
2500   ret float %4
2501 }
2502
2503 define double @test_cvtsi2sd(i32 %a0, i32 *%a1) {
2504 ; GENERIC-LABEL: test_cvtsi2sd:
2505 ; GENERIC:       # %bb.0:
2506 ; GENERIC-NEXT:    cvtsi2sdl %edi, %xmm1 # sched: [4:1.00]
2507 ; GENERIC-NEXT:    cvtsi2sdl (%rsi), %xmm0 # sched: [9:1.00]
2508 ; GENERIC-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2509 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2510 ;
2511 ; ATOM-LABEL: test_cvtsi2sd:
2512 ; ATOM:       # %bb.0:
2513 ; ATOM-NEXT:    cvtsi2sdl (%rsi), %xmm0 # sched: [7:3.50]
2514 ; ATOM-NEXT:    cvtsi2sdl %edi, %xmm1 # sched: [6:3.00]
2515 ; ATOM-NEXT:    addsd %xmm1, %xmm0 # sched: [5:5.00]
2516 ; ATOM-NEXT:    retq # sched: [79:39.50]
2517 ;
2518 ; SLM-LABEL: test_cvtsi2sd:
2519 ; SLM:       # %bb.0:
2520 ; SLM-NEXT:    cvtsi2sdl (%rsi), %xmm0 # sched: [7:1.00]
2521 ; SLM-NEXT:    cvtsi2sdl %edi, %xmm1 # sched: [4:0.50]
2522 ; SLM-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2523 ; SLM-NEXT:    retq # sched: [4:1.00]
2524 ;
2525 ; SANDY-SSE-LABEL: test_cvtsi2sd:
2526 ; SANDY-SSE:       # %bb.0:
2527 ; SANDY-SSE-NEXT:    cvtsi2sdl %edi, %xmm1 # sched: [4:1.00]
2528 ; SANDY-SSE-NEXT:    cvtsi2sdl (%rsi), %xmm0 # sched: [9:1.00]
2529 ; SANDY-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2530 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2531 ;
2532 ; SANDY-LABEL: test_cvtsi2sd:
2533 ; SANDY:       # %bb.0:
2534 ; SANDY-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [4:1.00]
2535 ; SANDY-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
2536 ; SANDY-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2537 ; SANDY-NEXT:    retq # sched: [1:1.00]
2538 ;
2539 ; HASWELL-SSE-LABEL: test_cvtsi2sd:
2540 ; HASWELL-SSE:       # %bb.0:
2541 ; HASWELL-SSE-NEXT:    cvtsi2sdl %edi, %xmm1 # sched: [4:1.00]
2542 ; HASWELL-SSE-NEXT:    cvtsi2sdl (%rsi), %xmm0 # sched: [9:1.00]
2543 ; HASWELL-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2544 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2545 ;
2546 ; HASWELL-LABEL: test_cvtsi2sd:
2547 ; HASWELL:       # %bb.0:
2548 ; HASWELL-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [4:1.00]
2549 ; HASWELL-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
2550 ; HASWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2551 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2552 ;
2553 ; BROADWELL-SSE-LABEL: test_cvtsi2sd:
2554 ; BROADWELL-SSE:       # %bb.0:
2555 ; BROADWELL-SSE-NEXT:    cvtsi2sdl %edi, %xmm1 # sched: [4:1.00]
2556 ; BROADWELL-SSE-NEXT:    cvtsi2sdl (%rsi), %xmm0 # sched: [9:1.00]
2557 ; BROADWELL-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2558 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2559 ;
2560 ; BROADWELL-LABEL: test_cvtsi2sd:
2561 ; BROADWELL:       # %bb.0:
2562 ; BROADWELL-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [4:1.00]
2563 ; BROADWELL-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
2564 ; BROADWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2565 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2566 ;
2567 ; SKYLAKE-SSE-LABEL: test_cvtsi2sd:
2568 ; SKYLAKE-SSE:       # %bb.0:
2569 ; SKYLAKE-SSE-NEXT:    cvtsi2sdl %edi, %xmm1 # sched: [5:1.00]
2570 ; SKYLAKE-SSE-NEXT:    cvtsi2sdl (%rsi), %xmm0 # sched: [9:1.00]
2571 ; SKYLAKE-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [4:0.50]
2572 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2573 ;
2574 ; SKYLAKE-LABEL: test_cvtsi2sd:
2575 ; SKYLAKE:       # %bb.0:
2576 ; SKYLAKE-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [5:1.00]
2577 ; SKYLAKE-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
2578 ; SKYLAKE-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
2579 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2580 ;
2581 ; SKX-SSE-LABEL: test_cvtsi2sd:
2582 ; SKX-SSE:       # %bb.0:
2583 ; SKX-SSE-NEXT:    cvtsi2sdl %edi, %xmm1 # sched: [5:1.00]
2584 ; SKX-SSE-NEXT:    cvtsi2sdl (%rsi), %xmm0 # sched: [9:1.00]
2585 ; SKX-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [4:0.50]
2586 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
2587 ;
2588 ; SKX-LABEL: test_cvtsi2sd:
2589 ; SKX:       # %bb.0:
2590 ; SKX-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [5:1.00]
2591 ; SKX-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
2592 ; SKX-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
2593 ; SKX-NEXT:    retq # sched: [7:1.00]
2594 ;
2595 ; BDVER2-SSE-LABEL: test_cvtsi2sd:
2596 ; BDVER2-SSE:       # %bb.0:
2597 ; BDVER2-SSE-NEXT:    cvtsi2sdl (%rsi), %xmm0 # sched: [9:1.00]
2598 ; BDVER2-SSE-NEXT:    cvtsi2sdl %edi, %xmm1 # sched: [4:1.00]
2599 ; BDVER2-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [5:1.00]
2600 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2601 ;
2602 ; BDVER2-LABEL: test_cvtsi2sd:
2603 ; BDVER2:       # %bb.0:
2604 ; BDVER2-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [4:1.00]
2605 ; BDVER2-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
2606 ; BDVER2-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
2607 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2608 ;
2609 ; BTVER2-SSE-LABEL: test_cvtsi2sd:
2610 ; BTVER2-SSE:       # %bb.0:
2611 ; BTVER2-SSE-NEXT:    cvtsi2sdl (%rsi), %xmm0 # sched: [9:1.00]
2612 ; BTVER2-SSE-NEXT:    cvtsi2sdl %edi, %xmm1 # sched: [10:1.00]
2613 ; BTVER2-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2614 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2615 ;
2616 ; BTVER2-LABEL: test_cvtsi2sd:
2617 ; BTVER2:       # %bb.0:
2618 ; BTVER2-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [10:1.00]
2619 ; BTVER2-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
2620 ; BTVER2-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2621 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2622 ;
2623 ; ZNVER1-SSE-LABEL: test_cvtsi2sd:
2624 ; ZNVER1-SSE:       # %bb.0:
2625 ; ZNVER1-SSE-NEXT:    cvtsi2sdl (%rsi), %xmm0 # sched: [12:1.00]
2626 ; ZNVER1-SSE-NEXT:    cvtsi2sdl %edi, %xmm1 # sched: [5:1.00]
2627 ; ZNVER1-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2628 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2629 ;
2630 ; ZNVER1-LABEL: test_cvtsi2sd:
2631 ; ZNVER1:       # %bb.0:
2632 ; ZNVER1-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [5:1.00]
2633 ; ZNVER1-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [12:1.00]
2634 ; ZNVER1-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2635 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2636   %1 = sitofp i32 %a0 to double
2637   %2 = load i32, i32 *%a1, align 8
2638   %3 = sitofp i32 %2 to double
2639   %4 = fadd double %1, %3
2640   ret double %4
2641 }
2642
2643 define double @test_cvtsi2sdq(i64 %a0, i64 *%a1) {
2644 ; GENERIC-LABEL: test_cvtsi2sdq:
2645 ; GENERIC:       # %bb.0:
2646 ; GENERIC-NEXT:    cvtsi2sdq %rdi, %xmm1 # sched: [4:1.00]
2647 ; GENERIC-NEXT:    cvtsi2sdq (%rsi), %xmm0 # sched: [9:1.00]
2648 ; GENERIC-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2649 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2650 ;
2651 ; ATOM-LABEL: test_cvtsi2sdq:
2652 ; ATOM:       # %bb.0:
2653 ; ATOM-NEXT:    cvtsi2sdq (%rsi), %xmm0 # sched: [7:3.50]
2654 ; ATOM-NEXT:    cvtsi2sdq %rdi, %xmm1 # sched: [6:3.00]
2655 ; ATOM-NEXT:    addsd %xmm1, %xmm0 # sched: [5:5.00]
2656 ; ATOM-NEXT:    retq # sched: [79:39.50]
2657 ;
2658 ; SLM-LABEL: test_cvtsi2sdq:
2659 ; SLM:       # %bb.0:
2660 ; SLM-NEXT:    cvtsi2sdq (%rsi), %xmm0 # sched: [7:1.00]
2661 ; SLM-NEXT:    cvtsi2sdq %rdi, %xmm1 # sched: [4:0.50]
2662 ; SLM-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2663 ; SLM-NEXT:    retq # sched: [4:1.00]
2664 ;
2665 ; SANDY-SSE-LABEL: test_cvtsi2sdq:
2666 ; SANDY-SSE:       # %bb.0:
2667 ; SANDY-SSE-NEXT:    cvtsi2sdq %rdi, %xmm1 # sched: [4:1.00]
2668 ; SANDY-SSE-NEXT:    cvtsi2sdq (%rsi), %xmm0 # sched: [9:1.00]
2669 ; SANDY-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2670 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2671 ;
2672 ; SANDY-LABEL: test_cvtsi2sdq:
2673 ; SANDY:       # %bb.0:
2674 ; SANDY-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [4:1.00]
2675 ; SANDY-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
2676 ; SANDY-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2677 ; SANDY-NEXT:    retq # sched: [1:1.00]
2678 ;
2679 ; HASWELL-SSE-LABEL: test_cvtsi2sdq:
2680 ; HASWELL-SSE:       # %bb.0:
2681 ; HASWELL-SSE-NEXT:    cvtsi2sdq %rdi, %xmm1 # sched: [4:1.00]
2682 ; HASWELL-SSE-NEXT:    cvtsi2sdq (%rsi), %xmm0 # sched: [9:1.00]
2683 ; HASWELL-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2684 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2685 ;
2686 ; HASWELL-LABEL: test_cvtsi2sdq:
2687 ; HASWELL:       # %bb.0:
2688 ; HASWELL-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [4:1.00]
2689 ; HASWELL-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
2690 ; HASWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2691 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2692 ;
2693 ; BROADWELL-SSE-LABEL: test_cvtsi2sdq:
2694 ; BROADWELL-SSE:       # %bb.0:
2695 ; BROADWELL-SSE-NEXT:    cvtsi2sdq %rdi, %xmm1 # sched: [4:1.00]
2696 ; BROADWELL-SSE-NEXT:    cvtsi2sdq (%rsi), %xmm0 # sched: [9:1.00]
2697 ; BROADWELL-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2698 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2699 ;
2700 ; BROADWELL-LABEL: test_cvtsi2sdq:
2701 ; BROADWELL:       # %bb.0:
2702 ; BROADWELL-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [4:1.00]
2703 ; BROADWELL-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
2704 ; BROADWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2705 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2706 ;
2707 ; SKYLAKE-SSE-LABEL: test_cvtsi2sdq:
2708 ; SKYLAKE-SSE:       # %bb.0:
2709 ; SKYLAKE-SSE-NEXT:    cvtsi2sdq %rdi, %xmm1 # sched: [5:1.00]
2710 ; SKYLAKE-SSE-NEXT:    cvtsi2sdq (%rsi), %xmm0 # sched: [9:1.00]
2711 ; SKYLAKE-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [4:0.50]
2712 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2713 ;
2714 ; SKYLAKE-LABEL: test_cvtsi2sdq:
2715 ; SKYLAKE:       # %bb.0:
2716 ; SKYLAKE-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [5:1.00]
2717 ; SKYLAKE-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
2718 ; SKYLAKE-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
2719 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2720 ;
2721 ; SKX-SSE-LABEL: test_cvtsi2sdq:
2722 ; SKX-SSE:       # %bb.0:
2723 ; SKX-SSE-NEXT:    cvtsi2sdq %rdi, %xmm1 # sched: [5:1.00]
2724 ; SKX-SSE-NEXT:    cvtsi2sdq (%rsi), %xmm0 # sched: [9:1.00]
2725 ; SKX-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [4:0.50]
2726 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
2727 ;
2728 ; SKX-LABEL: test_cvtsi2sdq:
2729 ; SKX:       # %bb.0:
2730 ; SKX-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [5:1.00]
2731 ; SKX-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
2732 ; SKX-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
2733 ; SKX-NEXT:    retq # sched: [7:1.00]
2734 ;
2735 ; BDVER2-SSE-LABEL: test_cvtsi2sdq:
2736 ; BDVER2-SSE:       # %bb.0:
2737 ; BDVER2-SSE-NEXT:    cvtsi2sdq %rdi, %xmm1 # sched: [13:1.00]
2738 ; BDVER2-SSE-NEXT:    cvtsi2sdq (%rsi), %xmm0 # sched: [9:1.00]
2739 ; BDVER2-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [5:1.00]
2740 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2741 ;
2742 ; BDVER2-LABEL: test_cvtsi2sdq:
2743 ; BDVER2:       # %bb.0:
2744 ; BDVER2-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [4:1.00]
2745 ; BDVER2-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
2746 ; BDVER2-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
2747 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2748 ;
2749 ; BTVER2-SSE-LABEL: test_cvtsi2sdq:
2750 ; BTVER2-SSE:       # %bb.0:
2751 ; BTVER2-SSE-NEXT:    cvtsi2sdq (%rsi), %xmm0 # sched: [9:1.00]
2752 ; BTVER2-SSE-NEXT:    cvtsi2sdq %rdi, %xmm1 # sched: [10:1.00]
2753 ; BTVER2-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2754 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2755 ;
2756 ; BTVER2-LABEL: test_cvtsi2sdq:
2757 ; BTVER2:       # %bb.0:
2758 ; BTVER2-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [10:1.00]
2759 ; BTVER2-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
2760 ; BTVER2-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2761 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2762 ;
2763 ; ZNVER1-SSE-LABEL: test_cvtsi2sdq:
2764 ; ZNVER1-SSE:       # %bb.0:
2765 ; ZNVER1-SSE-NEXT:    cvtsi2sdq (%rsi), %xmm0 # sched: [12:1.00]
2766 ; ZNVER1-SSE-NEXT:    cvtsi2sdq %rdi, %xmm1 # sched: [5:1.00]
2767 ; ZNVER1-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2768 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2769 ;
2770 ; ZNVER1-LABEL: test_cvtsi2sdq:
2771 ; ZNVER1:       # %bb.0:
2772 ; ZNVER1-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [5:1.00]
2773 ; ZNVER1-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [12:1.00]
2774 ; ZNVER1-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2775 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2776   %1 = sitofp i64 %a0 to double
2777   %2 = load i64, i64 *%a1, align 8
2778   %3 = sitofp i64 %2 to double
2779   %4 = fadd double %1, %3
2780   ret double %4
2781 }
2782
2783 ; TODO - cvtss2sd_m
2784
2785 define double @test_cvtss2sd(float %a0, float *%a1) {
2786 ; GENERIC-LABEL: test_cvtss2sd:
2787 ; GENERIC:       # %bb.0:
2788 ; GENERIC-NEXT:    cvtss2sd %xmm0, %xmm1 # sched: [1:1.00]
2789 ; GENERIC-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [6:0.50]
2790 ; GENERIC-NEXT:    cvtss2sd %xmm0, %xmm0 # sched: [1:1.00]
2791 ; GENERIC-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2792 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2793 ;
2794 ; ATOM-LABEL: test_cvtss2sd:
2795 ; ATOM:       # %bb.0:
2796 ; ATOM-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [1:1.00]
2797 ; ATOM-NEXT:    cvtss2sd %xmm0, %xmm2 # sched: [6:3.00]
2798 ; ATOM-NEXT:    xorps %xmm0, %xmm0 # sched: [1:0.50]
2799 ; ATOM-NEXT:    cvtss2sd %xmm1, %xmm0 # sched: [6:3.00]
2800 ; ATOM-NEXT:    addsd %xmm2, %xmm0 # sched: [5:5.00]
2801 ; ATOM-NEXT:    retq # sched: [79:39.50]
2802 ;
2803 ; SLM-LABEL: test_cvtss2sd:
2804 ; SLM:       # %bb.0:
2805 ; SLM-NEXT:    cvtss2sd %xmm0, %xmm1 # sched: [4:0.50]
2806 ; SLM-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [3:1.00]
2807 ; SLM-NEXT:    cvtss2sd %xmm0, %xmm0 # sched: [4:0.50]
2808 ; SLM-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2809 ; SLM-NEXT:    retq # sched: [4:1.00]
2810 ;
2811 ; SANDY-SSE-LABEL: test_cvtss2sd:
2812 ; SANDY-SSE:       # %bb.0:
2813 ; SANDY-SSE-NEXT:    cvtss2sd %xmm0, %xmm1 # sched: [1:1.00]
2814 ; SANDY-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [6:0.50]
2815 ; SANDY-SSE-NEXT:    cvtss2sd %xmm0, %xmm0 # sched: [1:1.00]
2816 ; SANDY-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2817 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2818 ;
2819 ; SANDY-LABEL: test_cvtss2sd:
2820 ; SANDY:       # %bb.0:
2821 ; SANDY-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [1:1.00]
2822 ; SANDY-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [6:0.50]
2823 ; SANDY-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [1:1.00]
2824 ; SANDY-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2825 ; SANDY-NEXT:    retq # sched: [1:1.00]
2826 ;
2827 ; HASWELL-SSE-LABEL: test_cvtss2sd:
2828 ; HASWELL-SSE:       # %bb.0:
2829 ; HASWELL-SSE-NEXT:    cvtss2sd %xmm0, %xmm1 # sched: [2:1.00]
2830 ; HASWELL-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [5:0.50]
2831 ; HASWELL-SSE-NEXT:    cvtss2sd %xmm0, %xmm0 # sched: [2:1.00]
2832 ; HASWELL-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2833 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2834 ;
2835 ; HASWELL-LABEL: test_cvtss2sd:
2836 ; HASWELL:       # %bb.0:
2837 ; HASWELL-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [2:1.00]
2838 ; HASWELL-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
2839 ; HASWELL-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [2:1.00]
2840 ; HASWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2841 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2842 ;
2843 ; BROADWELL-SSE-LABEL: test_cvtss2sd:
2844 ; BROADWELL-SSE:       # %bb.0:
2845 ; BROADWELL-SSE-NEXT:    cvtss2sd %xmm0, %xmm1 # sched: [2:1.00]
2846 ; BROADWELL-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [5:0.50]
2847 ; BROADWELL-SSE-NEXT:    cvtss2sd %xmm0, %xmm0 # sched: [2:1.00]
2848 ; BROADWELL-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2849 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
2850 ;
2851 ; BROADWELL-LABEL: test_cvtss2sd:
2852 ; BROADWELL:       # %bb.0:
2853 ; BROADWELL-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [2:1.00]
2854 ; BROADWELL-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
2855 ; BROADWELL-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [2:1.00]
2856 ; BROADWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2857 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2858 ;
2859 ; SKYLAKE-SSE-LABEL: test_cvtss2sd:
2860 ; SKYLAKE-SSE:       # %bb.0:
2861 ; SKYLAKE-SSE-NEXT:    cvtss2sd %xmm0, %xmm1 # sched: [5:1.00]
2862 ; SKYLAKE-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [5:0.50]
2863 ; SKYLAKE-SSE-NEXT:    cvtss2sd %xmm0, %xmm0 # sched: [5:1.00]
2864 ; SKYLAKE-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [4:0.50]
2865 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
2866 ;
2867 ; SKYLAKE-LABEL: test_cvtss2sd:
2868 ; SKYLAKE:       # %bb.0:
2869 ; SKYLAKE-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
2870 ; SKYLAKE-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
2871 ; SKYLAKE-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
2872 ; SKYLAKE-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
2873 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2874 ;
2875 ; SKX-SSE-LABEL: test_cvtss2sd:
2876 ; SKX-SSE:       # %bb.0:
2877 ; SKX-SSE-NEXT:    cvtss2sd %xmm0, %xmm1 # sched: [5:1.00]
2878 ; SKX-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [5:0.50]
2879 ; SKX-SSE-NEXT:    cvtss2sd %xmm0, %xmm0 # sched: [5:1.00]
2880 ; SKX-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [4:0.50]
2881 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
2882 ;
2883 ; SKX-LABEL: test_cvtss2sd:
2884 ; SKX:       # %bb.0:
2885 ; SKX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
2886 ; SKX-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
2887 ; SKX-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
2888 ; SKX-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
2889 ; SKX-NEXT:    retq # sched: [7:1.00]
2890 ;
2891 ; BDVER2-SSE-LABEL: test_cvtss2sd:
2892 ; BDVER2-SSE:       # %bb.0:
2893 ; BDVER2-SSE-NEXT:    cvtss2sd %xmm0, %xmm1 # sched: [4:1.00]
2894 ; BDVER2-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [5:0.50]
2895 ; BDVER2-SSE-NEXT:    cvtss2sd %xmm0, %xmm0 # sched: [4:1.00]
2896 ; BDVER2-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [5:1.00]
2897 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
2898 ;
2899 ; BDVER2-LABEL: test_cvtss2sd:
2900 ; BDVER2:       # %bb.0:
2901 ; BDVER2-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
2902 ; BDVER2-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
2903 ; BDVER2-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
2904 ; BDVER2-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
2905 ; BDVER2-NEXT:    retq # sched: [5:1.00]
2906 ;
2907 ; BTVER2-SSE-LABEL: test_cvtss2sd:
2908 ; BTVER2-SSE:       # %bb.0:
2909 ; BTVER2-SSE-NEXT:    cvtss2sd %xmm0, %xmm1 # sched: [7:2.00]
2910 ; BTVER2-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [5:1.00]
2911 ; BTVER2-SSE-NEXT:    cvtss2sd %xmm0, %xmm0 # sched: [7:2.00]
2912 ; BTVER2-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2913 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
2914 ;
2915 ; BTVER2-LABEL: test_cvtss2sd:
2916 ; BTVER2:       # %bb.0:
2917 ; BTVER2-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [7:2.00]
2918 ; BTVER2-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:1.00]
2919 ; BTVER2-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [7:2.00]
2920 ; BTVER2-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2921 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2922 ;
2923 ; ZNVER1-SSE-LABEL: test_cvtss2sd:
2924 ; ZNVER1-SSE:       # %bb.0:
2925 ; ZNVER1-SSE-NEXT:    cvtss2sd %xmm0, %xmm1 # sched: [4:1.00]
2926 ; ZNVER1-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [8:0.50]
2927 ; ZNVER1-SSE-NEXT:    cvtss2sd %xmm0, %xmm0 # sched: [4:1.00]
2928 ; ZNVER1-SSE-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
2929 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
2930 ;
2931 ; ZNVER1-LABEL: test_cvtss2sd:
2932 ; ZNVER1:       # %bb.0:
2933 ; ZNVER1-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [8:0.50]
2934 ; ZNVER1-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
2935 ; ZNVER1-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
2936 ; ZNVER1-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2937 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2938   %1 = fpext float %a0 to double
2939   %2 = load float, float *%a1, align 4
2940   %3 = fpext float %2 to double
2941   %4 = fadd double %1, %3
2942   ret double %4
2943 }
2944
2945 define <4 x i32> @test_cvttpd2dq(<2 x double> %a0, <2 x double> *%a1) {
2946 ; GENERIC-LABEL: test_cvttpd2dq:
2947 ; GENERIC:       # %bb.0:
2948 ; GENERIC-NEXT:    cvttpd2dq %xmm0, %xmm1 # sched: [4:1.00]
2949 ; GENERIC-NEXT:    cvttpd2dq (%rdi), %xmm0 # sched: [10:1.00]
2950 ; GENERIC-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
2951 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2952 ;
2953 ; ATOM-LABEL: test_cvttpd2dq:
2954 ; ATOM:       # %bb.0:
2955 ; ATOM-NEXT:    cvttpd2dq (%rdi), %xmm1 # sched: [8:4.00]
2956 ; ATOM-NEXT:    cvttpd2dq %xmm0, %xmm0 # sched: [7:3.50]
2957 ; ATOM-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
2958 ; ATOM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
2959 ; ATOM-NEXT:    retq # sched: [79:39.50]
2960 ;
2961 ; SLM-LABEL: test_cvttpd2dq:
2962 ; SLM:       # %bb.0:
2963 ; SLM-NEXT:    cvttpd2dq %xmm0, %xmm1 # sched: [4:0.50]
2964 ; SLM-NEXT:    cvttpd2dq (%rdi), %xmm0 # sched: [7:1.00]
2965 ; SLM-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
2966 ; SLM-NEXT:    retq # sched: [4:1.00]
2967 ;
2968 ; SANDY-SSE-LABEL: test_cvttpd2dq:
2969 ; SANDY-SSE:       # %bb.0:
2970 ; SANDY-SSE-NEXT:    cvttpd2dq %xmm0, %xmm1 # sched: [4:1.00]
2971 ; SANDY-SSE-NEXT:    cvttpd2dq (%rdi), %xmm0 # sched: [10:1.00]
2972 ; SANDY-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
2973 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
2974 ;
2975 ; SANDY-LABEL: test_cvttpd2dq:
2976 ; SANDY:       # %bb.0:
2977 ; SANDY-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [4:1.00]
2978 ; SANDY-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [10:1.00]
2979 ; SANDY-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2980 ; SANDY-NEXT:    retq # sched: [1:1.00]
2981 ;
2982 ; HASWELL-SSE-LABEL: test_cvttpd2dq:
2983 ; HASWELL-SSE:       # %bb.0:
2984 ; HASWELL-SSE-NEXT:    cvttpd2dq %xmm0, %xmm1 # sched: [4:1.00]
2985 ; HASWELL-SSE-NEXT:    cvttpd2dq (%rdi), %xmm0 # sched: [10:1.00]
2986 ; HASWELL-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
2987 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
2988 ;
2989 ; HASWELL-LABEL: test_cvttpd2dq:
2990 ; HASWELL:       # %bb.0:
2991 ; HASWELL-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [4:1.00]
2992 ; HASWELL-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
2993 ; HASWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2994 ; HASWELL-NEXT:    retq # sched: [7:1.00]
2995 ;
2996 ; BROADWELL-SSE-LABEL: test_cvttpd2dq:
2997 ; BROADWELL-SSE:       # %bb.0:
2998 ; BROADWELL-SSE-NEXT:    cvttpd2dq (%rdi), %xmm1 # sched: [9:1.00]
2999 ; BROADWELL-SSE-NEXT:    cvttpd2dq %xmm0, %xmm0 # sched: [4:1.00]
3000 ; BROADWELL-SSE-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
3001 ; BROADWELL-SSE-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.33]
3002 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3003 ;
3004 ; BROADWELL-LABEL: test_cvttpd2dq:
3005 ; BROADWELL:       # %bb.0:
3006 ; BROADWELL-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [4:1.00]
3007 ; BROADWELL-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
3008 ; BROADWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3009 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3010 ;
3011 ; SKYLAKE-SSE-LABEL: test_cvttpd2dq:
3012 ; SKYLAKE-SSE:       # %bb.0:
3013 ; SKYLAKE-SSE-NEXT:    cvttpd2dq %xmm0, %xmm1 # sched: [5:1.00]
3014 ; SKYLAKE-SSE-NEXT:    cvttpd2dq (%rdi), %xmm0 # sched: [11:1.00]
3015 ; SKYLAKE-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.33]
3016 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3017 ;
3018 ; SKYLAKE-LABEL: test_cvttpd2dq:
3019 ; SKYLAKE:       # %bb.0:
3020 ; SKYLAKE-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [5:1.00]
3021 ; SKYLAKE-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
3022 ; SKYLAKE-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3023 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3024 ;
3025 ; SKX-SSE-LABEL: test_cvttpd2dq:
3026 ; SKX-SSE:       # %bb.0:
3027 ; SKX-SSE-NEXT:    cvttpd2dq %xmm0, %xmm1 # sched: [5:1.00]
3028 ; SKX-SSE-NEXT:    cvttpd2dq (%rdi), %xmm0 # sched: [11:1.00]
3029 ; SKX-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.33]
3030 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3031 ;
3032 ; SKX-LABEL: test_cvttpd2dq:
3033 ; SKX:       # %bb.0:
3034 ; SKX-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [5:1.00]
3035 ; SKX-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [8:0.50]
3036 ; SKX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3037 ; SKX-NEXT:    retq # sched: [7:1.00]
3038 ;
3039 ; BDVER2-SSE-LABEL: test_cvttpd2dq:
3040 ; BDVER2-SSE:       # %bb.0:
3041 ; BDVER2-SSE-NEXT:    cvttpd2dq %xmm0, %xmm1 # sched: [8:1.00]
3042 ; BDVER2-SSE-NEXT:    cvttpd2dq (%rdi), %xmm0 # sched: [13:1.00]
3043 ; BDVER2-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [2:0.50]
3044 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3045 ;
3046 ; BDVER2-LABEL: test_cvttpd2dq:
3047 ; BDVER2:       # %bb.0:
3048 ; BDVER2-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [13:1.00]
3049 ; BDVER2-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [8:1.00]
3050 ; BDVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
3051 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3052 ;
3053 ; BTVER2-SSE-LABEL: test_cvttpd2dq:
3054 ; BTVER2-SSE:       # %bb.0:
3055 ; BTVER2-SSE-NEXT:    cvttpd2dq %xmm0, %xmm1 # sched: [3:1.00]
3056 ; BTVER2-SSE-NEXT:    cvttpd2dq (%rdi), %xmm0 # sched: [8:1.00]
3057 ; BTVER2-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
3058 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3059 ;
3060 ; BTVER2-LABEL: test_cvttpd2dq:
3061 ; BTVER2:       # %bb.0:
3062 ; BTVER2-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
3063 ; BTVER2-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [3:1.00]
3064 ; BTVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3065 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3066 ;
3067 ; ZNVER1-SSE-LABEL: test_cvttpd2dq:
3068 ; ZNVER1-SSE:       # %bb.0:
3069 ; ZNVER1-SSE-NEXT:    cvttpd2dq %xmm0, %xmm1 # sched: [5:1.00]
3070 ; ZNVER1-SSE-NEXT:    cvttpd2dq (%rdi), %xmm0 # sched: [12:1.00]
3071 ; ZNVER1-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.25]
3072 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3073 ;
3074 ; ZNVER1-LABEL: test_cvttpd2dq:
3075 ; ZNVER1:       # %bb.0:
3076 ; ZNVER1-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [12:1.00]
3077 ; ZNVER1-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [5:1.00]
3078 ; ZNVER1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3079 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3080   %1 = fptosi <2 x double> %a0 to <2 x i32>
3081   %2 = shufflevector <2 x i32> %1, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
3082   %3 = load <2 x double>, <2 x double> *%a1, align 16
3083   %4 = fptosi <2 x double> %3 to <2 x i32>
3084   %5 = shufflevector <2 x i32> %4, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
3085   %6 = add <4 x i32> %2, %5
3086   ret <4 x i32> %6
3087 }
3088
3089 define <4 x i32> @test_cvttps2dq(<4 x float> %a0, <4 x float> *%a1) {
3090 ; GENERIC-LABEL: test_cvttps2dq:
3091 ; GENERIC:       # %bb.0:
3092 ; GENERIC-NEXT:    cvttps2dq %xmm0, %xmm1 # sched: [3:1.00]
3093 ; GENERIC-NEXT:    cvttps2dq (%rdi), %xmm0 # sched: [9:1.00]
3094 ; GENERIC-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
3095 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3096 ;
3097 ; ATOM-LABEL: test_cvttps2dq:
3098 ; ATOM:       # %bb.0:
3099 ; ATOM-NEXT:    cvttps2dq (%rdi), %xmm1 # sched: [7:3.50]
3100 ; ATOM-NEXT:    cvttps2dq %xmm0, %xmm0 # sched: [6:3.00]
3101 ; ATOM-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
3102 ; ATOM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
3103 ; ATOM-NEXT:    retq # sched: [79:39.50]
3104 ;
3105 ; SLM-LABEL: test_cvttps2dq:
3106 ; SLM:       # %bb.0:
3107 ; SLM-NEXT:    cvttps2dq %xmm0, %xmm1 # sched: [4:0.50]
3108 ; SLM-NEXT:    cvttps2dq (%rdi), %xmm0 # sched: [7:1.00]
3109 ; SLM-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
3110 ; SLM-NEXT:    retq # sched: [4:1.00]
3111 ;
3112 ; SANDY-SSE-LABEL: test_cvttps2dq:
3113 ; SANDY-SSE:       # %bb.0:
3114 ; SANDY-SSE-NEXT:    cvttps2dq %xmm0, %xmm1 # sched: [3:1.00]
3115 ; SANDY-SSE-NEXT:    cvttps2dq (%rdi), %xmm0 # sched: [9:1.00]
3116 ; SANDY-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
3117 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3118 ;
3119 ; SANDY-LABEL: test_cvttps2dq:
3120 ; SANDY:       # %bb.0:
3121 ; SANDY-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [3:1.00]
3122 ; SANDY-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [9:1.00]
3123 ; SANDY-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3124 ; SANDY-NEXT:    retq # sched: [1:1.00]
3125 ;
3126 ; HASWELL-SSE-LABEL: test_cvttps2dq:
3127 ; HASWELL-SSE:       # %bb.0:
3128 ; HASWELL-SSE-NEXT:    cvttps2dq %xmm0, %xmm1 # sched: [3:1.00]
3129 ; HASWELL-SSE-NEXT:    cvttps2dq (%rdi), %xmm0 # sched: [9:1.00]
3130 ; HASWELL-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
3131 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3132 ;
3133 ; HASWELL-LABEL: test_cvttps2dq:
3134 ; HASWELL:       # %bb.0:
3135 ; HASWELL-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [3:1.00]
3136 ; HASWELL-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [9:1.00]
3137 ; HASWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3138 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3139 ;
3140 ; BROADWELL-SSE-LABEL: test_cvttps2dq:
3141 ; BROADWELL-SSE:       # %bb.0:
3142 ; BROADWELL-SSE-NEXT:    cvttps2dq %xmm0, %xmm1 # sched: [3:1.00]
3143 ; BROADWELL-SSE-NEXT:    cvttps2dq (%rdi), %xmm0 # sched: [8:1.00]
3144 ; BROADWELL-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
3145 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3146 ;
3147 ; BROADWELL-LABEL: test_cvttps2dq:
3148 ; BROADWELL:       # %bb.0:
3149 ; BROADWELL-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [3:1.00]
3150 ; BROADWELL-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [8:1.00]
3151 ; BROADWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3152 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3153 ;
3154 ; SKYLAKE-SSE-LABEL: test_cvttps2dq:
3155 ; SKYLAKE-SSE:       # %bb.0:
3156 ; SKYLAKE-SSE-NEXT:    cvttps2dq %xmm0, %xmm1 # sched: [4:0.50]
3157 ; SKYLAKE-SSE-NEXT:    cvttps2dq (%rdi), %xmm0 # sched: [10:0.50]
3158 ; SKYLAKE-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.33]
3159 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3160 ;
3161 ; SKYLAKE-LABEL: test_cvttps2dq:
3162 ; SKYLAKE:       # %bb.0:
3163 ; SKYLAKE-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [4:0.50]
3164 ; SKYLAKE-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [10:0.50]
3165 ; SKYLAKE-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3166 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3167 ;
3168 ; SKX-SSE-LABEL: test_cvttps2dq:
3169 ; SKX-SSE:       # %bb.0:
3170 ; SKX-SSE-NEXT:    cvttps2dq %xmm0, %xmm1 # sched: [4:0.50]
3171 ; SKX-SSE-NEXT:    cvttps2dq (%rdi), %xmm0 # sched: [10:0.50]
3172 ; SKX-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.33]
3173 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3174 ;
3175 ; SKX-LABEL: test_cvttps2dq:
3176 ; SKX:       # %bb.0:
3177 ; SKX-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [4:0.50]
3178 ; SKX-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [10:0.50]
3179 ; SKX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3180 ; SKX-NEXT:    retq # sched: [7:1.00]
3181 ;
3182 ; BDVER2-SSE-LABEL: test_cvttps2dq:
3183 ; BDVER2-SSE:       # %bb.0:
3184 ; BDVER2-SSE-NEXT:    cvttps2dq %xmm0, %xmm1 # sched: [4:1.00]
3185 ; BDVER2-SSE-NEXT:    cvttps2dq (%rdi), %xmm0 # sched: [9:1.00]
3186 ; BDVER2-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [2:0.50]
3187 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3188 ;
3189 ; BDVER2-LABEL: test_cvttps2dq:
3190 ; BDVER2:       # %bb.0:
3191 ; BDVER2-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [9:1.00]
3192 ; BDVER2-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [4:1.00]
3193 ; BDVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [2:0.50]
3194 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3195 ;
3196 ; BTVER2-SSE-LABEL: test_cvttps2dq:
3197 ; BTVER2-SSE:       # %bb.0:
3198 ; BTVER2-SSE-NEXT:    cvttps2dq %xmm0, %xmm1 # sched: [3:1.00]
3199 ; BTVER2-SSE-NEXT:    cvttps2dq (%rdi), %xmm0 # sched: [8:1.00]
3200 ; BTVER2-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
3201 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3202 ;
3203 ; BTVER2-LABEL: test_cvttps2dq:
3204 ; BTVER2:       # %bb.0:
3205 ; BTVER2-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [8:1.00]
3206 ; BTVER2-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [3:1.00]
3207 ; BTVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3208 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3209 ;
3210 ; ZNVER1-SSE-LABEL: test_cvttps2dq:
3211 ; ZNVER1-SSE:       # %bb.0:
3212 ; ZNVER1-SSE-NEXT:    cvttps2dq %xmm0, %xmm1 # sched: [5:1.00]
3213 ; ZNVER1-SSE-NEXT:    cvttps2dq (%rdi), %xmm0 # sched: [12:1.00]
3214 ; ZNVER1-SSE-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.25]
3215 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3216 ;
3217 ; ZNVER1-LABEL: test_cvttps2dq:
3218 ; ZNVER1:       # %bb.0:
3219 ; ZNVER1-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [12:1.00]
3220 ; ZNVER1-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [5:1.00]
3221 ; ZNVER1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3222 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3223   %1 = fptosi <4 x float> %a0 to <4 x i32>
3224   %2 = load <4 x float>, <4 x float> *%a1, align 16
3225   %3 = fptosi <4 x float> %2 to <4 x i32>
3226   %4 = add <4 x i32> %1, %3
3227   ret <4 x i32> %4
3228 }
3229
3230 define i32 @test_cvttsd2si(double %a0, double *%a1) {
3231 ; GENERIC-LABEL: test_cvttsd2si:
3232 ; GENERIC:       # %bb.0:
3233 ; GENERIC-NEXT:    cvttsd2si %xmm0, %ecx # sched: [5:1.00]
3234 ; GENERIC-NEXT:    cvttsd2si (%rdi), %eax # sched: [9:1.00]
3235 ; GENERIC-NEXT:    addl %ecx, %eax # sched: [1:0.33]
3236 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3237 ;
3238 ; ATOM-LABEL: test_cvttsd2si:
3239 ; ATOM:       # %bb.0:
3240 ; ATOM-NEXT:    cvttsd2si (%rdi), %eax # sched: [9:4.50]
3241 ; ATOM-NEXT:    cvttsd2si %xmm0, %ecx # sched: [8:4.00]
3242 ; ATOM-NEXT:    addl %ecx, %eax # sched: [1:0.50]
3243 ; ATOM-NEXT:    retq # sched: [79:39.50]
3244 ;
3245 ; SLM-LABEL: test_cvttsd2si:
3246 ; SLM:       # %bb.0:
3247 ; SLM-NEXT:    cvttsd2si (%rdi), %eax # sched: [7:1.00]
3248 ; SLM-NEXT:    cvttsd2si %xmm0, %ecx # sched: [4:0.50]
3249 ; SLM-NEXT:    addl %ecx, %eax # sched: [1:0.50]
3250 ; SLM-NEXT:    retq # sched: [4:1.00]
3251 ;
3252 ; SANDY-SSE-LABEL: test_cvttsd2si:
3253 ; SANDY-SSE:       # %bb.0:
3254 ; SANDY-SSE-NEXT:    cvttsd2si %xmm0, %ecx # sched: [5:1.00]
3255 ; SANDY-SSE-NEXT:    cvttsd2si (%rdi), %eax # sched: [9:1.00]
3256 ; SANDY-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.33]
3257 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3258 ;
3259 ; SANDY-LABEL: test_cvttsd2si:
3260 ; SANDY:       # %bb.0:
3261 ; SANDY-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [5:1.00]
3262 ; SANDY-NEXT:    vcvttsd2si (%rdi), %eax # sched: [10:1.00]
3263 ; SANDY-NEXT:    addl %ecx, %eax # sched: [1:0.33]
3264 ; SANDY-NEXT:    retq # sched: [1:1.00]
3265 ;
3266 ; HASWELL-SSE-LABEL: test_cvttsd2si:
3267 ; HASWELL-SSE:       # %bb.0:
3268 ; HASWELL-SSE-NEXT:    cvttsd2si %xmm0, %ecx # sched: [4:1.00]
3269 ; HASWELL-SSE-NEXT:    cvttsd2si (%rdi), %eax # sched: [9:1.00]
3270 ; HASWELL-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.25]
3271 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3272 ;
3273 ; HASWELL-LABEL: test_cvttsd2si:
3274 ; HASWELL:       # %bb.0:
3275 ; HASWELL-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [4:1.00]
3276 ; HASWELL-NEXT:    vcvttsd2si (%rdi), %eax # sched: [9:1.00]
3277 ; HASWELL-NEXT:    addl %ecx, %eax # sched: [1:0.25]
3278 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3279 ;
3280 ; BROADWELL-SSE-LABEL: test_cvttsd2si:
3281 ; BROADWELL-SSE:       # %bb.0:
3282 ; BROADWELL-SSE-NEXT:    cvttsd2si (%rdi), %eax # sched: [9:1.00]
3283 ; BROADWELL-SSE-NEXT:    cvttsd2si %xmm0, %ecx # sched: [4:1.00]
3284 ; BROADWELL-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.25]
3285 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3286 ;
3287 ; BROADWELL-LABEL: test_cvttsd2si:
3288 ; BROADWELL:       # %bb.0:
3289 ; BROADWELL-NEXT:    vcvttsd2si (%rdi), %eax # sched: [9:1.00]
3290 ; BROADWELL-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [4:1.00]
3291 ; BROADWELL-NEXT:    addl %ecx, %eax # sched: [1:0.25]
3292 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3293 ;
3294 ; SKYLAKE-SSE-LABEL: test_cvttsd2si:
3295 ; SKYLAKE-SSE:       # %bb.0:
3296 ; SKYLAKE-SSE-NEXT:    cvttsd2si %xmm0, %ecx # sched: [6:1.00]
3297 ; SKYLAKE-SSE-NEXT:    cvttsd2si (%rdi), %eax # sched: [11:1.00]
3298 ; SKYLAKE-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.25]
3299 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3300 ;
3301 ; SKYLAKE-LABEL: test_cvttsd2si:
3302 ; SKYLAKE:       # %bb.0:
3303 ; SKYLAKE-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [6:1.00]
3304 ; SKYLAKE-NEXT:    vcvttsd2si (%rdi), %eax # sched: [11:1.00]
3305 ; SKYLAKE-NEXT:    addl %ecx, %eax # sched: [1:0.25]
3306 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3307 ;
3308 ; SKX-SSE-LABEL: test_cvttsd2si:
3309 ; SKX-SSE:       # %bb.0:
3310 ; SKX-SSE-NEXT:    cvttsd2si %xmm0, %ecx # sched: [6:1.00]
3311 ; SKX-SSE-NEXT:    cvttsd2si (%rdi), %eax # sched: [11:1.00]
3312 ; SKX-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.25]
3313 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3314 ;
3315 ; SKX-LABEL: test_cvttsd2si:
3316 ; SKX:       # %bb.0:
3317 ; SKX-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [6:1.00]
3318 ; SKX-NEXT:    vcvttsd2si (%rdi), %eax # sched: [11:1.00]
3319 ; SKX-NEXT:    addl %ecx, %eax # sched: [1:0.25]
3320 ; SKX-NEXT:    retq # sched: [7:1.00]
3321 ;
3322 ; BDVER2-SSE-LABEL: test_cvttsd2si:
3323 ; BDVER2-SSE:       # %bb.0:
3324 ; BDVER2-SSE-NEXT:    cvttsd2si (%rdi), %eax # sched: [18:1.00]
3325 ; BDVER2-SSE-NEXT:    cvttsd2si %xmm0, %ecx # sched: [13:1.00]
3326 ; BDVER2-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.50]
3327 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3328 ;
3329 ; BDVER2-LABEL: test_cvttsd2si:
3330 ; BDVER2:       # %bb.0:
3331 ; BDVER2-NEXT:    vcvttsd2si (%rdi), %eax # sched: [18:1.00]
3332 ; BDVER2-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [13:1.00]
3333 ; BDVER2-NEXT:    addl %ecx, %eax # sched: [1:0.50]
3334 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3335 ;
3336 ; BTVER2-SSE-LABEL: test_cvttsd2si:
3337 ; BTVER2-SSE:       # %bb.0:
3338 ; BTVER2-SSE-NEXT:    cvttsd2si (%rdi), %eax # sched: [12:1.00]
3339 ; BTVER2-SSE-NEXT:    cvttsd2si %xmm0, %ecx # sched: [7:1.00]
3340 ; BTVER2-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.50]
3341 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3342 ;
3343 ; BTVER2-LABEL: test_cvttsd2si:
3344 ; BTVER2:       # %bb.0:
3345 ; BTVER2-NEXT:    vcvttsd2si (%rdi), %eax # sched: [12:1.00]
3346 ; BTVER2-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [7:1.00]
3347 ; BTVER2-NEXT:    addl %ecx, %eax # sched: [1:0.50]
3348 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3349 ;
3350 ; ZNVER1-SSE-LABEL: test_cvttsd2si:
3351 ; ZNVER1-SSE:       # %bb.0:
3352 ; ZNVER1-SSE-NEXT:    cvttsd2si (%rdi), %eax # sched: [12:1.00]
3353 ; ZNVER1-SSE-NEXT:    cvttsd2si %xmm0, %ecx # sched: [5:1.00]
3354 ; ZNVER1-SSE-NEXT:    addl %ecx, %eax # sched: [1:0.25]
3355 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3356 ;
3357 ; ZNVER1-LABEL: test_cvttsd2si:
3358 ; ZNVER1:       # %bb.0:
3359 ; ZNVER1-NEXT:    vcvttsd2si (%rdi), %eax # sched: [12:1.00]
3360 ; ZNVER1-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [5:1.00]
3361 ; ZNVER1-NEXT:    addl %ecx, %eax # sched: [1:0.25]
3362 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3363   %1 = fptosi double %a0 to i32
3364   %2 = load double, double *%a1, align 8
3365   %3 = fptosi double %2 to i32
3366   %4 = add i32 %1, %3
3367   ret i32 %4
3368 }
3369
3370 define i64 @test_cvttsd2siq(double %a0, double *%a1) {
3371 ; GENERIC-LABEL: test_cvttsd2siq:
3372 ; GENERIC:       # %bb.0:
3373 ; GENERIC-NEXT:    cvttsd2si %xmm0, %rcx # sched: [5:1.00]
3374 ; GENERIC-NEXT:    cvttsd2si (%rdi), %rax # sched: [9:1.00]
3375 ; GENERIC-NEXT:    addq %rcx, %rax # sched: [1:0.33]
3376 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3377 ;
3378 ; ATOM-LABEL: test_cvttsd2siq:
3379 ; ATOM:       # %bb.0:
3380 ; ATOM-NEXT:    cvttsd2si (%rdi), %rax # sched: [9:4.50]
3381 ; ATOM-NEXT:    cvttsd2si %xmm0, %rcx # sched: [8:4.00]
3382 ; ATOM-NEXT:    addq %rcx, %rax # sched: [1:0.50]
3383 ; ATOM-NEXT:    retq # sched: [79:39.50]
3384 ;
3385 ; SLM-LABEL: test_cvttsd2siq:
3386 ; SLM:       # %bb.0:
3387 ; SLM-NEXT:    cvttsd2si (%rdi), %rax # sched: [7:1.00]
3388 ; SLM-NEXT:    cvttsd2si %xmm0, %rcx # sched: [4:0.50]
3389 ; SLM-NEXT:    addq %rcx, %rax # sched: [1:0.50]
3390 ; SLM-NEXT:    retq # sched: [4:1.00]
3391 ;
3392 ; SANDY-SSE-LABEL: test_cvttsd2siq:
3393 ; SANDY-SSE:       # %bb.0:
3394 ; SANDY-SSE-NEXT:    cvttsd2si %xmm0, %rcx # sched: [5:1.00]
3395 ; SANDY-SSE-NEXT:    cvttsd2si (%rdi), %rax # sched: [9:1.00]
3396 ; SANDY-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.33]
3397 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3398 ;
3399 ; SANDY-LABEL: test_cvttsd2siq:
3400 ; SANDY:       # %bb.0:
3401 ; SANDY-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [5:1.00]
3402 ; SANDY-NEXT:    vcvttsd2si (%rdi), %rax # sched: [10:1.00]
3403 ; SANDY-NEXT:    addq %rcx, %rax # sched: [1:0.33]
3404 ; SANDY-NEXT:    retq # sched: [1:1.00]
3405 ;
3406 ; HASWELL-SSE-LABEL: test_cvttsd2siq:
3407 ; HASWELL-SSE:       # %bb.0:
3408 ; HASWELL-SSE-NEXT:    cvttsd2si %xmm0, %rcx # sched: [4:1.00]
3409 ; HASWELL-SSE-NEXT:    cvttsd2si (%rdi), %rax # sched: [9:1.00]
3410 ; HASWELL-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.25]
3411 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3412 ;
3413 ; HASWELL-LABEL: test_cvttsd2siq:
3414 ; HASWELL:       # %bb.0:
3415 ; HASWELL-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [4:1.00]
3416 ; HASWELL-NEXT:    vcvttsd2si (%rdi), %rax # sched: [9:1.00]
3417 ; HASWELL-NEXT:    addq %rcx, %rax # sched: [1:0.25]
3418 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3419 ;
3420 ; BROADWELL-SSE-LABEL: test_cvttsd2siq:
3421 ; BROADWELL-SSE:       # %bb.0:
3422 ; BROADWELL-SSE-NEXT:    cvttsd2si (%rdi), %rax # sched: [9:1.00]
3423 ; BROADWELL-SSE-NEXT:    cvttsd2si %xmm0, %rcx # sched: [4:1.00]
3424 ; BROADWELL-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.25]
3425 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3426 ;
3427 ; BROADWELL-LABEL: test_cvttsd2siq:
3428 ; BROADWELL:       # %bb.0:
3429 ; BROADWELL-NEXT:    vcvttsd2si (%rdi), %rax # sched: [9:1.00]
3430 ; BROADWELL-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [4:1.00]
3431 ; BROADWELL-NEXT:    addq %rcx, %rax # sched: [1:0.25]
3432 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3433 ;
3434 ; SKYLAKE-SSE-LABEL: test_cvttsd2siq:
3435 ; SKYLAKE-SSE:       # %bb.0:
3436 ; SKYLAKE-SSE-NEXT:    cvttsd2si %xmm0, %rcx # sched: [6:1.00]
3437 ; SKYLAKE-SSE-NEXT:    cvttsd2si (%rdi), %rax # sched: [11:1.00]
3438 ; SKYLAKE-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.25]
3439 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3440 ;
3441 ; SKYLAKE-LABEL: test_cvttsd2siq:
3442 ; SKYLAKE:       # %bb.0:
3443 ; SKYLAKE-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [6:1.00]
3444 ; SKYLAKE-NEXT:    vcvttsd2si (%rdi), %rax # sched: [11:1.00]
3445 ; SKYLAKE-NEXT:    addq %rcx, %rax # sched: [1:0.25]
3446 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3447 ;
3448 ; SKX-SSE-LABEL: test_cvttsd2siq:
3449 ; SKX-SSE:       # %bb.0:
3450 ; SKX-SSE-NEXT:    cvttsd2si %xmm0, %rcx # sched: [6:1.00]
3451 ; SKX-SSE-NEXT:    cvttsd2si (%rdi), %rax # sched: [11:1.00]
3452 ; SKX-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.25]
3453 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3454 ;
3455 ; SKX-LABEL: test_cvttsd2siq:
3456 ; SKX:       # %bb.0:
3457 ; SKX-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [6:1.00]
3458 ; SKX-NEXT:    vcvttsd2si (%rdi), %rax # sched: [11:1.00]
3459 ; SKX-NEXT:    addq %rcx, %rax # sched: [1:0.25]
3460 ; SKX-NEXT:    retq # sched: [7:1.00]
3461 ;
3462 ; BDVER2-SSE-LABEL: test_cvttsd2siq:
3463 ; BDVER2-SSE:       # %bb.0:
3464 ; BDVER2-SSE-NEXT:    cvttsd2si (%rdi), %rax # sched: [18:1.00]
3465 ; BDVER2-SSE-NEXT:    cvttsd2si %xmm0, %rcx # sched: [13:1.00]
3466 ; BDVER2-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.50]
3467 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3468 ;
3469 ; BDVER2-LABEL: test_cvttsd2siq:
3470 ; BDVER2:       # %bb.0:
3471 ; BDVER2-NEXT:    vcvttsd2si (%rdi), %rax # sched: [18:1.00]
3472 ; BDVER2-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [13:1.00]
3473 ; BDVER2-NEXT:    addq %rcx, %rax # sched: [1:0.50]
3474 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3475 ;
3476 ; BTVER2-SSE-LABEL: test_cvttsd2siq:
3477 ; BTVER2-SSE:       # %bb.0:
3478 ; BTVER2-SSE-NEXT:    cvttsd2si (%rdi), %rax # sched: [12:1.00]
3479 ; BTVER2-SSE-NEXT:    cvttsd2si %xmm0, %rcx # sched: [7:1.00]
3480 ; BTVER2-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.50]
3481 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3482 ;
3483 ; BTVER2-LABEL: test_cvttsd2siq:
3484 ; BTVER2:       # %bb.0:
3485 ; BTVER2-NEXT:    vcvttsd2si (%rdi), %rax # sched: [12:1.00]
3486 ; BTVER2-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [7:1.00]
3487 ; BTVER2-NEXT:    addq %rcx, %rax # sched: [1:0.50]
3488 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3489 ;
3490 ; ZNVER1-SSE-LABEL: test_cvttsd2siq:
3491 ; ZNVER1-SSE:       # %bb.0:
3492 ; ZNVER1-SSE-NEXT:    cvttsd2si (%rdi), %rax # sched: [12:1.00]
3493 ; ZNVER1-SSE-NEXT:    cvttsd2si %xmm0, %rcx # sched: [5:1.00]
3494 ; ZNVER1-SSE-NEXT:    addq %rcx, %rax # sched: [1:0.25]
3495 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3496 ;
3497 ; ZNVER1-LABEL: test_cvttsd2siq:
3498 ; ZNVER1:       # %bb.0:
3499 ; ZNVER1-NEXT:    vcvttsd2si (%rdi), %rax # sched: [12:1.00]
3500 ; ZNVER1-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [5:1.00]
3501 ; ZNVER1-NEXT:    addq %rcx, %rax # sched: [1:0.25]
3502 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3503   %1 = fptosi double %a0 to i64
3504   %2 = load double, double *%a1, align 8
3505   %3 = fptosi double %2 to i64
3506   %4 = add i64 %1, %3
3507   ret i64 %4
3508 }
3509
3510 define <2 x double> @test_divpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
3511 ; GENERIC-LABEL: test_divpd:
3512 ; GENERIC:       # %bb.0:
3513 ; GENERIC-NEXT:    divpd %xmm1, %xmm0 # sched: [22:22.00]
3514 ; GENERIC-NEXT:    divpd (%rdi), %xmm0 # sched: [28:22.00]
3515 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3516 ;
3517 ; ATOM-LABEL: test_divpd:
3518 ; ATOM:       # %bb.0:
3519 ; ATOM-NEXT:    divpd %xmm1, %xmm0 # sched: [125:62.50]
3520 ; ATOM-NEXT:    divpd (%rdi), %xmm0 # sched: [125:62.50]
3521 ; ATOM-NEXT:    retq # sched: [79:39.50]
3522 ;
3523 ; SLM-LABEL: test_divpd:
3524 ; SLM:       # %bb.0:
3525 ; SLM-NEXT:    divpd %xmm1, %xmm0 # sched: [69:69.00]
3526 ; SLM-NEXT:    divpd (%rdi), %xmm0 # sched: [72:69.00]
3527 ; SLM-NEXT:    retq # sched: [4:1.00]
3528 ;
3529 ; SANDY-SSE-LABEL: test_divpd:
3530 ; SANDY-SSE:       # %bb.0:
3531 ; SANDY-SSE-NEXT:    divpd %xmm1, %xmm0 # sched: [22:22.00]
3532 ; SANDY-SSE-NEXT:    divpd (%rdi), %xmm0 # sched: [28:22.00]
3533 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3534 ;
3535 ; SANDY-LABEL: test_divpd:
3536 ; SANDY:       # %bb.0:
3537 ; SANDY-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [22:22.00]
3538 ; SANDY-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [28:22.00]
3539 ; SANDY-NEXT:    retq # sched: [1:1.00]
3540 ;
3541 ; HASWELL-SSE-LABEL: test_divpd:
3542 ; HASWELL-SSE:       # %bb.0:
3543 ; HASWELL-SSE-NEXT:    divpd %xmm1, %xmm0 # sched: [20:14.00]
3544 ; HASWELL-SSE-NEXT:    divpd (%rdi), %xmm0 # sched: [26:14.00]
3545 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3546 ;
3547 ; HASWELL-LABEL: test_divpd:
3548 ; HASWELL:       # %bb.0:
3549 ; HASWELL-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [20:14.00]
3550 ; HASWELL-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [26:14.00]
3551 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3552 ;
3553 ; BROADWELL-SSE-LABEL: test_divpd:
3554 ; BROADWELL-SSE:       # %bb.0:
3555 ; BROADWELL-SSE-NEXT:    divpd %xmm1, %xmm0 # sched: [14:8.00]
3556 ; BROADWELL-SSE-NEXT:    divpd (%rdi), %xmm0 # sched: [19:8.00]
3557 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3558 ;
3559 ; BROADWELL-LABEL: test_divpd:
3560 ; BROADWELL:       # %bb.0:
3561 ; BROADWELL-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [14:8.00]
3562 ; BROADWELL-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [19:8.00]
3563 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3564 ;
3565 ; SKYLAKE-SSE-LABEL: test_divpd:
3566 ; SKYLAKE-SSE:       # %bb.0:
3567 ; SKYLAKE-SSE-NEXT:    divpd %xmm1, %xmm0 # sched: [14:3.00]
3568 ; SKYLAKE-SSE-NEXT:    divpd (%rdi), %xmm0 # sched: [20:4.00]
3569 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3570 ;
3571 ; SKYLAKE-LABEL: test_divpd:
3572 ; SKYLAKE:       # %bb.0:
3573 ; SKYLAKE-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [14:3.00]
3574 ; SKYLAKE-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [20:4.00]
3575 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3576 ;
3577 ; SKX-SSE-LABEL: test_divpd:
3578 ; SKX-SSE:       # %bb.0:
3579 ; SKX-SSE-NEXT:    divpd %xmm1, %xmm0 # sched: [14:3.00]
3580 ; SKX-SSE-NEXT:    divpd (%rdi), %xmm0 # sched: [20:4.00]
3581 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3582 ;
3583 ; SKX-LABEL: test_divpd:
3584 ; SKX:       # %bb.0:
3585 ; SKX-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [14:3.00]
3586 ; SKX-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [20:4.00]
3587 ; SKX-NEXT:    retq # sched: [7:1.00]
3588 ;
3589 ; BDVER2-SSE-LABEL: test_divpd:
3590 ; BDVER2-SSE:       # %bb.0:
3591 ; BDVER2-SSE-NEXT:    divpd %xmm1, %xmm0 # sched: [9:9.50]
3592 ; BDVER2-SSE-NEXT:    divpd (%rdi), %xmm0 # sched: [14:9.50]
3593 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3594 ;
3595 ; BDVER2-LABEL: test_divpd:
3596 ; BDVER2:       # %bb.0:
3597 ; BDVER2-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [9:9.50]
3598 ; BDVER2-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [14:9.50]
3599 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3600 ;
3601 ; BTVER2-SSE-LABEL: test_divpd:
3602 ; BTVER2-SSE:       # %bb.0:
3603 ; BTVER2-SSE-NEXT:    divpd %xmm1, %xmm0 # sched: [19:19.00]
3604 ; BTVER2-SSE-NEXT:    divpd (%rdi), %xmm0 # sched: [24:19.00]
3605 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3606 ;
3607 ; BTVER2-LABEL: test_divpd:
3608 ; BTVER2:       # %bb.0:
3609 ; BTVER2-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [19:19.00]
3610 ; BTVER2-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [24:19.00]
3611 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3612 ;
3613 ; ZNVER1-SSE-LABEL: test_divpd:
3614 ; ZNVER1-SSE:       # %bb.0:
3615 ; ZNVER1-SSE-NEXT:    divpd %xmm1, %xmm0 # sched: [15:1.00]
3616 ; ZNVER1-SSE-NEXT:    divpd (%rdi), %xmm0 # sched: [22:1.00]
3617 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3618 ;
3619 ; ZNVER1-LABEL: test_divpd:
3620 ; ZNVER1:       # %bb.0:
3621 ; ZNVER1-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [15:1.00]
3622 ; ZNVER1-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [22:1.00]
3623 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3624   %1 = fdiv <2 x double> %a0, %a1
3625   %2 = load <2 x double>, <2 x double> *%a2, align 16
3626   %3 = fdiv <2 x double> %1, %2
3627   ret <2 x double> %3
3628 }
3629
3630 define double @test_divsd(double %a0, double %a1, double *%a2) {
3631 ; GENERIC-LABEL: test_divsd:
3632 ; GENERIC:       # %bb.0:
3633 ; GENERIC-NEXT:    divsd %xmm1, %xmm0 # sched: [22:22.00]
3634 ; GENERIC-NEXT:    divsd (%rdi), %xmm0 # sched: [28:22.00]
3635 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3636 ;
3637 ; ATOM-LABEL: test_divsd:
3638 ; ATOM:       # %bb.0:
3639 ; ATOM-NEXT:    divsd %xmm1, %xmm0 # sched: [62:31.00]
3640 ; ATOM-NEXT:    divsd (%rdi), %xmm0 # sched: [62:31.00]
3641 ; ATOM-NEXT:    retq # sched: [79:39.50]
3642 ;
3643 ; SLM-LABEL: test_divsd:
3644 ; SLM:       # %bb.0:
3645 ; SLM-NEXT:    divsd %xmm1, %xmm0 # sched: [34:32.00]
3646 ; SLM-NEXT:    divsd (%rdi), %xmm0 # sched: [37:32.00]
3647 ; SLM-NEXT:    retq # sched: [4:1.00]
3648 ;
3649 ; SANDY-SSE-LABEL: test_divsd:
3650 ; SANDY-SSE:       # %bb.0:
3651 ; SANDY-SSE-NEXT:    divsd %xmm1, %xmm0 # sched: [22:22.00]
3652 ; SANDY-SSE-NEXT:    divsd (%rdi), %xmm0 # sched: [28:22.00]
3653 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3654 ;
3655 ; SANDY-LABEL: test_divsd:
3656 ; SANDY:       # %bb.0:
3657 ; SANDY-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [22:22.00]
3658 ; SANDY-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [28:22.00]
3659 ; SANDY-NEXT:    retq # sched: [1:1.00]
3660 ;
3661 ; HASWELL-SSE-LABEL: test_divsd:
3662 ; HASWELL-SSE:       # %bb.0:
3663 ; HASWELL-SSE-NEXT:    divsd %xmm1, %xmm0 # sched: [20:14.00]
3664 ; HASWELL-SSE-NEXT:    divsd (%rdi), %xmm0 # sched: [25:14.00]
3665 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3666 ;
3667 ; HASWELL-LABEL: test_divsd:
3668 ; HASWELL:       # %bb.0:
3669 ; HASWELL-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [20:14.00]
3670 ; HASWELL-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [25:14.00]
3671 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3672 ;
3673 ; BROADWELL-SSE-LABEL: test_divsd:
3674 ; BROADWELL-SSE:       # %bb.0:
3675 ; BROADWELL-SSE-NEXT:    divsd %xmm1, %xmm0 # sched: [14:4.00]
3676 ; BROADWELL-SSE-NEXT:    divsd (%rdi), %xmm0 # sched: [19:8.00]
3677 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3678 ;
3679 ; BROADWELL-LABEL: test_divsd:
3680 ; BROADWELL:       # %bb.0:
3681 ; BROADWELL-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [14:4.00]
3682 ; BROADWELL-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [19:8.00]
3683 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3684 ;
3685 ; SKYLAKE-SSE-LABEL: test_divsd:
3686 ; SKYLAKE-SSE:       # %bb.0:
3687 ; SKYLAKE-SSE-NEXT:    divsd %xmm1, %xmm0 # sched: [14:3.00]
3688 ; SKYLAKE-SSE-NEXT:    divsd (%rdi), %xmm0 # sched: [19:4.00]
3689 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3690 ;
3691 ; SKYLAKE-LABEL: test_divsd:
3692 ; SKYLAKE:       # %bb.0:
3693 ; SKYLAKE-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [14:3.00]
3694 ; SKYLAKE-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [19:4.00]
3695 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3696 ;
3697 ; SKX-SSE-LABEL: test_divsd:
3698 ; SKX-SSE:       # %bb.0:
3699 ; SKX-SSE-NEXT:    divsd %xmm1, %xmm0 # sched: [14:3.00]
3700 ; SKX-SSE-NEXT:    divsd (%rdi), %xmm0 # sched: [19:4.00]
3701 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3702 ;
3703 ; SKX-LABEL: test_divsd:
3704 ; SKX:       # %bb.0:
3705 ; SKX-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [14:3.00]
3706 ; SKX-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [19:4.00]
3707 ; SKX-NEXT:    retq # sched: [7:1.00]
3708 ;
3709 ; BDVER2-SSE-LABEL: test_divsd:
3710 ; BDVER2-SSE:       # %bb.0:
3711 ; BDVER2-SSE-NEXT:    divsd %xmm1, %xmm0 # sched: [9:9.50]
3712 ; BDVER2-SSE-NEXT:    divsd (%rdi), %xmm0 # sched: [14:9.50]
3713 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3714 ;
3715 ; BDVER2-LABEL: test_divsd:
3716 ; BDVER2:       # %bb.0:
3717 ; BDVER2-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [9:9.50]
3718 ; BDVER2-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [14:9.50]
3719 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3720 ;
3721 ; BTVER2-SSE-LABEL: test_divsd:
3722 ; BTVER2-SSE:       # %bb.0:
3723 ; BTVER2-SSE-NEXT:    divsd %xmm1, %xmm0 # sched: [19:19.00]
3724 ; BTVER2-SSE-NEXT:    divsd (%rdi), %xmm0 # sched: [24:19.00]
3725 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3726 ;
3727 ; BTVER2-LABEL: test_divsd:
3728 ; BTVER2:       # %bb.0:
3729 ; BTVER2-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [19:19.00]
3730 ; BTVER2-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [24:19.00]
3731 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3732 ;
3733 ; ZNVER1-SSE-LABEL: test_divsd:
3734 ; ZNVER1-SSE:       # %bb.0:
3735 ; ZNVER1-SSE-NEXT:    divsd %xmm1, %xmm0 # sched: [15:1.00]
3736 ; ZNVER1-SSE-NEXT:    divsd (%rdi), %xmm0 # sched: [22:1.00]
3737 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3738 ;
3739 ; ZNVER1-LABEL: test_divsd:
3740 ; ZNVER1:       # %bb.0:
3741 ; ZNVER1-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [15:1.00]
3742 ; ZNVER1-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [22:1.00]
3743 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3744   %1 = fdiv double %a0, %a1
3745   %2 = load double, double *%a2, align 8
3746   %3 = fdiv double %1, %2
3747   ret double %3
3748 }
3749
3750 define void @test_lfence() {
3751 ; GENERIC-LABEL: test_lfence:
3752 ; GENERIC:       # %bb.0:
3753 ; GENERIC-NEXT:    lfence # sched: [1:1.00]
3754 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3755 ;
3756 ; ATOM-LABEL: test_lfence:
3757 ; ATOM:       # %bb.0:
3758 ; ATOM-NEXT:    lfence # sched: [1:0.50]
3759 ; ATOM-NEXT:    nop # sched: [1:0.50]
3760 ; ATOM-NEXT:    nop # sched: [1:0.50]
3761 ; ATOM-NEXT:    nop # sched: [1:0.50]
3762 ; ATOM-NEXT:    nop # sched: [1:0.50]
3763 ; ATOM-NEXT:    nop # sched: [1:0.50]
3764 ; ATOM-NEXT:    nop # sched: [1:0.50]
3765 ; ATOM-NEXT:    retq # sched: [79:39.50]
3766 ;
3767 ; SLM-LABEL: test_lfence:
3768 ; SLM:       # %bb.0:
3769 ; SLM-NEXT:    lfence # sched: [1:1.00]
3770 ; SLM-NEXT:    retq # sched: [4:1.00]
3771 ;
3772 ; SANDY-SSE-LABEL: test_lfence:
3773 ; SANDY-SSE:       # %bb.0:
3774 ; SANDY-SSE-NEXT:    lfence # sched: [1:1.00]
3775 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3776 ;
3777 ; SANDY-LABEL: test_lfence:
3778 ; SANDY:       # %bb.0:
3779 ; SANDY-NEXT:    lfence # sched: [1:1.00]
3780 ; SANDY-NEXT:    retq # sched: [1:1.00]
3781 ;
3782 ; HASWELL-SSE-LABEL: test_lfence:
3783 ; HASWELL-SSE:       # %bb.0:
3784 ; HASWELL-SSE-NEXT:    lfence # sched: [2:0.50]
3785 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3786 ;
3787 ; HASWELL-LABEL: test_lfence:
3788 ; HASWELL:       # %bb.0:
3789 ; HASWELL-NEXT:    lfence # sched: [2:0.50]
3790 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3791 ;
3792 ; BROADWELL-SSE-LABEL: test_lfence:
3793 ; BROADWELL-SSE:       # %bb.0:
3794 ; BROADWELL-SSE-NEXT:    lfence # sched: [2:0.50]
3795 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3796 ;
3797 ; BROADWELL-LABEL: test_lfence:
3798 ; BROADWELL:       # %bb.0:
3799 ; BROADWELL-NEXT:    lfence # sched: [2:0.50]
3800 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3801 ;
3802 ; SKYLAKE-SSE-LABEL: test_lfence:
3803 ; SKYLAKE-SSE:       # %bb.0:
3804 ; SKYLAKE-SSE-NEXT:    lfence # sched: [2:0.50]
3805 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3806 ;
3807 ; SKYLAKE-LABEL: test_lfence:
3808 ; SKYLAKE:       # %bb.0:
3809 ; SKYLAKE-NEXT:    lfence # sched: [2:0.50]
3810 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3811 ;
3812 ; SKX-SSE-LABEL: test_lfence:
3813 ; SKX-SSE:       # %bb.0:
3814 ; SKX-SSE-NEXT:    lfence # sched: [2:0.50]
3815 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3816 ;
3817 ; SKX-LABEL: test_lfence:
3818 ; SKX:       # %bb.0:
3819 ; SKX-NEXT:    lfence # sched: [2:0.50]
3820 ; SKX-NEXT:    retq # sched: [7:1.00]
3821 ;
3822 ; BDVER2-SSE-LABEL: test_lfence:
3823 ; BDVER2-SSE:       # %bb.0:
3824 ; BDVER2-SSE-NEXT:    lfence # sched: [1:1.00]
3825 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3826 ;
3827 ; BDVER2-LABEL: test_lfence:
3828 ; BDVER2:       # %bb.0:
3829 ; BDVER2-NEXT:    lfence # sched: [1:1.00]
3830 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3831 ;
3832 ; BTVER2-SSE-LABEL: test_lfence:
3833 ; BTVER2-SSE:       # %bb.0:
3834 ; BTVER2-SSE-NEXT:    lfence # sched: [1:1.00]
3835 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3836 ;
3837 ; BTVER2-LABEL: test_lfence:
3838 ; BTVER2:       # %bb.0:
3839 ; BTVER2-NEXT:    lfence # sched: [1:1.00]
3840 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3841 ;
3842 ; ZNVER1-SSE-LABEL: test_lfence:
3843 ; ZNVER1-SSE:       # %bb.0:
3844 ; ZNVER1-SSE-NEXT:    lfence # sched: [1:0.50]
3845 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3846 ;
3847 ; ZNVER1-LABEL: test_lfence:
3848 ; ZNVER1:       # %bb.0:
3849 ; ZNVER1-NEXT:    lfence # sched: [1:0.50]
3850 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3851   call void @llvm.x86.sse2.lfence()
3852   ret void
3853 }
3854 declare void @llvm.x86.sse2.lfence() nounwind readnone
3855
3856 define void @test_mfence() {
3857 ; GENERIC-LABEL: test_mfence:
3858 ; GENERIC:       # %bb.0:
3859 ; GENERIC-NEXT:    mfence # sched: [1:1.00]
3860 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3861 ;
3862 ; ATOM-LABEL: test_mfence:
3863 ; ATOM:       # %bb.0:
3864 ; ATOM-NEXT:    mfence # sched: [1:1.00]
3865 ; ATOM-NEXT:    nop # sched: [1:0.50]
3866 ; ATOM-NEXT:    nop # sched: [1:0.50]
3867 ; ATOM-NEXT:    nop # sched: [1:0.50]
3868 ; ATOM-NEXT:    nop # sched: [1:0.50]
3869 ; ATOM-NEXT:    nop # sched: [1:0.50]
3870 ; ATOM-NEXT:    nop # sched: [1:0.50]
3871 ; ATOM-NEXT:    retq # sched: [79:39.50]
3872 ;
3873 ; SLM-LABEL: test_mfence:
3874 ; SLM:       # %bb.0:
3875 ; SLM-NEXT:    mfence # sched: [1:1.00]
3876 ; SLM-NEXT:    retq # sched: [4:1.00]
3877 ;
3878 ; SANDY-SSE-LABEL: test_mfence:
3879 ; SANDY-SSE:       # %bb.0:
3880 ; SANDY-SSE-NEXT:    mfence # sched: [1:1.00]
3881 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3882 ;
3883 ; SANDY-LABEL: test_mfence:
3884 ; SANDY:       # %bb.0:
3885 ; SANDY-NEXT:    mfence # sched: [1:1.00]
3886 ; SANDY-NEXT:    retq # sched: [1:1.00]
3887 ;
3888 ; HASWELL-SSE-LABEL: test_mfence:
3889 ; HASWELL-SSE:       # %bb.0:
3890 ; HASWELL-SSE-NEXT:    mfence # sched: [2:0.50]
3891 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3892 ;
3893 ; HASWELL-LABEL: test_mfence:
3894 ; HASWELL:       # %bb.0:
3895 ; HASWELL-NEXT:    mfence # sched: [2:0.50]
3896 ; HASWELL-NEXT:    retq # sched: [7:1.00]
3897 ;
3898 ; BROADWELL-SSE-LABEL: test_mfence:
3899 ; BROADWELL-SSE:       # %bb.0:
3900 ; BROADWELL-SSE-NEXT:    mfence # sched: [2:0.50]
3901 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
3902 ;
3903 ; BROADWELL-LABEL: test_mfence:
3904 ; BROADWELL:       # %bb.0:
3905 ; BROADWELL-NEXT:    mfence # sched: [2:0.50]
3906 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3907 ;
3908 ; SKYLAKE-SSE-LABEL: test_mfence:
3909 ; SKYLAKE-SSE:       # %bb.0:
3910 ; SKYLAKE-SSE-NEXT:    mfence # sched: [3:0.50]
3911 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
3912 ;
3913 ; SKYLAKE-LABEL: test_mfence:
3914 ; SKYLAKE:       # %bb.0:
3915 ; SKYLAKE-NEXT:    mfence # sched: [3:0.50]
3916 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3917 ;
3918 ; SKX-SSE-LABEL: test_mfence:
3919 ; SKX-SSE:       # %bb.0:
3920 ; SKX-SSE-NEXT:    mfence # sched: [3:0.50]
3921 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
3922 ;
3923 ; SKX-LABEL: test_mfence:
3924 ; SKX:       # %bb.0:
3925 ; SKX-NEXT:    mfence # sched: [3:0.50]
3926 ; SKX-NEXT:    retq # sched: [7:1.00]
3927 ;
3928 ; BDVER2-SSE-LABEL: test_mfence:
3929 ; BDVER2-SSE:       # %bb.0:
3930 ; BDVER2-SSE-NEXT:    mfence # sched: [1:1.00]
3931 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
3932 ;
3933 ; BDVER2-LABEL: test_mfence:
3934 ; BDVER2:       # %bb.0:
3935 ; BDVER2-NEXT:    mfence # sched: [1:1.00]
3936 ; BDVER2-NEXT:    retq # sched: [5:1.00]
3937 ;
3938 ; BTVER2-SSE-LABEL: test_mfence:
3939 ; BTVER2-SSE:       # %bb.0:
3940 ; BTVER2-SSE-NEXT:    mfence # sched: [1:1.00]
3941 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
3942 ;
3943 ; BTVER2-LABEL: test_mfence:
3944 ; BTVER2:       # %bb.0:
3945 ; BTVER2-NEXT:    mfence # sched: [1:1.00]
3946 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3947 ;
3948 ; ZNVER1-SSE-LABEL: test_mfence:
3949 ; ZNVER1-SSE:       # %bb.0:
3950 ; ZNVER1-SSE-NEXT:    mfence # sched: [1:0.50]
3951 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
3952 ;
3953 ; ZNVER1-LABEL: test_mfence:
3954 ; ZNVER1:       # %bb.0:
3955 ; ZNVER1-NEXT:    mfence # sched: [1:0.50]
3956 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3957   call void @llvm.x86.sse2.mfence()
3958   ret void
3959 }
3960 declare void @llvm.x86.sse2.mfence() nounwind readnone
3961
3962 define void @test_maskmovdqu(<16 x i8> %a0, <16 x i8> %a1, i8* %a2) {
3963 ; GENERIC-LABEL: test_maskmovdqu:
3964 ; GENERIC:       # %bb.0:
3965 ; GENERIC-NEXT:    maskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
3966 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3967 ;
3968 ; ATOM-LABEL: test_maskmovdqu:
3969 ; ATOM:       # %bb.0:
3970 ; ATOM-NEXT:    maskmovdqu %xmm1, %xmm0 # sched: [2:1.00]
3971 ; ATOM-NEXT:    nop # sched: [1:0.50]
3972 ; ATOM-NEXT:    nop # sched: [1:0.50]
3973 ; ATOM-NEXT:    nop # sched: [1:0.50]
3974 ; ATOM-NEXT:    nop # sched: [1:0.50]
3975 ; ATOM-NEXT:    retq # sched: [79:39.50]
3976 ;
3977 ; SLM-LABEL: test_maskmovdqu:
3978 ; SLM:       # %bb.0:
3979 ; SLM-NEXT:    maskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
3980 ; SLM-NEXT:    retq # sched: [4:1.00]
3981 ;
3982 ; SANDY-SSE-LABEL: test_maskmovdqu:
3983 ; SANDY-SSE:       # %bb.0:
3984 ; SANDY-SSE-NEXT:    maskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
3985 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
3986 ;
3987 ; SANDY-LABEL: test_maskmovdqu:
3988 ; SANDY:       # %bb.0:
3989 ; SANDY-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
3990 ; SANDY-NEXT:    retq # sched: [1:1.00]
3991 ;
3992 ; HASWELL-SSE-LABEL: test_maskmovdqu:
3993 ; HASWELL-SSE:       # %bb.0:
3994 ; HASWELL-SSE-NEXT:    maskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
3995 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
3996 ;
3997 ; HASWELL-LABEL: test_maskmovdqu:
3998 ; HASWELL:       # %bb.0:
3999 ; HASWELL-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
4000 ; HASWELL-NEXT:    retq # sched: [7:1.00]
4001 ;
4002 ; BROADWELL-SSE-LABEL: test_maskmovdqu:
4003 ; BROADWELL-SSE:       # %bb.0:
4004 ; BROADWELL-SSE-NEXT:    maskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
4005 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
4006 ;
4007 ; BROADWELL-LABEL: test_maskmovdqu:
4008 ; BROADWELL:       # %bb.0:
4009 ; BROADWELL-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
4010 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4011 ;
4012 ; SKYLAKE-SSE-LABEL: test_maskmovdqu:
4013 ; SKYLAKE-SSE:       # %bb.0:
4014 ; SKYLAKE-SSE-NEXT:    maskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
4015 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
4016 ;
4017 ; SKYLAKE-LABEL: test_maskmovdqu:
4018 ; SKYLAKE:       # %bb.0:
4019 ; SKYLAKE-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
4020 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4021 ;
4022 ; SKX-SSE-LABEL: test_maskmovdqu:
4023 ; SKX-SSE:       # %bb.0:
4024 ; SKX-SSE-NEXT:    maskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
4025 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
4026 ;
4027 ; SKX-LABEL: test_maskmovdqu:
4028 ; SKX:       # %bb.0:
4029 ; SKX-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
4030 ; SKX-NEXT:    retq # sched: [7:1.00]
4031 ;
4032 ; BDVER2-SSE-LABEL: test_maskmovdqu:
4033 ; BDVER2-SSE:       # %bb.0:
4034 ; BDVER2-SSE-NEXT:    maskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
4035 ; BDVER2-SSE-NEXT:    retq # sched: [5:1.00]
4036 ;
4037 ; BDVER2-LABEL: test_maskmovdqu:
4038 ; BDVER2:       # %bb.0:
4039 ; BDVER2-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
4040 ; BDVER2-NEXT:    retq # sched: [5:1.00]
4041 ;
4042 ; BTVER2-SSE-LABEL: test_maskmovdqu:
4043 ; BTVER2-SSE:       # %bb.0:
4044 ; BTVER2-SSE-NEXT:    maskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
4045 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
4046 ;
4047 ; BTVER2-LABEL: test_maskmovdqu:
4048 ; BTVER2:       # %bb.0:
4049 ; BTVER2-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
4050 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4051 ;
4052 ; ZNVER1-SSE-LABEL: test_maskmovdqu:
4053 ; ZNVER1-SSE:       # %bb.0:
4054 ; ZNVER1-SSE-NEXT:    maskmovdqu %xmm1, %xmm0 # sched: [100:0.25]
4055 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
4056 ;
4057 ; ZNVER1-LABEL: test_maskmovdqu:
4058 ; ZNVER1:       # %bb.0:
4059 ; ZNVER1-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [100:0.25]
4060 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4061   call void @llvm.x86.sse2.maskmov.dqu(<16 x i8> %a0, <16 x i8> %a1, i8* %a2)
4062   ret void
4063 }
4064 declare void @llvm.x86.sse2.maskmov.dqu(<16 x i8>, <16 x i8>, i8*) nounwind
4065
4066 define <2 x double> @test_maxpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
4067 ; GENERIC-LABEL: test_maxpd:
4068 ; GENERIC:       # %bb.0:
4069 ; GENERIC-NEXT:    maxpd %xmm1, %xmm0 # sched: [3:1.00]
4070 ; GENERIC-NEXT:    maxpd (%rdi), %xmm0 # sched: [9:1.00]
4071 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4072 ;
4073 ; ATOM-LABEL: test_maxpd:
4074 ; ATOM:       # %bb.0:
4075 ; ATOM-NEXT:    maxpd %xmm1, %xmm0 # sched: [6:3.00]
4076 ; ATOM-NEXT:    maxpd (%rdi), %xmm0 # sched: [7:3.50]
4077 ; ATOM-NEXT:    retq # sched: [79:39.50]
4078 ;
4079 ; SLM-LABEL: test_maxpd:
4080 ; SLM:       # %bb.0:
4081 ; SLM-NEXT:    maxpd %xmm1, %xmm0 # sched: [3:1.00]
4082 ; SLM-NEXT:    maxpd (%rdi), %xmm0 # sched: [6:1.00]
4083 ; SLM-NEXT:    retq # sched: [4:1.00]
4084 ;
4085 ; SANDY-SSE-LABEL: test_maxpd:
4086 ; SANDY-SSE:       # %bb.0:
4087 ; SANDY-SSE-NEXT:    maxpd %xmm1, %xmm0 # sched: [3:1.00]
4088 ; SANDY-SSE-NEXT:    maxpd (%rdi), %xmm0 # sched: [9:1.00]
4089 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
4090 ;
4091 ; SANDY-LABEL: test_maxpd:
4092 ; SANDY:       # %bb.0:
4093 ; SANDY-NEXT:    vmaxpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
4094 ; SANDY-NEXT:    vmaxpd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
4095 ; SANDY-NEXT:    retq # sched: [1:1.00]
4096 ;
4097 ; HASWELL-SSE-LABEL: test_maxpd:
4098 ; HASWELL-SSE:       # %bb.0:
4099 ; HASWELL-SSE-NEXT:    maxpd %xmm1, %xmm0 # sched: [3:1.00]
4100 ; HASWELL-SSE-NEXT:    maxpd (%rdi), %xmm0 # sched: [9:1.00]
4101 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
4102 ;
4103 ; HASWELL-LABEL: test_maxpd:
4104 ; HASWELL:       # %bb.0:
4105 ; HASWELL-NEXT:    vmaxpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
4106 ; HASWELL-NEXT:    vmaxpd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
4107 ; HASWELL-NEXT:    retq # sched: [7:1.00]
4108 ;
4109 ; BROADWELL-SSE-LABEL: test_maxpd:
4110 ; BROADWELL-SSE:       # %bb.0:
4111 ; BROADWELL-SSE-NEXT:    maxpd %xmm1, %xmm0 # sched: [3:1.00]
4112 ; BROADWELL-SSE-NEXT:    maxpd (%rdi), %xmm0 # sched: [8:1.00]
4113 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
4114 ;
4115 ; BROADWELL-LABEL: test_maxpd:
4116 ; BROADWELL:       # %bb.0:
4117 ; BROADWELL-NEXT:    vmaxpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
4118 ; BROADWELL-NEXT:    vmaxpd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
4119 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4120 ;
4121 ; SKYLAKE-SSE-LABEL: test_maxpd:
4122 ; SKYLAKE-SSE:       # %bb.0: