[PowerPC] Recommit r314244 with refactoring and off by default
[llvm-core.git] / test / CodeGen / X86 / sse2-schedule.ll
blobb7a4d7be2cdbc1ccd9f3728f570ab22e518672bc
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-prefix=CHECK --check-prefix=GENERIC
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=atom | FileCheck %s --check-prefix=CHECK --check-prefix=ATOM
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=slm | FileCheck %s --check-prefix=CHECK --check-prefix=SLM
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell | FileCheck %s --check-prefix=CHECK --check-prefix=BROADWELL
9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE
10 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx | FileCheck %s --check-prefix=CHECK --check-prefix=SKX
11 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2
12 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1
14 define <2 x double> @test_addpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
15 ; GENERIC-LABEL: test_addpd:
16 ; GENERIC:       # BB#0:
17 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
18 ; GENERIC-NEXT:    addpd (%rdi), %xmm0 # sched: [9:1.00]
19 ; GENERIC-NEXT:    retq # sched: [1:1.00]
21 ; ATOM-LABEL: test_addpd:
22 ; ATOM:       # BB#0:
23 ; ATOM-NEXT:    addpd %xmm1, %xmm0 # sched: [6:3.00]
24 ; ATOM-NEXT:    addpd (%rdi), %xmm0 # sched: [7:3.50]
25 ; ATOM-NEXT:    retq # sched: [79:39.50]
27 ; SLM-LABEL: test_addpd:
28 ; SLM:       # BB#0:
29 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
30 ; SLM-NEXT:    addpd (%rdi), %xmm0 # sched: [6:1.00]
31 ; SLM-NEXT:    retq # sched: [4:1.00]
33 ; SANDY-LABEL: test_addpd:
34 ; SANDY:       # BB#0:
35 ; SANDY-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
36 ; SANDY-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
37 ; SANDY-NEXT:    retq # sched: [1:1.00]
39 ; HASWELL-LABEL: test_addpd:
40 ; HASWELL:       # BB#0:
41 ; HASWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
42 ; HASWELL-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00]
43 ; HASWELL-NEXT:    retq # sched: [2:1.00]
45 ; BROADWELL-LABEL: test_addpd:
46 ; BROADWELL:       # BB#0:
47 ; BROADWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
48 ; BROADWELL-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
49 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
51 ; SKYLAKE-LABEL: test_addpd:
52 ; SKYLAKE:       # BB#0:
53 ; SKYLAKE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
54 ; SKYLAKE-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
55 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
57 ; SKX-LABEL: test_addpd:
58 ; SKX:       # BB#0:
59 ; SKX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
60 ; SKX-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
61 ; SKX-NEXT:    retq # sched: [7:1.00]
63 ; BTVER2-LABEL: test_addpd:
64 ; BTVER2:       # BB#0:
65 ; BTVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
66 ; BTVER2-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
67 ; BTVER2-NEXT:    retq # sched: [4:1.00]
69 ; ZNVER1-LABEL: test_addpd:
70 ; ZNVER1:       # BB#0:
71 ; ZNVER1-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
72 ; ZNVER1-NEXT:    vaddpd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
73 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
74   %1 = fadd <2 x double> %a0, %a1
75   %2 = load <2 x double>, <2 x double> *%a2, align 16
76   %3 = fadd <2 x double> %1, %2
77   ret <2 x double> %3
80 define double @test_addsd(double %a0, double %a1, double *%a2) {
81 ; GENERIC-LABEL: test_addsd:
82 ; GENERIC:       # BB#0:
83 ; GENERIC-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
84 ; GENERIC-NEXT:    addsd (%rdi), %xmm0 # sched: [9:1.00]
85 ; GENERIC-NEXT:    retq # sched: [1:1.00]
87 ; ATOM-LABEL: test_addsd:
88 ; ATOM:       # BB#0:
89 ; ATOM-NEXT:    addsd %xmm1, %xmm0 # sched: [5:5.00]
90 ; ATOM-NEXT:    addsd (%rdi), %xmm0 # sched: [5:5.00]
91 ; ATOM-NEXT:    retq # sched: [79:39.50]
93 ; SLM-LABEL: test_addsd:
94 ; SLM:       # BB#0:
95 ; SLM-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
96 ; SLM-NEXT:    addsd (%rdi), %xmm0 # sched: [6:1.00]
97 ; SLM-NEXT:    retq # sched: [4:1.00]
99 ; SANDY-LABEL: test_addsd:
100 ; SANDY:       # BB#0:
101 ; SANDY-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
102 ; SANDY-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
103 ; SANDY-NEXT:    retq # sched: [1:1.00]
105 ; HASWELL-LABEL: test_addsd:
106 ; HASWELL:       # BB#0:
107 ; HASWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
108 ; HASWELL-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [3:1.00]
109 ; HASWELL-NEXT:    retq # sched: [2:1.00]
111 ; BROADWELL-LABEL: test_addsd:
112 ; BROADWELL:       # BB#0:
113 ; BROADWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
114 ; BROADWELL-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
115 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
117 ; SKYLAKE-LABEL: test_addsd:
118 ; SKYLAKE:       # BB#0:
119 ; SKYLAKE-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
120 ; SKYLAKE-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
121 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
123 ; SKX-LABEL: test_addsd:
124 ; SKX:       # BB#0:
125 ; SKX-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
126 ; SKX-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
127 ; SKX-NEXT:    retq # sched: [7:1.00]
129 ; BTVER2-LABEL: test_addsd:
130 ; BTVER2:       # BB#0:
131 ; BTVER2-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
132 ; BTVER2-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
133 ; BTVER2-NEXT:    retq # sched: [4:1.00]
135 ; ZNVER1-LABEL: test_addsd:
136 ; ZNVER1:       # BB#0:
137 ; ZNVER1-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
138 ; ZNVER1-NEXT:    vaddsd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
139 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
140   %1 = fadd double %a0, %a1
141   %2 = load double, double *%a2, align 8
142   %3 = fadd double %1, %2
143   ret double %3
146 define <2 x double> @test_andpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
147 ; GENERIC-LABEL: test_andpd:
148 ; GENERIC:       # BB#0:
149 ; GENERIC-NEXT:    andpd %xmm1, %xmm0 # sched: [1:1.00]
150 ; GENERIC-NEXT:    andpd (%rdi), %xmm0 # sched: [7:1.00]
151 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
152 ; GENERIC-NEXT:    retq # sched: [1:1.00]
154 ; ATOM-LABEL: test_andpd:
155 ; ATOM:       # BB#0:
156 ; ATOM-NEXT:    andpd %xmm1, %xmm0 # sched: [1:0.50]
157 ; ATOM-NEXT:    andpd (%rdi), %xmm0 # sched: [1:1.00]
158 ; ATOM-NEXT:    addpd %xmm1, %xmm0 # sched: [6:3.00]
159 ; ATOM-NEXT:    retq # sched: [79:39.50]
161 ; SLM-LABEL: test_andpd:
162 ; SLM:       # BB#0:
163 ; SLM-NEXT:    andpd %xmm1, %xmm0 # sched: [1:0.50]
164 ; SLM-NEXT:    andpd (%rdi), %xmm0 # sched: [4:1.00]
165 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
166 ; SLM-NEXT:    retq # sched: [4:1.00]
168 ; SANDY-LABEL: test_andpd:
169 ; SANDY:       # BB#0:
170 ; SANDY-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
171 ; SANDY-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
172 ; SANDY-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
173 ; SANDY-NEXT:    retq # sched: [1:1.00]
175 ; HASWELL-LABEL: test_andpd:
176 ; HASWELL:       # BB#0:
177 ; HASWELL-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
178 ; HASWELL-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [1:1.00]
179 ; HASWELL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
180 ; HASWELL-NEXT:    retq # sched: [2:1.00]
182 ; BROADWELL-LABEL: test_andpd:
183 ; BROADWELL:       # BB#0:
184 ; BROADWELL-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
185 ; BROADWELL-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
186 ; BROADWELL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
187 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
189 ; SKYLAKE-LABEL: test_andpd:
190 ; SKYLAKE:       # BB#0:
191 ; SKYLAKE-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
192 ; SKYLAKE-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
193 ; SKYLAKE-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [4:0.50]
194 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
196 ; SKX-LABEL: test_andpd:
197 ; SKX:       # BB#0:
198 ; SKX-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
199 ; SKX-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
200 ; SKX-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [4:0.33]
201 ; SKX-NEXT:    retq # sched: [7:1.00]
203 ; BTVER2-LABEL: test_andpd:
204 ; BTVER2:       # BB#0:
205 ; BTVER2-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
206 ; BTVER2-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
207 ; BTVER2-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
208 ; BTVER2-NEXT:    retq # sched: [4:1.00]
210 ; ZNVER1-LABEL: test_andpd:
211 ; ZNVER1:       # BB#0:
212 ; ZNVER1-NEXT:    vandpd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
213 ; ZNVER1-NEXT:    vandpd (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
214 ; ZNVER1-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
215 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
216   %1 = bitcast <2 x double> %a0 to <4 x i32>
217   %2 = bitcast <2 x double> %a1 to <4 x i32>
218   %3 = and <4 x i32> %1, %2
219   %4 = load <2 x double>, <2 x double> *%a2, align 16
220   %5 = bitcast <2 x double> %4 to <4 x i32>
221   %6 = and <4 x i32> %3, %5
222   %7 = bitcast <4 x i32> %6 to <2 x double>
223   %8 = fadd <2 x double> %a1, %7
224   ret <2 x double> %8
227 define <2 x double> @test_andnotpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
228 ; GENERIC-LABEL: test_andnotpd:
229 ; GENERIC:       # BB#0:
230 ; GENERIC-NEXT:    andnpd %xmm1, %xmm0 # sched: [1:1.00]
231 ; GENERIC-NEXT:    andnpd (%rdi), %xmm0 # sched: [7:1.00]
232 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
233 ; GENERIC-NEXT:    retq # sched: [1:1.00]
235 ; ATOM-LABEL: test_andnotpd:
236 ; ATOM:       # BB#0:
237 ; ATOM-NEXT:    andnpd %xmm1, %xmm0 # sched: [1:0.50]
238 ; ATOM-NEXT:    andnpd (%rdi), %xmm0 # sched: [1:1.00]
239 ; ATOM-NEXT:    addpd %xmm1, %xmm0 # sched: [6:3.00]
240 ; ATOM-NEXT:    retq # sched: [79:39.50]
242 ; SLM-LABEL: test_andnotpd:
243 ; SLM:       # BB#0:
244 ; SLM-NEXT:    andnpd %xmm1, %xmm0 # sched: [1:0.50]
245 ; SLM-NEXT:    andnpd (%rdi), %xmm0 # sched: [4:1.00]
246 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
247 ; SLM-NEXT:    retq # sched: [4:1.00]
249 ; SANDY-LABEL: test_andnotpd:
250 ; SANDY:       # BB#0:
251 ; SANDY-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
252 ; SANDY-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
253 ; SANDY-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
254 ; SANDY-NEXT:    retq # sched: [1:1.00]
256 ; HASWELL-LABEL: test_andnotpd:
257 ; HASWELL:       # BB#0:
258 ; HASWELL-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
259 ; HASWELL-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [1:1.00]
260 ; HASWELL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
261 ; HASWELL-NEXT:    retq # sched: [2:1.00]
263 ; BROADWELL-LABEL: test_andnotpd:
264 ; BROADWELL:       # BB#0:
265 ; BROADWELL-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
266 ; BROADWELL-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
267 ; BROADWELL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
268 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
270 ; SKYLAKE-LABEL: test_andnotpd:
271 ; SKYLAKE:       # BB#0:
272 ; SKYLAKE-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
273 ; SKYLAKE-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
274 ; SKYLAKE-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [4:0.50]
275 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
277 ; SKX-LABEL: test_andnotpd:
278 ; SKX:       # BB#0:
279 ; SKX-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
280 ; SKX-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
281 ; SKX-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [4:0.33]
282 ; SKX-NEXT:    retq # sched: [7:1.00]
284 ; BTVER2-LABEL: test_andnotpd:
285 ; BTVER2:       # BB#0:
286 ; BTVER2-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
287 ; BTVER2-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
288 ; BTVER2-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
289 ; BTVER2-NEXT:    retq # sched: [4:1.00]
291 ; ZNVER1-LABEL: test_andnotpd:
292 ; ZNVER1:       # BB#0:
293 ; ZNVER1-NEXT:    vandnpd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
294 ; ZNVER1-NEXT:    vandnpd (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
295 ; ZNVER1-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
296 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
297   %1 = bitcast <2 x double> %a0 to <4 x i32>
298   %2 = bitcast <2 x double> %a1 to <4 x i32>
299   %3 = xor <4 x i32> %1, <i32 -1, i32 -1, i32 -1, i32 -1>
300   %4 = and <4 x i32> %3, %2
301   %5 = load <2 x double>, <2 x double> *%a2, align 16
302   %6 = bitcast <2 x double> %5 to <4 x i32>
303   %7 = xor <4 x i32> %4, <i32 -1, i32 -1, i32 -1, i32 -1>
304   %8 = and <4 x i32> %6, %7
305   %9 = bitcast <4 x i32> %8 to <2 x double>
306   %10 = fadd <2 x double> %a1, %9
307   ret <2 x double> %10
310 define void @test_clflush(i8* %p){
311 ; GENERIC-LABEL: test_clflush:
312 ; GENERIC:       # BB#0:
313 ; GENERIC-NEXT:    clflush (%rdi) # sched: [5:1.00]
314 ; GENERIC-NEXT:    retq # sched: [1:1.00]
316 ; ATOM-LABEL: test_clflush:
317 ; ATOM:       # BB#0:
318 ; ATOM-NEXT:    clflush (%rdi) # sched: [1:1.00]
319 ; ATOM-NEXT:    nop # sched: [1:0.50]
320 ; ATOM-NEXT:    nop # sched: [1:0.50]
321 ; ATOM-NEXT:    nop # sched: [1:0.50]
322 ; ATOM-NEXT:    nop # sched: [1:0.50]
323 ; ATOM-NEXT:    nop # sched: [1:0.50]
324 ; ATOM-NEXT:    nop # sched: [1:0.50]
325 ; ATOM-NEXT:    retq # sched: [79:39.50]
327 ; SLM-LABEL: test_clflush:
328 ; SLM:       # BB#0:
329 ; SLM-NEXT:    clflush (%rdi) # sched: [3:1.00]
330 ; SLM-NEXT:    retq # sched: [4:1.00]
332 ; SANDY-LABEL: test_clflush:
333 ; SANDY:       # BB#0:
334 ; SANDY-NEXT:    clflush (%rdi) # sched: [5:1.00]
335 ; SANDY-NEXT:    retq # sched: [1:1.00]
337 ; HASWELL-LABEL: test_clflush:
338 ; HASWELL:       # BB#0:
339 ; HASWELL-NEXT:    clflush (%rdi) # sched: [2:1.00]
340 ; HASWELL-NEXT:    retq # sched: [2:1.00]
342 ; BROADWELL-LABEL: test_clflush:
343 ; BROADWELL:       # BB#0:
344 ; BROADWELL-NEXT:    clflush (%rdi) # sched: [2:1.00]
345 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
347 ; SKYLAKE-LABEL: test_clflush:
348 ; SKYLAKE:       # BB#0:
349 ; SKYLAKE-NEXT:    clflush (%rdi) # sched: [2:1.00]
350 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
352 ; SKX-LABEL: test_clflush:
353 ; SKX:       # BB#0:
354 ; SKX-NEXT:    clflush (%rdi) # sched: [2:1.00]
355 ; SKX-NEXT:    retq # sched: [7:1.00]
357 ; BTVER2-LABEL: test_clflush:
358 ; BTVER2:       # BB#0:
359 ; BTVER2-NEXT:    clflush (%rdi) # sched: [5:1.00]
360 ; BTVER2-NEXT:    retq # sched: [4:1.00]
362 ; ZNVER1-LABEL: test_clflush:
363 ; ZNVER1:       # BB#0:
364 ; ZNVER1-NEXT:    clflush (%rdi) # sched: [8:0.50]
365 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
366   tail call void @llvm.x86.sse2.clflush(i8* %p)
367   ret void
369 declare void @llvm.x86.sse2.clflush(i8*) nounwind
371 define <2 x double> @test_cmppd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
372 ; GENERIC-LABEL: test_cmppd:
373 ; GENERIC:       # BB#0:
374 ; GENERIC-NEXT:    cmpeqpd %xmm0, %xmm1 # sched: [3:1.00]
375 ; GENERIC-NEXT:    cmpeqpd (%rdi), %xmm0 # sched: [9:1.00]
376 ; GENERIC-NEXT:    orpd %xmm1, %xmm0 # sched: [1:1.00]
377 ; GENERIC-NEXT:    retq # sched: [1:1.00]
379 ; ATOM-LABEL: test_cmppd:
380 ; ATOM:       # BB#0:
381 ; ATOM-NEXT:    cmpeqpd %xmm0, %xmm1 # sched: [6:3.00]
382 ; ATOM-NEXT:    cmpeqpd (%rdi), %xmm0 # sched: [7:3.50]
383 ; ATOM-NEXT:    orpd %xmm1, %xmm0 # sched: [1:0.50]
384 ; ATOM-NEXT:    retq # sched: [79:39.50]
386 ; SLM-LABEL: test_cmppd:
387 ; SLM:       # BB#0:
388 ; SLM-NEXT:    cmpeqpd %xmm0, %xmm1 # sched: [3:1.00]
389 ; SLM-NEXT:    cmpeqpd (%rdi), %xmm0 # sched: [6:1.00]
390 ; SLM-NEXT:    orpd %xmm1, %xmm0 # sched: [1:0.50]
391 ; SLM-NEXT:    retq # sched: [4:1.00]
393 ; SANDY-LABEL: test_cmppd:
394 ; SANDY:       # BB#0:
395 ; SANDY-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
396 ; SANDY-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
397 ; SANDY-NEXT:    vorpd %xmm0, %xmm1, %xmm0 # sched: [1:1.00]
398 ; SANDY-NEXT:    retq # sched: [1:1.00]
400 ; HASWELL-LABEL: test_cmppd:
401 ; HASWELL:       # BB#0:
402 ; HASWELL-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
403 ; HASWELL-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00]
404 ; HASWELL-NEXT:    vorpd %xmm0, %xmm1, %xmm0 # sched: [1:1.00]
405 ; HASWELL-NEXT:    retq # sched: [2:1.00]
407 ; BROADWELL-LABEL: test_cmppd:
408 ; BROADWELL:       # BB#0:
409 ; BROADWELL-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
410 ; BROADWELL-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
411 ; BROADWELL-NEXT:    vorpd %xmm0, %xmm1, %xmm0 # sched: [1:1.00]
412 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
414 ; SKYLAKE-LABEL: test_cmppd:
415 ; SKYLAKE:       # BB#0:
416 ; SKYLAKE-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [4:0.33]
417 ; SKYLAKE-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
418 ; SKYLAKE-NEXT:    vorpd %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
419 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
421 ; SKX-LABEL: test_cmppd:
422 ; SKX:       # BB#0:
423 ; SKX-NEXT:    vcmpeqpd %xmm1, %xmm0, %k0 # sched: [3:1.00]
424 ; SKX-NEXT:    vcmpeqpd (%rdi), %xmm0, %k1 # sched: [9:1.00]
425 ; SKX-NEXT:    korw %k1, %k0, %k0 # sched: [1:1.00]
426 ; SKX-NEXT:    vpmovm2q %k0, %xmm0
427 ; SKX-NEXT:    retq # sched: [7:1.00]
429 ; BTVER2-LABEL: test_cmppd:
430 ; BTVER2:       # BB#0:
431 ; BTVER2-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
432 ; BTVER2-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
433 ; BTVER2-NEXT:    vorpd %xmm0, %xmm1, %xmm0 # sched: [1:0.50]
434 ; BTVER2-NEXT:    retq # sched: [4:1.00]
436 ; ZNVER1-LABEL: test_cmppd:
437 ; ZNVER1:       # BB#0:
438 ; ZNVER1-NEXT:    vcmpeqpd %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
439 ; ZNVER1-NEXT:    vcmpeqpd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
440 ; ZNVER1-NEXT:    vorpd %xmm0, %xmm1, %xmm0 # sched: [1:0.25]
441 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
442   %1 = fcmp oeq <2 x double> %a0, %a1
443   %2 = load <2 x double>, <2 x double> *%a2, align 16
444   %3 = fcmp oeq <2 x double> %a0, %2
445   %4 = or <2 x i1> %1, %3
446   %5 = sext <2 x i1> %4 to <2 x i64>
447   %6 = bitcast <2 x i64> %5 to <2 x double>
448   ret <2 x double> %6
451 define double @test_cmpsd(double %a0, double %a1, double *%a2) {
452 ; GENERIC-LABEL: test_cmpsd:
453 ; GENERIC:       # BB#0:
454 ; GENERIC-NEXT:    cmpeqsd %xmm1, %xmm0 # sched: [3:1.00]
455 ; GENERIC-NEXT:    cmpeqsd (%rdi), %xmm0 # sched: [7:1.00]
456 ; GENERIC-NEXT:    retq # sched: [1:1.00]
458 ; ATOM-LABEL: test_cmpsd:
459 ; ATOM:       # BB#0:
460 ; ATOM-NEXT:    cmpeqsd %xmm1, %xmm0 # sched: [5:5.00]
461 ; ATOM-NEXT:    cmpeqsd (%rdi), %xmm0 # sched: [5:5.00]
462 ; ATOM-NEXT:    retq # sched: [79:39.50]
464 ; SLM-LABEL: test_cmpsd:
465 ; SLM:       # BB#0:
466 ; SLM-NEXT:    cmpeqsd %xmm1, %xmm0 # sched: [3:1.00]
467 ; SLM-NEXT:    cmpeqsd (%rdi), %xmm0 # sched: [6:1.00]
468 ; SLM-NEXT:    retq # sched: [4:1.00]
470 ; SANDY-LABEL: test_cmpsd:
471 ; SANDY:       # BB#0:
472 ; SANDY-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
473 ; SANDY-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
474 ; SANDY-NEXT:    retq # sched: [1:1.00]
476 ; HASWELL-LABEL: test_cmpsd:
477 ; HASWELL:       # BB#0:
478 ; HASWELL-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
479 ; HASWELL-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
480 ; HASWELL-NEXT:    retq # sched: [2:1.00]
482 ; BROADWELL-LABEL: test_cmpsd:
483 ; BROADWELL:       # BB#0:
484 ; BROADWELL-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
485 ; BROADWELL-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
486 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
488 ; SKYLAKE-LABEL: test_cmpsd:
489 ; SKYLAKE:       # BB#0:
490 ; SKYLAKE-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
491 ; SKYLAKE-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
492 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
494 ; SKX-LABEL: test_cmpsd:
495 ; SKX:       # BB#0:
496 ; SKX-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
497 ; SKX-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
498 ; SKX-NEXT:    retq # sched: [7:1.00]
500 ; BTVER2-LABEL: test_cmpsd:
501 ; BTVER2:       # BB#0:
502 ; BTVER2-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
503 ; BTVER2-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
504 ; BTVER2-NEXT:    retq # sched: [4:1.00]
506 ; ZNVER1-LABEL: test_cmpsd:
507 ; ZNVER1:       # BB#0:
508 ; ZNVER1-NEXT:    vcmpeqsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
509 ; ZNVER1-NEXT:    vcmpeqsd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
510 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
511   %1 = insertelement <2 x double> undef, double %a0, i32 0
512   %2 = insertelement <2 x double> undef, double %a1, i32 0
513   %3 = call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %1, <2 x double> %2, i8 0)
514   %4 = load double, double *%a2, align 8
515   %5 = insertelement <2 x double> undef, double %4, i32 0
516   %6 = call <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double> %3, <2 x double> %5, i8 0)
517   %7 = extractelement <2 x double> %6, i32 0
518   ret double %7
520 declare <2 x double> @llvm.x86.sse2.cmp.sd(<2 x double>, <2 x double>, i8) nounwind readnone
522 define i32 @test_comisd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
523 ; GENERIC-LABEL: test_comisd:
524 ; GENERIC:       # BB#0:
525 ; GENERIC-NEXT:    comisd %xmm1, %xmm0 # sched: [3:1.00]
526 ; GENERIC-NEXT:    setnp %al # sched: [1:0.50]
527 ; GENERIC-NEXT:    sete %cl # sched: [1:0.50]
528 ; GENERIC-NEXT:    andb %al, %cl # sched: [1:0.33]
529 ; GENERIC-NEXT:    comisd (%rdi), %xmm0 # sched: [7:1.00]
530 ; GENERIC-NEXT:    setnp %al # sched: [1:0.50]
531 ; GENERIC-NEXT:    sete %dl # sched: [1:0.50]
532 ; GENERIC-NEXT:    andb %al, %dl # sched: [1:0.33]
533 ; GENERIC-NEXT:    orb %cl, %dl # sched: [1:0.33]
534 ; GENERIC-NEXT:    movzbl %dl, %eax # sched: [1:0.33]
535 ; GENERIC-NEXT:    retq # sched: [1:1.00]
537 ; ATOM-LABEL: test_comisd:
538 ; ATOM:       # BB#0:
539 ; ATOM-NEXT:    comisd %xmm1, %xmm0 # sched: [9:4.50]
540 ; ATOM-NEXT:    setnp %al # sched: [1:0.50]
541 ; ATOM-NEXT:    sete %cl # sched: [1:0.50]
542 ; ATOM-NEXT:    andb %al, %cl # sched: [1:0.50]
543 ; ATOM-NEXT:    comisd (%rdi), %xmm0 # sched: [10:5.00]
544 ; ATOM-NEXT:    setnp %al # sched: [1:0.50]
545 ; ATOM-NEXT:    sete %dl # sched: [1:0.50]
546 ; ATOM-NEXT:    andb %al, %dl # sched: [1:0.50]
547 ; ATOM-NEXT:    orb %cl, %dl # sched: [1:0.50]
548 ; ATOM-NEXT:    movzbl %dl, %eax # sched: [1:1.00]
549 ; ATOM-NEXT:    retq # sched: [79:39.50]
551 ; SLM-LABEL: test_comisd:
552 ; SLM:       # BB#0:
553 ; SLM-NEXT:    comisd %xmm1, %xmm0 # sched: [3:1.00]
554 ; SLM-NEXT:    setnp %al # sched: [1:0.50]
555 ; SLM-NEXT:    sete %cl # sched: [1:0.50]
556 ; SLM-NEXT:    andb %al, %cl # sched: [1:0.50]
557 ; SLM-NEXT:    comisd (%rdi), %xmm0 # sched: [6:1.00]
558 ; SLM-NEXT:    setnp %al # sched: [1:0.50]
559 ; SLM-NEXT:    sete %dl # sched: [1:0.50]
560 ; SLM-NEXT:    andb %al, %dl # sched: [1:0.50]
561 ; SLM-NEXT:    orb %cl, %dl # sched: [1:0.50]
562 ; SLM-NEXT:    movzbl %dl, %eax # sched: [1:0.50]
563 ; SLM-NEXT:    retq # sched: [4:1.00]
565 ; SANDY-LABEL: test_comisd:
566 ; SANDY:       # BB#0:
567 ; SANDY-NEXT:    vcomisd %xmm1, %xmm0 # sched: [3:1.00]
568 ; SANDY-NEXT:    setnp %al # sched: [1:0.50]
569 ; SANDY-NEXT:    sete %cl # sched: [1:0.50]
570 ; SANDY-NEXT:    andb %al, %cl # sched: [1:0.33]
571 ; SANDY-NEXT:    vcomisd (%rdi), %xmm0 # sched: [7:1.00]
572 ; SANDY-NEXT:    setnp %al # sched: [1:0.50]
573 ; SANDY-NEXT:    sete %dl # sched: [1:0.50]
574 ; SANDY-NEXT:    andb %al, %dl # sched: [1:0.33]
575 ; SANDY-NEXT:    orb %cl, %dl # sched: [1:0.33]
576 ; SANDY-NEXT:    movzbl %dl, %eax # sched: [1:0.33]
577 ; SANDY-NEXT:    retq # sched: [1:1.00]
579 ; HASWELL-LABEL: test_comisd:
580 ; HASWELL:       # BB#0:
581 ; HASWELL-NEXT:    vcomisd %xmm1, %xmm0 # sched: [3:1.00]
582 ; HASWELL-NEXT:    setnp %al # sched: [1:0.50]
583 ; HASWELL-NEXT:    sete %cl # sched: [1:0.50]
584 ; HASWELL-NEXT:    andb %al, %cl # sched: [1:0.25]
585 ; HASWELL-NEXT:    vcomisd (%rdi), %xmm0 # sched: [7:1.00]
586 ; HASWELL-NEXT:    setnp %al # sched: [1:0.50]
587 ; HASWELL-NEXT:    sete %dl # sched: [1:0.50]
588 ; HASWELL-NEXT:    andb %al, %dl # sched: [1:0.25]
589 ; HASWELL-NEXT:    orb %cl, %dl # sched: [1:0.25]
590 ; HASWELL-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
591 ; HASWELL-NEXT:    retq # sched: [2:1.00]
593 ; BROADWELL-LABEL: test_comisd:
594 ; BROADWELL:       # BB#0:
595 ; BROADWELL-NEXT:    vcomisd %xmm1, %xmm0 # sched: [3:1.00]
596 ; BROADWELL-NEXT:    setnp %al # sched: [1:0.50]
597 ; BROADWELL-NEXT:    sete %cl # sched: [1:0.50]
598 ; BROADWELL-NEXT:    andb %al, %cl # sched: [1:0.25]
599 ; BROADWELL-NEXT:    vcomisd (%rdi), %xmm0 # sched: [8:1.00]
600 ; BROADWELL-NEXT:    setnp %al # sched: [1:0.50]
601 ; BROADWELL-NEXT:    sete %dl # sched: [1:0.50]
602 ; BROADWELL-NEXT:    andb %al, %dl # sched: [1:0.25]
603 ; BROADWELL-NEXT:    orb %cl, %dl # sched: [1:0.25]
604 ; BROADWELL-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
605 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
607 ; SKYLAKE-LABEL: test_comisd:
608 ; SKYLAKE:       # BB#0:
609 ; SKYLAKE-NEXT:    vcomisd %xmm1, %xmm0 # sched: [3:1.00]
610 ; SKYLAKE-NEXT:    setnp %al # sched: [1:0.50]
611 ; SKYLAKE-NEXT:    sete %cl # sched: [1:0.50]
612 ; SKYLAKE-NEXT:    andb %al, %cl # sched: [1:0.25]
613 ; SKYLAKE-NEXT:    vcomisd (%rdi), %xmm0 # sched: [8:1.00]
614 ; SKYLAKE-NEXT:    setnp %al # sched: [1:0.50]
615 ; SKYLAKE-NEXT:    sete %dl # sched: [1:0.50]
616 ; SKYLAKE-NEXT:    andb %al, %dl # sched: [1:0.25]
617 ; SKYLAKE-NEXT:    orb %cl, %dl # sched: [1:0.25]
618 ; SKYLAKE-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
619 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
621 ; SKX-LABEL: test_comisd:
622 ; SKX:       # BB#0:
623 ; SKX-NEXT:    vcomisd %xmm1, %xmm0 # sched: [3:1.00]
624 ; SKX-NEXT:    setnp %al # sched: [1:0.50]
625 ; SKX-NEXT:    sete %cl # sched: [1:0.50]
626 ; SKX-NEXT:    andb %al, %cl # sched: [1:0.25]
627 ; SKX-NEXT:    vcomisd (%rdi), %xmm0 # sched: [8:1.00]
628 ; SKX-NEXT:    setnp %al # sched: [1:0.50]
629 ; SKX-NEXT:    sete %dl # sched: [1:0.50]
630 ; SKX-NEXT:    andb %al, %dl # sched: [1:0.25]
631 ; SKX-NEXT:    orb %cl, %dl # sched: [1:0.25]
632 ; SKX-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
633 ; SKX-NEXT:    retq # sched: [7:1.00]
635 ; BTVER2-LABEL: test_comisd:
636 ; BTVER2:       # BB#0:
637 ; BTVER2-NEXT:    vcomisd %xmm1, %xmm0 # sched: [3:1.00]
638 ; BTVER2-NEXT:    setnp %al # sched: [1:0.50]
639 ; BTVER2-NEXT:    sete %cl # sched: [1:0.50]
640 ; BTVER2-NEXT:    andb %al, %cl # sched: [1:0.50]
641 ; BTVER2-NEXT:    vcomisd (%rdi), %xmm0 # sched: [8:1.00]
642 ; BTVER2-NEXT:    setnp %al # sched: [1:0.50]
643 ; BTVER2-NEXT:    sete %dl # sched: [1:0.50]
644 ; BTVER2-NEXT:    andb %al, %dl # sched: [1:0.50]
645 ; BTVER2-NEXT:    orb %cl, %dl # sched: [1:0.50]
646 ; BTVER2-NEXT:    movzbl %dl, %eax # sched: [1:0.50]
647 ; BTVER2-NEXT:    retq # sched: [4:1.00]
649 ; ZNVER1-LABEL: test_comisd:
650 ; ZNVER1:       # BB#0:
651 ; ZNVER1-NEXT:    vcomisd %xmm1, %xmm0 # sched: [3:1.00]
652 ; ZNVER1-NEXT:    setnp %al # sched: [1:0.25]
653 ; ZNVER1-NEXT:    sete %cl # sched: [1:0.25]
654 ; ZNVER1-NEXT:    andb %al, %cl # sched: [1:0.25]
655 ; ZNVER1-NEXT:    vcomisd (%rdi), %xmm0 # sched: [10:1.00]
656 ; ZNVER1-NEXT:    setnp %al # sched: [1:0.25]
657 ; ZNVER1-NEXT:    sete %dl # sched: [1:0.25]
658 ; ZNVER1-NEXT:    andb %al, %dl # sched: [1:0.25]
659 ; ZNVER1-NEXT:    orb %cl, %dl # sched: [1:0.25]
660 ; ZNVER1-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
661 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
662   %1 = call i32 @llvm.x86.sse2.comieq.sd(<2 x double> %a0, <2 x double> %a1)
663   %2 = load <2 x double>, <2 x double> *%a2, align 8
664   %3 = call i32 @llvm.x86.sse2.comieq.sd(<2 x double> %a0, <2 x double> %2)
665   %4 = or i32 %1, %3
666   ret i32 %4
668 declare i32 @llvm.x86.sse2.comieq.sd(<2 x double>, <2 x double>) nounwind readnone
670 define <2 x double> @test_cvtdq2pd(<4 x i32> %a0, <4 x i32> *%a1) {
671 ; GENERIC-LABEL: test_cvtdq2pd:
672 ; GENERIC:       # BB#0:
673 ; GENERIC-NEXT:    cvtdq2pd %xmm0, %xmm1 # sched: [4:1.00]
674 ; GENERIC-NEXT:    cvtdq2pd (%rdi), %xmm0 # sched: [10:1.00]
675 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
676 ; GENERIC-NEXT:    retq # sched: [1:1.00]
678 ; ATOM-LABEL: test_cvtdq2pd:
679 ; ATOM:       # BB#0:
680 ; ATOM-NEXT:    cvtdq2pd %xmm0, %xmm1 # sched: [8:4.00]
681 ; ATOM-NEXT:    cvtdq2pd (%rdi), %xmm0 # sched: [7:3.50]
682 ; ATOM-NEXT:    addpd %xmm1, %xmm0 # sched: [6:3.00]
683 ; ATOM-NEXT:    retq # sched: [79:39.50]
685 ; SLM-LABEL: test_cvtdq2pd:
686 ; SLM:       # BB#0:
687 ; SLM-NEXT:    cvtdq2pd %xmm0, %xmm1 # sched: [4:0.50]
688 ; SLM-NEXT:    cvtdq2pd (%rdi), %xmm0 # sched: [7:1.00]
689 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
690 ; SLM-NEXT:    retq # sched: [4:1.00]
692 ; SANDY-LABEL: test_cvtdq2pd:
693 ; SANDY:       # BB#0:
694 ; SANDY-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [4:1.00]
695 ; SANDY-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [10:1.00]
696 ; SANDY-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
697 ; SANDY-NEXT:    retq # sched: [1:1.00]
699 ; HASWELL-LABEL: test_cvtdq2pd:
700 ; HASWELL:       # BB#0:
701 ; HASWELL-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [4:1.00]
702 ; HASWELL-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [4:1.00]
703 ; HASWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
704 ; HASWELL-NEXT:    retq # sched: [2:1.00]
706 ; BROADWELL-LABEL: test_cvtdq2pd:
707 ; BROADWELL:       # BB#0:
708 ; BROADWELL-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [4:1.00]
709 ; BROADWELL-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [9:1.00]
710 ; BROADWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
711 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
713 ; SKYLAKE-LABEL: test_cvtdq2pd:
714 ; SKYLAKE:       # BB#0:
715 ; SKYLAKE-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [5:1.00]
716 ; SKYLAKE-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [11:1.00]
717 ; SKYLAKE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
718 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
720 ; SKX-LABEL: test_cvtdq2pd:
721 ; SKX:       # BB#0:
722 ; SKX-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [5:1.00]
723 ; SKX-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [11:1.00]
724 ; SKX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
725 ; SKX-NEXT:    retq # sched: [7:1.00]
727 ; BTVER2-LABEL: test_cvtdq2pd:
728 ; BTVER2:       # BB#0:
729 ; BTVER2-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [8:1.00]
730 ; BTVER2-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [3:1.00]
731 ; BTVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
732 ; BTVER2-NEXT:    retq # sched: [4:1.00]
734 ; ZNVER1-LABEL: test_cvtdq2pd:
735 ; ZNVER1:       # BB#0:
736 ; ZNVER1-NEXT:    vcvtdq2pd (%rdi), %xmm1 # sched: [12:1.00]
737 ; ZNVER1-NEXT:    vcvtdq2pd %xmm0, %xmm0 # sched: [5:1.00]
738 ; ZNVER1-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
739 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
740   %1 = shufflevector <4 x i32> %a0, <4 x i32> undef, <2 x i32> <i32 0, i32 1>
741   %2 = sitofp <2 x i32> %1 to <2 x double>
742   %3 = load <4 x i32>, <4 x i32>*%a1, align 16
743   %4 = shufflevector <4 x i32> %3, <4 x i32> undef, <2 x i32> <i32 0, i32 1>
744   %5 = sitofp <2 x i32> %4 to <2 x double>
745   %6 = fadd <2 x double> %2, %5
746   ret <2 x double> %6
749 define <4 x float> @test_cvtdq2ps(<4 x i32> %a0, <4 x i32> *%a1) {
750 ; GENERIC-LABEL: test_cvtdq2ps:
751 ; GENERIC:       # BB#0:
752 ; GENERIC-NEXT:    cvtdq2ps %xmm0, %xmm1 # sched: [3:1.00]
753 ; GENERIC-NEXT:    cvtdq2ps (%rdi), %xmm0 # sched: [9:1.00]
754 ; GENERIC-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
755 ; GENERIC-NEXT:    retq # sched: [1:1.00]
757 ; ATOM-LABEL: test_cvtdq2ps:
758 ; ATOM:       # BB#0:
759 ; ATOM-NEXT:    cvtdq2ps (%rdi), %xmm1 # sched: [7:3.50]
760 ; ATOM-NEXT:    cvtdq2ps %xmm0, %xmm0 # sched: [6:3.00]
761 ; ATOM-NEXT:    addps %xmm0, %xmm1 # sched: [5:5.00]
762 ; ATOM-NEXT:    movaps %xmm1, %xmm0 # sched: [1:0.50]
763 ; ATOM-NEXT:    retq # sched: [79:39.50]
765 ; SLM-LABEL: test_cvtdq2ps:
766 ; SLM:       # BB#0:
767 ; SLM-NEXT:    cvtdq2ps %xmm0, %xmm1 # sched: [4:0.50]
768 ; SLM-NEXT:    cvtdq2ps (%rdi), %xmm0 # sched: [7:1.00]
769 ; SLM-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
770 ; SLM-NEXT:    retq # sched: [4:1.00]
772 ; SANDY-LABEL: test_cvtdq2ps:
773 ; SANDY:       # BB#0:
774 ; SANDY-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [3:1.00]
775 ; SANDY-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [9:1.00]
776 ; SANDY-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
777 ; SANDY-NEXT:    retq # sched: [1:1.00]
779 ; HASWELL-LABEL: test_cvtdq2ps:
780 ; HASWELL:       # BB#0:
781 ; HASWELL-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [3:1.00]
782 ; HASWELL-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [3:1.00]
783 ; HASWELL-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
784 ; HASWELL-NEXT:    retq # sched: [2:1.00]
786 ; BROADWELL-LABEL: test_cvtdq2ps:
787 ; BROADWELL:       # BB#0:
788 ; BROADWELL-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [3:1.00]
789 ; BROADWELL-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [8:1.00]
790 ; BROADWELL-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
791 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
793 ; SKYLAKE-LABEL: test_cvtdq2ps:
794 ; SKYLAKE:       # BB#0:
795 ; SKYLAKE-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [4:0.33]
796 ; SKYLAKE-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [10:0.50]
797 ; SKYLAKE-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
798 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
800 ; SKX-LABEL: test_cvtdq2ps:
801 ; SKX:       # BB#0:
802 ; SKX-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [4:0.33]
803 ; SKX-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [10:0.50]
804 ; SKX-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
805 ; SKX-NEXT:    retq # sched: [7:1.00]
807 ; BTVER2-LABEL: test_cvtdq2ps:
808 ; BTVER2:       # BB#0:
809 ; BTVER2-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [8:1.00]
810 ; BTVER2-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [3:1.00]
811 ; BTVER2-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
812 ; BTVER2-NEXT:    retq # sched: [4:1.00]
814 ; ZNVER1-LABEL: test_cvtdq2ps:
815 ; ZNVER1:       # BB#0:
816 ; ZNVER1-NEXT:    vcvtdq2ps (%rdi), %xmm1 # sched: [12:1.00]
817 ; ZNVER1-NEXT:    vcvtdq2ps %xmm0, %xmm0 # sched: [5:1.00]
818 ; ZNVER1-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
819 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
820   %1 = sitofp <4 x i32> %a0 to <4 x float>
821   %2 = load <4 x i32>, <4 x i32>*%a1, align 16
822   %3 = sitofp <4 x i32> %2 to <4 x float>
823   %4 = fadd <4 x float> %1, %3
824   ret <4 x float> %4
827 define <4 x i32> @test_cvtpd2dq(<2 x double> %a0, <2 x double> *%a1) {
828 ; GENERIC-LABEL: test_cvtpd2dq:
829 ; GENERIC:       # BB#0:
830 ; GENERIC-NEXT:    cvtpd2dq %xmm0, %xmm1 # sched: [4:1.00]
831 ; GENERIC-NEXT:    cvtpd2dq (%rdi), %xmm0 # sched: [10:1.00]
832 ; GENERIC-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
833 ; GENERIC-NEXT:    retq # sched: [1:1.00]
835 ; ATOM-LABEL: test_cvtpd2dq:
836 ; ATOM:       # BB#0:
837 ; ATOM-NEXT:    cvtpd2dq (%rdi), %xmm1 # sched: [8:4.00]
838 ; ATOM-NEXT:    cvtpd2dq %xmm0, %xmm0 # sched: [7:3.50]
839 ; ATOM-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
840 ; ATOM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
841 ; ATOM-NEXT:    retq # sched: [79:39.50]
843 ; SLM-LABEL: test_cvtpd2dq:
844 ; SLM:       # BB#0:
845 ; SLM-NEXT:    cvtpd2dq %xmm0, %xmm1 # sched: [4:0.50]
846 ; SLM-NEXT:    cvtpd2dq (%rdi), %xmm0 # sched: [7:1.00]
847 ; SLM-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
848 ; SLM-NEXT:    retq # sched: [4:1.00]
850 ; SANDY-LABEL: test_cvtpd2dq:
851 ; SANDY:       # BB#0:
852 ; SANDY-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [4:1.00]
853 ; SANDY-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [10:1.00]
854 ; SANDY-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
855 ; SANDY-NEXT:    retq # sched: [1:1.00]
857 ; HASWELL-LABEL: test_cvtpd2dq:
858 ; HASWELL:       # BB#0:
859 ; HASWELL-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [4:1.00]
860 ; HASWELL-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [7:1.00]
861 ; HASWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
862 ; HASWELL-NEXT:    retq # sched: [2:1.00]
864 ; BROADWELL-LABEL: test_cvtpd2dq:
865 ; BROADWELL:       # BB#0:
866 ; BROADWELL-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [4:1.00]
867 ; BROADWELL-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
868 ; BROADWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
869 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
871 ; SKYLAKE-LABEL: test_cvtpd2dq:
872 ; SKYLAKE:       # BB#0:
873 ; SKYLAKE-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [5:1.00]
874 ; SKYLAKE-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
875 ; SKYLAKE-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
876 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
878 ; SKX-LABEL: test_cvtpd2dq:
879 ; SKX:       # BB#0:
880 ; SKX-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [5:1.00]
881 ; SKX-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
882 ; SKX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
883 ; SKX-NEXT:    retq # sched: [7:1.00]
885 ; BTVER2-LABEL: test_cvtpd2dq:
886 ; BTVER2:       # BB#0:
887 ; BTVER2-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
888 ; BTVER2-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [3:1.00]
889 ; BTVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
890 ; BTVER2-NEXT:    retq # sched: [4:1.00]
892 ; ZNVER1-LABEL: test_cvtpd2dq:
893 ; ZNVER1:       # BB#0:
894 ; ZNVER1-NEXT:    vcvtpd2dqx (%rdi), %xmm1 # sched: [12:1.00]
895 ; ZNVER1-NEXT:    vcvtpd2dq %xmm0, %xmm0 # sched: [5:1.00]
896 ; ZNVER1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
897 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
898   %1 = call <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double> %a0)
899   %2 = load <2 x double>, <2 x double> *%a1, align 16
900   %3 = call <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double> %2)
901   %4 = add <4 x i32> %1, %3
902   ret <4 x i32> %4
904 declare <4 x i32> @llvm.x86.sse2.cvtpd2dq(<2 x double>) nounwind readnone
906 define <4 x float> @test_cvtpd2ps(<2 x double> %a0, <2 x double> *%a1) {
907 ; GENERIC-LABEL: test_cvtpd2ps:
908 ; GENERIC:       # BB#0:
909 ; GENERIC-NEXT:    cvtpd2ps %xmm0, %xmm1 # sched: [4:1.00]
910 ; GENERIC-NEXT:    cvtpd2ps (%rdi), %xmm0 # sched: [10:1.00]
911 ; GENERIC-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
912 ; GENERIC-NEXT:    retq # sched: [1:1.00]
914 ; ATOM-LABEL: test_cvtpd2ps:
915 ; ATOM:       # BB#0:
916 ; ATOM-NEXT:    cvtpd2ps (%rdi), %xmm1 # sched: [8:4.00]
917 ; ATOM-NEXT:    cvtpd2ps %xmm0, %xmm0 # sched: [7:3.50]
918 ; ATOM-NEXT:    addps %xmm0, %xmm1 # sched: [5:5.00]
919 ; ATOM-NEXT:    movaps %xmm1, %xmm0 # sched: [1:0.50]
920 ; ATOM-NEXT:    retq # sched: [79:39.50]
922 ; SLM-LABEL: test_cvtpd2ps:
923 ; SLM:       # BB#0:
924 ; SLM-NEXT:    cvtpd2ps %xmm0, %xmm1 # sched: [4:0.50]
925 ; SLM-NEXT:    cvtpd2ps (%rdi), %xmm0 # sched: [7:1.00]
926 ; SLM-NEXT:    addps %xmm1, %xmm0 # sched: [3:1.00]
927 ; SLM-NEXT:    retq # sched: [4:1.00]
929 ; SANDY-LABEL: test_cvtpd2ps:
930 ; SANDY:       # BB#0:
931 ; SANDY-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [4:1.00]
932 ; SANDY-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [10:1.00]
933 ; SANDY-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
934 ; SANDY-NEXT:    retq # sched: [1:1.00]
936 ; HASWELL-LABEL: test_cvtpd2ps:
937 ; HASWELL:       # BB#0:
938 ; HASWELL-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [4:1.00]
939 ; HASWELL-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [7:1.00]
940 ; HASWELL-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
941 ; HASWELL-NEXT:    retq # sched: [2:1.00]
943 ; BROADWELL-LABEL: test_cvtpd2ps:
944 ; BROADWELL:       # BB#0:
945 ; BROADWELL-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [4:1.00]
946 ; BROADWELL-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [8:1.00]
947 ; BROADWELL-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
948 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
950 ; SKYLAKE-LABEL: test_cvtpd2ps:
951 ; SKYLAKE:       # BB#0:
952 ; SKYLAKE-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [5:1.00]
953 ; SKYLAKE-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [8:1.00]
954 ; SKYLAKE-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
955 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
957 ; SKX-LABEL: test_cvtpd2ps:
958 ; SKX:       # BB#0:
959 ; SKX-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [5:1.00]
960 ; SKX-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [8:1.00]
961 ; SKX-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
962 ; SKX-NEXT:    retq # sched: [7:1.00]
964 ; BTVER2-LABEL: test_cvtpd2ps:
965 ; BTVER2:       # BB#0:
966 ; BTVER2-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [8:1.00]
967 ; BTVER2-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [3:1.00]
968 ; BTVER2-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
969 ; BTVER2-NEXT:    retq # sched: [4:1.00]
971 ; ZNVER1-LABEL: test_cvtpd2ps:
972 ; ZNVER1:       # BB#0:
973 ; ZNVER1-NEXT:    vcvtpd2psx (%rdi), %xmm1 # sched: [11:1.00]
974 ; ZNVER1-NEXT:    vcvtpd2ps %xmm0, %xmm0 # sched: [4:1.00]
975 ; ZNVER1-NEXT:    vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
976 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
977   %1 = call <4 x float> @llvm.x86.sse2.cvtpd2ps(<2 x double> %a0)
978   %2 = load <2 x double>, <2 x double> *%a1, align 16
979   %3 = call <4 x float> @llvm.x86.sse2.cvtpd2ps(<2 x double> %2)
980   %4 = fadd <4 x float> %1, %3
981   ret <4 x float> %4
983 declare <4 x float> @llvm.x86.sse2.cvtpd2ps(<2 x double>) nounwind readnone
985 define <4 x i32> @test_cvtps2dq(<4 x float> %a0, <4 x float> *%a1) {
986 ; GENERIC-LABEL: test_cvtps2dq:
987 ; GENERIC:       # BB#0:
988 ; GENERIC-NEXT:    cvtps2dq %xmm0, %xmm1 # sched: [3:1.00]
989 ; GENERIC-NEXT:    cvtps2dq (%rdi), %xmm0 # sched: [9:1.00]
990 ; GENERIC-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
991 ; GENERIC-NEXT:    retq # sched: [1:1.00]
993 ; ATOM-LABEL: test_cvtps2dq:
994 ; ATOM:       # BB#0:
995 ; ATOM-NEXT:    cvtps2dq (%rdi), %xmm1 # sched: [7:3.50]
996 ; ATOM-NEXT:    cvtps2dq %xmm0, %xmm0 # sched: [6:3.00]
997 ; ATOM-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
998 ; ATOM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
999 ; ATOM-NEXT:    retq # sched: [79:39.50]
1001 ; SLM-LABEL: test_cvtps2dq:
1002 ; SLM:       # BB#0:
1003 ; SLM-NEXT:    cvtps2dq %xmm0, %xmm1 # sched: [4:0.50]
1004 ; SLM-NEXT:    cvtps2dq (%rdi), %xmm0 # sched: [7:1.00]
1005 ; SLM-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1006 ; SLM-NEXT:    retq # sched: [4:1.00]
1008 ; SANDY-LABEL: test_cvtps2dq:
1009 ; SANDY:       # BB#0:
1010 ; SANDY-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [3:1.00]
1011 ; SANDY-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [9:1.00]
1012 ; SANDY-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1013 ; SANDY-NEXT:    retq # sched: [1:1.00]
1015 ; HASWELL-LABEL: test_cvtps2dq:
1016 ; HASWELL:       # BB#0:
1017 ; HASWELL-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [3:1.00]
1018 ; HASWELL-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [3:1.00]
1019 ; HASWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1020 ; HASWELL-NEXT:    retq # sched: [2:1.00]
1022 ; BROADWELL-LABEL: test_cvtps2dq:
1023 ; BROADWELL:       # BB#0:
1024 ; BROADWELL-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [3:1.00]
1025 ; BROADWELL-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [8:1.00]
1026 ; BROADWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1027 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1029 ; SKYLAKE-LABEL: test_cvtps2dq:
1030 ; SKYLAKE:       # BB#0:
1031 ; SKYLAKE-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [4:0.33]
1032 ; SKYLAKE-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [10:0.50]
1033 ; SKYLAKE-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
1034 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1036 ; SKX-LABEL: test_cvtps2dq:
1037 ; SKX:       # BB#0:
1038 ; SKX-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [4:0.33]
1039 ; SKX-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [10:0.50]
1040 ; SKX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
1041 ; SKX-NEXT:    retq # sched: [7:1.00]
1043 ; BTVER2-LABEL: test_cvtps2dq:
1044 ; BTVER2:       # BB#0:
1045 ; BTVER2-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [8:1.00]
1046 ; BTVER2-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [3:1.00]
1047 ; BTVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1048 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1050 ; ZNVER1-LABEL: test_cvtps2dq:
1051 ; ZNVER1:       # BB#0:
1052 ; ZNVER1-NEXT:    vcvtps2dq (%rdi), %xmm1 # sched: [12:1.00]
1053 ; ZNVER1-NEXT:    vcvtps2dq %xmm0, %xmm0 # sched: [5:1.00]
1054 ; ZNVER1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
1055 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1056   %1 = call <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float> %a0)
1057   %2 = load <4 x float>, <4 x float> *%a1, align 16
1058   %3 = call <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float> %2)
1059   %4 = add <4 x i32> %1, %3
1060   ret <4 x i32> %4
1062 declare <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float>) nounwind readnone
1064 define <2 x double> @test_cvtps2pd(<4 x float> %a0, <4 x float> *%a1) {
1065 ; GENERIC-LABEL: test_cvtps2pd:
1066 ; GENERIC:       # BB#0:
1067 ; GENERIC-NEXT:    cvtps2pd %xmm0, %xmm1 # sched: [2:1.00]
1068 ; GENERIC-NEXT:    cvtps2pd (%rdi), %xmm0 # sched: [7:1.00]
1069 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
1070 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1072 ; ATOM-LABEL: test_cvtps2pd:
1073 ; ATOM:       # BB#0:
1074 ; ATOM-NEXT:    cvtps2pd (%rdi), %xmm1 # sched: [8:4.00]
1075 ; ATOM-NEXT:    cvtps2pd %xmm0, %xmm0 # sched: [7:3.50]
1076 ; ATOM-NEXT:    addpd %xmm0, %xmm1 # sched: [6:3.00]
1077 ; ATOM-NEXT:    movapd %xmm1, %xmm0 # sched: [1:0.50]
1078 ; ATOM-NEXT:    retq # sched: [79:39.50]
1080 ; SLM-LABEL: test_cvtps2pd:
1081 ; SLM:       # BB#0:
1082 ; SLM-NEXT:    cvtps2pd %xmm0, %xmm1 # sched: [4:0.50]
1083 ; SLM-NEXT:    cvtps2pd (%rdi), %xmm0 # sched: [7:1.00]
1084 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
1085 ; SLM-NEXT:    retq # sched: [4:1.00]
1087 ; SANDY-LABEL: test_cvtps2pd:
1088 ; SANDY:       # BB#0:
1089 ; SANDY-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [2:1.00]
1090 ; SANDY-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [7:1.00]
1091 ; SANDY-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1092 ; SANDY-NEXT:    retq # sched: [1:1.00]
1094 ; HASWELL-LABEL: test_cvtps2pd:
1095 ; HASWELL:       # BB#0:
1096 ; HASWELL-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [2:1.00]
1097 ; HASWELL-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [1:1.00]
1098 ; HASWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1099 ; HASWELL-NEXT:    retq # sched: [2:1.00]
1101 ; BROADWELL-LABEL: test_cvtps2pd:
1102 ; BROADWELL:       # BB#0:
1103 ; BROADWELL-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [2:1.00]
1104 ; BROADWELL-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [6:1.00]
1105 ; BROADWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1106 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1108 ; SKYLAKE-LABEL: test_cvtps2pd:
1109 ; SKYLAKE:       # BB#0:
1110 ; SKYLAKE-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [5:1.00]
1111 ; SKYLAKE-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [9:0.50]
1112 ; SKYLAKE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
1113 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1115 ; SKX-LABEL: test_cvtps2pd:
1116 ; SKX:       # BB#0:
1117 ; SKX-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [5:1.00]
1118 ; SKX-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [9:0.50]
1119 ; SKX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
1120 ; SKX-NEXT:    retq # sched: [7:1.00]
1122 ; BTVER2-LABEL: test_cvtps2pd:
1123 ; BTVER2:       # BB#0:
1124 ; BTVER2-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [8:1.00]
1125 ; BTVER2-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [3:1.00]
1126 ; BTVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1127 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1129 ; ZNVER1-LABEL: test_cvtps2pd:
1130 ; ZNVER1:       # BB#0:
1131 ; ZNVER1-NEXT:    vcvtps2pd (%rdi), %xmm1 # sched: [10:1.00]
1132 ; ZNVER1-NEXT:    vcvtps2pd %xmm0, %xmm0 # sched: [3:1.00]
1133 ; ZNVER1-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1134 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1135   %1 = shufflevector <4 x float> %a0, <4 x float> undef, <2 x i32> <i32 0, i32 1>
1136   %2 = fpext <2 x float> %1 to <2 x double>
1137   %3 = load <4 x float>, <4 x float> *%a1, align 16
1138   %4 = shufflevector <4 x float> %3, <4 x float> undef, <2 x i32> <i32 0, i32 1>
1139   %5 = fpext <2 x float> %4 to <2 x double>
1140   %6 = fadd <2 x double> %2, %5
1141   ret <2 x double> %6
1144 define i32 @test_cvtsd2si(double %a0, double *%a1) {
1145 ; GENERIC-LABEL: test_cvtsd2si:
1146 ; GENERIC:       # BB#0:
1147 ; GENERIC-NEXT:    cvtsd2si %xmm0, %ecx # sched: [5:1.00]
1148 ; GENERIC-NEXT:    cvtsd2si (%rdi), %eax # sched: [9:1.00]
1149 ; GENERIC-NEXT:    addl %ecx, %eax # sched: [1:0.33]
1150 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1152 ; ATOM-LABEL: test_cvtsd2si:
1153 ; ATOM:       # BB#0:
1154 ; ATOM-NEXT:    cvtsd2si (%rdi), %eax # sched: [9:4.50]
1155 ; ATOM-NEXT:    cvtsd2si %xmm0, %ecx # sched: [8:4.00]
1156 ; ATOM-NEXT:    addl %ecx, %eax # sched: [1:0.50]
1157 ; ATOM-NEXT:    retq # sched: [79:39.50]
1159 ; SLM-LABEL: test_cvtsd2si:
1160 ; SLM:       # BB#0:
1161 ; SLM-NEXT:    cvtsd2si (%rdi), %eax # sched: [7:1.00]
1162 ; SLM-NEXT:    cvtsd2si %xmm0, %ecx # sched: [4:0.50]
1163 ; SLM-NEXT:    addl %ecx, %eax # sched: [1:0.50]
1164 ; SLM-NEXT:    retq # sched: [4:1.00]
1166 ; SANDY-LABEL: test_cvtsd2si:
1167 ; SANDY:       # BB#0:
1168 ; SANDY-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [5:1.00]
1169 ; SANDY-NEXT:    vcvtsd2si (%rdi), %eax # sched: [10:1.00]
1170 ; SANDY-NEXT:    addl %ecx, %eax # sched: [1:0.33]
1171 ; SANDY-NEXT:    retq # sched: [1:1.00]
1173 ; HASWELL-LABEL: test_cvtsd2si:
1174 ; HASWELL:       # BB#0:
1175 ; HASWELL-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [4:1.00]
1176 ; HASWELL-NEXT:    vcvtsd2si (%rdi), %eax # sched: [4:1.00]
1177 ; HASWELL-NEXT:    addl %ecx, %eax # sched: [1:0.25]
1178 ; HASWELL-NEXT:    retq # sched: [2:1.00]
1180 ; BROADWELL-LABEL: test_cvtsd2si:
1181 ; BROADWELL:       # BB#0:
1182 ; BROADWELL-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [4:1.00]
1183 ; BROADWELL-NEXT:    vcvtsd2si (%rdi), %eax # sched: [9:1.00]
1184 ; BROADWELL-NEXT:    addl %ecx, %eax # sched: [1:0.25]
1185 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1187 ; SKYLAKE-LABEL: test_cvtsd2si:
1188 ; SKYLAKE:       # BB#0:
1189 ; SKYLAKE-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [6:1.00]
1190 ; SKYLAKE-NEXT:    vcvtsd2si (%rdi), %eax # sched: [11:1.00]
1191 ; SKYLAKE-NEXT:    addl %ecx, %eax # sched: [1:0.25]
1192 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1194 ; SKX-LABEL: test_cvtsd2si:
1195 ; SKX:       # BB#0:
1196 ; SKX-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [6:1.00]
1197 ; SKX-NEXT:    vcvtsd2si (%rdi), %eax # sched: [11:1.00]
1198 ; SKX-NEXT:    addl %ecx, %eax # sched: [1:0.25]
1199 ; SKX-NEXT:    retq # sched: [7:1.00]
1201 ; BTVER2-LABEL: test_cvtsd2si:
1202 ; BTVER2:       # BB#0:
1203 ; BTVER2-NEXT:    vcvtsd2si (%rdi), %eax # sched: [8:1.00]
1204 ; BTVER2-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [3:1.00]
1205 ; BTVER2-NEXT:    addl %ecx, %eax # sched: [1:0.50]
1206 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1208 ; ZNVER1-LABEL: test_cvtsd2si:
1209 ; ZNVER1:       # BB#0:
1210 ; ZNVER1-NEXT:    vcvtsd2si (%rdi), %eax # sched: [12:1.00]
1211 ; ZNVER1-NEXT:    vcvtsd2si %xmm0, %ecx # sched: [5:1.00]
1212 ; ZNVER1-NEXT:    addl %ecx, %eax # sched: [1:0.25]
1213 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1214   %1 = insertelement <2 x double> undef, double %a0, i32 0
1215   %2 = call i32 @llvm.x86.sse2.cvtsd2si(<2 x double> %1)
1216   %3 = load double, double *%a1, align 8
1217   %4 = insertelement <2 x double> undef, double %3, i32 0
1218   %5 = call i32 @llvm.x86.sse2.cvtsd2si(<2 x double> %4)
1219   %6 = add i32 %2, %5
1220   ret i32 %6
1222 declare i32 @llvm.x86.sse2.cvtsd2si(<2 x double>) nounwind readnone
1224 define i64 @test_cvtsd2siq(double %a0, double *%a1) {
1225 ; GENERIC-LABEL: test_cvtsd2siq:
1226 ; GENERIC:       # BB#0:
1227 ; GENERIC-NEXT:    cvtsd2si %xmm0, %rcx # sched: [5:1.00]
1228 ; GENERIC-NEXT:    cvtsd2si (%rdi), %rax # sched: [9:1.00]
1229 ; GENERIC-NEXT:    addq %rcx, %rax # sched: [1:0.33]
1230 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1232 ; ATOM-LABEL: test_cvtsd2siq:
1233 ; ATOM:       # BB#0:
1234 ; ATOM-NEXT:    cvtsd2si (%rdi), %rax # sched: [9:4.50]
1235 ; ATOM-NEXT:    cvtsd2si %xmm0, %rcx # sched: [8:4.00]
1236 ; ATOM-NEXT:    addq %rcx, %rax # sched: [1:0.50]
1237 ; ATOM-NEXT:    retq # sched: [79:39.50]
1239 ; SLM-LABEL: test_cvtsd2siq:
1240 ; SLM:       # BB#0:
1241 ; SLM-NEXT:    cvtsd2si (%rdi), %rax # sched: [7:1.00]
1242 ; SLM-NEXT:    cvtsd2si %xmm0, %rcx # sched: [4:0.50]
1243 ; SLM-NEXT:    addq %rcx, %rax # sched: [1:0.50]
1244 ; SLM-NEXT:    retq # sched: [4:1.00]
1246 ; SANDY-LABEL: test_cvtsd2siq:
1247 ; SANDY:       # BB#0:
1248 ; SANDY-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [5:1.00]
1249 ; SANDY-NEXT:    vcvtsd2si (%rdi), %rax # sched: [10:1.00]
1250 ; SANDY-NEXT:    addq %rcx, %rax # sched: [1:0.33]
1251 ; SANDY-NEXT:    retq # sched: [1:1.00]
1253 ; HASWELL-LABEL: test_cvtsd2siq:
1254 ; HASWELL:       # BB#0:
1255 ; HASWELL-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [4:1.00]
1256 ; HASWELL-NEXT:    vcvtsd2si (%rdi), %rax # sched: [4:1.00]
1257 ; HASWELL-NEXT:    addq %rcx, %rax # sched: [1:0.25]
1258 ; HASWELL-NEXT:    retq # sched: [2:1.00]
1260 ; BROADWELL-LABEL: test_cvtsd2siq:
1261 ; BROADWELL:       # BB#0:
1262 ; BROADWELL-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [4:1.00]
1263 ; BROADWELL-NEXT:    vcvtsd2si (%rdi), %rax # sched: [9:1.00]
1264 ; BROADWELL-NEXT:    addq %rcx, %rax # sched: [1:0.25]
1265 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1267 ; SKYLAKE-LABEL: test_cvtsd2siq:
1268 ; SKYLAKE:       # BB#0:
1269 ; SKYLAKE-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [6:1.00]
1270 ; SKYLAKE-NEXT:    vcvtsd2si (%rdi), %rax # sched: [11:1.00]
1271 ; SKYLAKE-NEXT:    addq %rcx, %rax # sched: [1:0.25]
1272 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1274 ; SKX-LABEL: test_cvtsd2siq:
1275 ; SKX:       # BB#0:
1276 ; SKX-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [6:1.00]
1277 ; SKX-NEXT:    vcvtsd2si (%rdi), %rax # sched: [11:1.00]
1278 ; SKX-NEXT:    addq %rcx, %rax # sched: [1:0.25]
1279 ; SKX-NEXT:    retq # sched: [7:1.00]
1281 ; BTVER2-LABEL: test_cvtsd2siq:
1282 ; BTVER2:       # BB#0:
1283 ; BTVER2-NEXT:    vcvtsd2si (%rdi), %rax # sched: [8:1.00]
1284 ; BTVER2-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [3:1.00]
1285 ; BTVER2-NEXT:    addq %rcx, %rax # sched: [1:0.50]
1286 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1288 ; ZNVER1-LABEL: test_cvtsd2siq:
1289 ; ZNVER1:       # BB#0:
1290 ; ZNVER1-NEXT:    vcvtsd2si (%rdi), %rax # sched: [12:1.00]
1291 ; ZNVER1-NEXT:    vcvtsd2si %xmm0, %rcx # sched: [5:1.00]
1292 ; ZNVER1-NEXT:    addq %rcx, %rax # sched: [1:0.25]
1293 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1294   %1 = insertelement <2 x double> undef, double %a0, i32 0
1295   %2 = call i64 @llvm.x86.sse2.cvtsd2si64(<2 x double> %1)
1296   %3 = load double, double *%a1, align 8
1297   %4 = insertelement <2 x double> undef, double %3, i32 0
1298   %5 = call i64 @llvm.x86.sse2.cvtsd2si64(<2 x double> %4)
1299   %6 = add i64 %2, %5
1300   ret i64 %6
1302 declare i64 @llvm.x86.sse2.cvtsd2si64(<2 x double>) nounwind readnone
1304 define float @test_cvtsd2ss(double %a0, double *%a1) {
1305 ; GENERIC-LABEL: test_cvtsd2ss:
1306 ; GENERIC:       # BB#0:
1307 ; GENERIC-NEXT:    cvtsd2ss %xmm0, %xmm1 # sched: [4:1.00]
1308 ; GENERIC-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [4:0.50]
1309 ; GENERIC-NEXT:    cvtsd2ss %xmm0, %xmm0 # sched: [4:1.00]
1310 ; GENERIC-NEXT:    addss %xmm1, %xmm0 # sched: [3:1.00]
1311 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1313 ; ATOM-LABEL: test_cvtsd2ss:
1314 ; ATOM:       # BB#0:
1315 ; ATOM-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero sched: [1:1.00]
1316 ; ATOM-NEXT:    cvtsd2ss %xmm0, %xmm2 # sched: [6:3.00]
1317 ; ATOM-NEXT:    xorps %xmm0, %xmm0 # sched: [1:0.50]
1318 ; ATOM-NEXT:    cvtsd2ss %xmm1, %xmm0 # sched: [6:3.00]
1319 ; ATOM-NEXT:    addss %xmm2, %xmm0 # sched: [5:5.00]
1320 ; ATOM-NEXT:    retq # sched: [79:39.50]
1322 ; SLM-LABEL: test_cvtsd2ss:
1323 ; SLM:       # BB#0:
1324 ; SLM-NEXT:    cvtsd2ss %xmm0, %xmm1 # sched: [4:0.50]
1325 ; SLM-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [3:1.00]
1326 ; SLM-NEXT:    cvtsd2ss %xmm0, %xmm0 # sched: [4:0.50]
1327 ; SLM-NEXT:    addss %xmm1, %xmm0 # sched: [3:1.00]
1328 ; SLM-NEXT:    retq # sched: [4:1.00]
1330 ; SANDY-LABEL: test_cvtsd2ss:
1331 ; SANDY:       # BB#0:
1332 ; SANDY-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
1333 ; SANDY-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [6:0.50]
1334 ; SANDY-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
1335 ; SANDY-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1336 ; SANDY-NEXT:    retq # sched: [1:1.00]
1338 ; HASWELL-LABEL: test_cvtsd2ss:
1339 ; HASWELL:       # BB#0:
1340 ; HASWELL-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
1341 ; HASWELL-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [1:0.50]
1342 ; HASWELL-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
1343 ; HASWELL-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1344 ; HASWELL-NEXT:    retq # sched: [2:1.00]
1346 ; BROADWELL-LABEL: test_cvtsd2ss:
1347 ; BROADWELL:       # BB#0:
1348 ; BROADWELL-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
1349 ; BROADWELL-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [5:0.50]
1350 ; BROADWELL-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
1351 ; BROADWELL-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1352 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1354 ; SKYLAKE-LABEL: test_cvtsd2ss:
1355 ; SKYLAKE:       # BB#0:
1356 ; SKYLAKE-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
1357 ; SKYLAKE-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [5:0.50]
1358 ; SKYLAKE-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
1359 ; SKYLAKE-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
1360 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1362 ; SKX-LABEL: test_cvtsd2ss:
1363 ; SKX:       # BB#0:
1364 ; SKX-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
1365 ; SKX-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [5:0.50]
1366 ; SKX-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
1367 ; SKX-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
1368 ; SKX-NEXT:    retq # sched: [7:1.00]
1370 ; BTVER2-LABEL: test_cvtsd2ss:
1371 ; BTVER2:       # BB#0:
1372 ; BTVER2-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [5:1.00]
1373 ; BTVER2-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
1374 ; BTVER2-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [3:1.00]
1375 ; BTVER2-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1376 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1378 ; ZNVER1-LABEL: test_cvtsd2ss:
1379 ; ZNVER1:       # BB#0:
1380 ; ZNVER1-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero sched: [8:0.50]
1381 ; ZNVER1-NEXT:    vcvtsd2ss %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
1382 ; ZNVER1-NEXT:    vcvtsd2ss %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
1383 ; ZNVER1-NEXT:    vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1384 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1385   %1 = fptrunc double %a0 to float
1386   %2 = load double, double *%a1, align 8
1387   %3 = fptrunc double %2 to float
1388   %4 = fadd float %1, %3
1389   ret float %4
1392 define double @test_cvtsi2sd(i32 %a0, i32 *%a1) {
1393 ; GENERIC-LABEL: test_cvtsi2sd:
1394 ; GENERIC:       # BB#0:
1395 ; GENERIC-NEXT:    cvtsi2sdl %edi, %xmm1 # sched: [4:1.00]
1396 ; GENERIC-NEXT:    cvtsi2sdl (%rsi), %xmm0 # sched: [9:1.00]
1397 ; GENERIC-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
1398 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1400 ; ATOM-LABEL: test_cvtsi2sd:
1401 ; ATOM:       # BB#0:
1402 ; ATOM-NEXT:    cvtsi2sdl (%rsi), %xmm0 # sched: [7:3.50]
1403 ; ATOM-NEXT:    cvtsi2sdl %edi, %xmm1 # sched: [6:3.00]
1404 ; ATOM-NEXT:    addsd %xmm1, %xmm0 # sched: [5:5.00]
1405 ; ATOM-NEXT:    retq # sched: [79:39.50]
1407 ; SLM-LABEL: test_cvtsi2sd:
1408 ; SLM:       # BB#0:
1409 ; SLM-NEXT:    cvtsi2sdl (%rsi), %xmm0 # sched: [7:1.00]
1410 ; SLM-NEXT:    cvtsi2sdl %edi, %xmm1 # sched: [4:0.50]
1411 ; SLM-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
1412 ; SLM-NEXT:    retq # sched: [4:1.00]
1414 ; SANDY-LABEL: test_cvtsi2sd:
1415 ; SANDY:       # BB#0:
1416 ; SANDY-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [4:1.00]
1417 ; SANDY-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
1418 ; SANDY-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1419 ; SANDY-NEXT:    retq # sched: [1:1.00]
1421 ; HASWELL-LABEL: test_cvtsi2sd:
1422 ; HASWELL:       # BB#0:
1423 ; HASWELL-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [4:1.00]
1424 ; HASWELL-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [8:1.00]
1425 ; HASWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1426 ; HASWELL-NEXT:    retq # sched: [2:1.00]
1428 ; BROADWELL-LABEL: test_cvtsi2sd:
1429 ; BROADWELL:       # BB#0:
1430 ; BROADWELL-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [4:1.00]
1431 ; BROADWELL-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
1432 ; BROADWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1433 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1435 ; SKYLAKE-LABEL: test_cvtsi2sd:
1436 ; SKYLAKE:       # BB#0:
1437 ; SKYLAKE-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [5:1.00]
1438 ; SKYLAKE-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
1439 ; SKYLAKE-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
1440 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1442 ; SKX-LABEL: test_cvtsi2sd:
1443 ; SKX:       # BB#0:
1444 ; SKX-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [5:1.00]
1445 ; SKX-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
1446 ; SKX-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
1447 ; SKX-NEXT:    retq # sched: [7:1.00]
1449 ; BTVER2-LABEL: test_cvtsi2sd:
1450 ; BTVER2:       # BB#0:
1451 ; BTVER2-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [3:1.00]
1452 ; BTVER2-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [8:1.00]
1453 ; BTVER2-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1454 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1456 ; ZNVER1-LABEL: test_cvtsi2sd:
1457 ; ZNVER1:       # BB#0:
1458 ; ZNVER1-NEXT:    vcvtsi2sdl %edi, %xmm0, %xmm0 # sched: [5:1.00]
1459 ; ZNVER1-NEXT:    vcvtsi2sdl (%rsi), %xmm1, %xmm1 # sched: [12:1.00]
1460 ; ZNVER1-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1461 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1462   %1 = sitofp i32 %a0 to double
1463   %2 = load i32, i32 *%a1, align 8
1464   %3 = sitofp i32 %2 to double
1465   %4 = fadd double %1, %3
1466   ret double %4
1469 define double @test_cvtsi2sdq(i64 %a0, i64 *%a1) {
1470 ; GENERIC-LABEL: test_cvtsi2sdq:
1471 ; GENERIC:       # BB#0:
1472 ; GENERIC-NEXT:    cvtsi2sdq %rdi, %xmm1 # sched: [4:1.00]
1473 ; GENERIC-NEXT:    cvtsi2sdq (%rsi), %xmm0 # sched: [9:1.00]
1474 ; GENERIC-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
1475 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1477 ; ATOM-LABEL: test_cvtsi2sdq:
1478 ; ATOM:       # BB#0:
1479 ; ATOM-NEXT:    cvtsi2sdq (%rsi), %xmm0 # sched: [7:3.50]
1480 ; ATOM-NEXT:    cvtsi2sdq %rdi, %xmm1 # sched: [6:3.00]
1481 ; ATOM-NEXT:    addsd %xmm1, %xmm0 # sched: [5:5.00]
1482 ; ATOM-NEXT:    retq # sched: [79:39.50]
1484 ; SLM-LABEL: test_cvtsi2sdq:
1485 ; SLM:       # BB#0:
1486 ; SLM-NEXT:    cvtsi2sdq (%rsi), %xmm0 # sched: [7:1.00]
1487 ; SLM-NEXT:    cvtsi2sdq %rdi, %xmm1 # sched: [4:0.50]
1488 ; SLM-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
1489 ; SLM-NEXT:    retq # sched: [4:1.00]
1491 ; SANDY-LABEL: test_cvtsi2sdq:
1492 ; SANDY:       # BB#0:
1493 ; SANDY-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [4:1.00]
1494 ; SANDY-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
1495 ; SANDY-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1496 ; SANDY-NEXT:    retq # sched: [1:1.00]
1498 ; HASWELL-LABEL: test_cvtsi2sdq:
1499 ; HASWELL:       # BB#0:
1500 ; HASWELL-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [4:1.00]
1501 ; HASWELL-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [8:1.00]
1502 ; HASWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1503 ; HASWELL-NEXT:    retq # sched: [2:1.00]
1505 ; BROADWELL-LABEL: test_cvtsi2sdq:
1506 ; BROADWELL:       # BB#0:
1507 ; BROADWELL-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [4:1.00]
1508 ; BROADWELL-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
1509 ; BROADWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1510 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1512 ; SKYLAKE-LABEL: test_cvtsi2sdq:
1513 ; SKYLAKE:       # BB#0:
1514 ; SKYLAKE-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [5:1.00]
1515 ; SKYLAKE-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
1516 ; SKYLAKE-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
1517 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1519 ; SKX-LABEL: test_cvtsi2sdq:
1520 ; SKX:       # BB#0:
1521 ; SKX-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [5:1.00]
1522 ; SKX-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
1523 ; SKX-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
1524 ; SKX-NEXT:    retq # sched: [7:1.00]
1526 ; BTVER2-LABEL: test_cvtsi2sdq:
1527 ; BTVER2:       # BB#0:
1528 ; BTVER2-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [3:1.00]
1529 ; BTVER2-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [8:1.00]
1530 ; BTVER2-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1531 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1533 ; ZNVER1-LABEL: test_cvtsi2sdq:
1534 ; ZNVER1:       # BB#0:
1535 ; ZNVER1-NEXT:    vcvtsi2sdq %rdi, %xmm0, %xmm0 # sched: [5:1.00]
1536 ; ZNVER1-NEXT:    vcvtsi2sdq (%rsi), %xmm1, %xmm1 # sched: [12:1.00]
1537 ; ZNVER1-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1538 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1539   %1 = sitofp i64 %a0 to double
1540   %2 = load i64, i64 *%a1, align 8
1541   %3 = sitofp i64 %2 to double
1542   %4 = fadd double %1, %3
1543   ret double %4
1546 ; TODO - cvtss2sd_m
1548 define double @test_cvtss2sd(float %a0, float *%a1) {
1549 ; GENERIC-LABEL: test_cvtss2sd:
1550 ; GENERIC:       # BB#0:
1551 ; GENERIC-NEXT:    cvtss2sd %xmm0, %xmm1 # sched: [1:1.00]
1552 ; GENERIC-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [6:0.50]
1553 ; GENERIC-NEXT:    cvtss2sd %xmm0, %xmm0 # sched: [1:1.00]
1554 ; GENERIC-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
1555 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1557 ; ATOM-LABEL: test_cvtss2sd:
1558 ; ATOM:       # BB#0:
1559 ; ATOM-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [1:1.00]
1560 ; ATOM-NEXT:    cvtss2sd %xmm0, %xmm2 # sched: [6:3.00]
1561 ; ATOM-NEXT:    xorps %xmm0, %xmm0 # sched: [1:0.50]
1562 ; ATOM-NEXT:    cvtss2sd %xmm1, %xmm0 # sched: [6:3.00]
1563 ; ATOM-NEXT:    addsd %xmm2, %xmm0 # sched: [5:5.00]
1564 ; ATOM-NEXT:    retq # sched: [79:39.50]
1566 ; SLM-LABEL: test_cvtss2sd:
1567 ; SLM:       # BB#0:
1568 ; SLM-NEXT:    cvtss2sd %xmm0, %xmm1 # sched: [4:0.50]
1569 ; SLM-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [3:1.00]
1570 ; SLM-NEXT:    cvtss2sd %xmm0, %xmm0 # sched: [4:0.50]
1571 ; SLM-NEXT:    addsd %xmm1, %xmm0 # sched: [3:1.00]
1572 ; SLM-NEXT:    retq # sched: [4:1.00]
1574 ; SANDY-LABEL: test_cvtss2sd:
1575 ; SANDY:       # BB#0:
1576 ; SANDY-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [1:1.00]
1577 ; SANDY-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [6:0.50]
1578 ; SANDY-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [1:1.00]
1579 ; SANDY-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1580 ; SANDY-NEXT:    retq # sched: [1:1.00]
1582 ; HASWELL-LABEL: test_cvtss2sd:
1583 ; HASWELL:       # BB#0:
1584 ; HASWELL-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [2:1.00]
1585 ; HASWELL-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [1:0.50]
1586 ; HASWELL-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [2:1.00]
1587 ; HASWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1588 ; HASWELL-NEXT:    retq # sched: [2:1.00]
1590 ; BROADWELL-LABEL: test_cvtss2sd:
1591 ; BROADWELL:       # BB#0:
1592 ; BROADWELL-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [2:1.00]
1593 ; BROADWELL-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
1594 ; BROADWELL-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [2:1.00]
1595 ; BROADWELL-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1596 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1598 ; SKYLAKE-LABEL: test_cvtss2sd:
1599 ; SKYLAKE:       # BB#0:
1600 ; SKYLAKE-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
1601 ; SKYLAKE-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
1602 ; SKYLAKE-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
1603 ; SKYLAKE-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
1604 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1606 ; SKX-LABEL: test_cvtss2sd:
1607 ; SKX:       # BB#0:
1608 ; SKX-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
1609 ; SKX-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
1610 ; SKX-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
1611 ; SKX-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
1612 ; SKX-NEXT:    retq # sched: [7:1.00]
1614 ; BTVER2-LABEL: test_cvtss2sd:
1615 ; BTVER2:       # BB#0:
1616 ; BTVER2-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:1.00]
1617 ; BTVER2-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
1618 ; BTVER2-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [3:1.00]
1619 ; BTVER2-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1620 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1622 ; ZNVER1-LABEL: test_cvtss2sd:
1623 ; ZNVER1:       # BB#0:
1624 ; ZNVER1-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [8:0.50]
1625 ; ZNVER1-NEXT:    vcvtss2sd %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
1626 ; ZNVER1-NEXT:    vcvtss2sd %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
1627 ; ZNVER1-NEXT:    vaddsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1628 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1629   %1 = fpext float %a0 to double
1630   %2 = load float, float *%a1, align 4
1631   %3 = fpext float %2 to double
1632   %4 = fadd double %1, %3
1633   ret double %4
1636 define <4 x i32> @test_cvttpd2dq(<2 x double> %a0, <2 x double> *%a1) {
1637 ; GENERIC-LABEL: test_cvttpd2dq:
1638 ; GENERIC:       # BB#0:
1639 ; GENERIC-NEXT:    cvttpd2dq %xmm0, %xmm1 # sched: [4:1.00]
1640 ; GENERIC-NEXT:    cvttpd2dq (%rdi), %xmm0 # sched: [10:1.00]
1641 ; GENERIC-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1642 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1644 ; ATOM-LABEL: test_cvttpd2dq:
1645 ; ATOM:       # BB#0:
1646 ; ATOM-NEXT:    cvttpd2dq (%rdi), %xmm1 # sched: [8:4.00]
1647 ; ATOM-NEXT:    cvttpd2dq %xmm0, %xmm0 # sched: [7:3.50]
1648 ; ATOM-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
1649 ; ATOM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
1650 ; ATOM-NEXT:    retq # sched: [79:39.50]
1652 ; SLM-LABEL: test_cvttpd2dq:
1653 ; SLM:       # BB#0:
1654 ; SLM-NEXT:    cvttpd2dq %xmm0, %xmm1 # sched: [4:0.50]
1655 ; SLM-NEXT:    cvttpd2dq (%rdi), %xmm0 # sched: [7:1.00]
1656 ; SLM-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1657 ; SLM-NEXT:    retq # sched: [4:1.00]
1659 ; SANDY-LABEL: test_cvttpd2dq:
1660 ; SANDY:       # BB#0:
1661 ; SANDY-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [4:1.00]
1662 ; SANDY-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [10:1.00]
1663 ; SANDY-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1664 ; SANDY-NEXT:    retq # sched: [1:1.00]
1666 ; HASWELL-LABEL: test_cvttpd2dq:
1667 ; HASWELL:       # BB#0:
1668 ; HASWELL-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [4:1.00]
1669 ; HASWELL-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [7:1.00]
1670 ; HASWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1671 ; HASWELL-NEXT:    retq # sched: [2:1.00]
1673 ; BROADWELL-LABEL: test_cvttpd2dq:
1674 ; BROADWELL:       # BB#0:
1675 ; BROADWELL-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [4:1.00]
1676 ; BROADWELL-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
1677 ; BROADWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1678 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1680 ; SKYLAKE-LABEL: test_cvttpd2dq:
1681 ; SKYLAKE:       # BB#0:
1682 ; SKYLAKE-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [5:1.00]
1683 ; SKYLAKE-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
1684 ; SKYLAKE-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
1685 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1687 ; SKX-LABEL: test_cvttpd2dq:
1688 ; SKX:       # BB#0:
1689 ; SKX-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [5:1.00]
1690 ; SKX-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
1691 ; SKX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
1692 ; SKX-NEXT:    retq # sched: [7:1.00]
1694 ; BTVER2-LABEL: test_cvttpd2dq:
1695 ; BTVER2:       # BB#0:
1696 ; BTVER2-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [8:1.00]
1697 ; BTVER2-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [3:1.00]
1698 ; BTVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1699 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1701 ; ZNVER1-LABEL: test_cvttpd2dq:
1702 ; ZNVER1:       # BB#0:
1703 ; ZNVER1-NEXT:    vcvttpd2dqx (%rdi), %xmm1 # sched: [12:1.00]
1704 ; ZNVER1-NEXT:    vcvttpd2dq %xmm0, %xmm0 # sched: [5:1.00]
1705 ; ZNVER1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
1706 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1707   %1 = fptosi <2 x double> %a0 to <2 x i32>
1708   %2 = shufflevector <2 x i32> %1, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1709   %3 = load <2 x double>, <2 x double> *%a1, align 16
1710   %4 = fptosi <2 x double> %3 to <2 x i32>
1711   %5 = shufflevector <2 x i32> %4, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1712   %6 = add <4 x i32> %2, %5
1713   ret <4 x i32> %6
1716 define <4 x i32> @test_cvttps2dq(<4 x float> %a0, <4 x float> *%a1) {
1717 ; GENERIC-LABEL: test_cvttps2dq:
1718 ; GENERIC:       # BB#0:
1719 ; GENERIC-NEXT:    cvttps2dq %xmm0, %xmm1 # sched: [3:1.00]
1720 ; GENERIC-NEXT:    cvttps2dq (%rdi), %xmm0 # sched: [9:1.00]
1721 ; GENERIC-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1722 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1724 ; ATOM-LABEL: test_cvttps2dq:
1725 ; ATOM:       # BB#0:
1726 ; ATOM-NEXT:    cvttps2dq (%rdi), %xmm1 # sched: [7:3.50]
1727 ; ATOM-NEXT:    cvttps2dq %xmm0, %xmm0 # sched: [6:3.00]
1728 ; ATOM-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
1729 ; ATOM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
1730 ; ATOM-NEXT:    retq # sched: [79:39.50]
1732 ; SLM-LABEL: test_cvttps2dq:
1733 ; SLM:       # BB#0:
1734 ; SLM-NEXT:    cvttps2dq %xmm0, %xmm1 # sched: [4:0.50]
1735 ; SLM-NEXT:    cvttps2dq (%rdi), %xmm0 # sched: [7:1.00]
1736 ; SLM-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
1737 ; SLM-NEXT:    retq # sched: [4:1.00]
1739 ; SANDY-LABEL: test_cvttps2dq:
1740 ; SANDY:       # BB#0:
1741 ; SANDY-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [3:1.00]
1742 ; SANDY-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [9:1.00]
1743 ; SANDY-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1744 ; SANDY-NEXT:    retq # sched: [1:1.00]
1746 ; HASWELL-LABEL: test_cvttps2dq:
1747 ; HASWELL:       # BB#0:
1748 ; HASWELL-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [3:1.00]
1749 ; HASWELL-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [3:1.00]
1750 ; HASWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1751 ; HASWELL-NEXT:    retq # sched: [2:1.00]
1753 ; BROADWELL-LABEL: test_cvttps2dq:
1754 ; BROADWELL:       # BB#0:
1755 ; BROADWELL-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [3:1.00]
1756 ; BROADWELL-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [8:1.00]
1757 ; BROADWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1758 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1760 ; SKYLAKE-LABEL: test_cvttps2dq:
1761 ; SKYLAKE:       # BB#0:
1762 ; SKYLAKE-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [4:0.33]
1763 ; SKYLAKE-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [10:0.50]
1764 ; SKYLAKE-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
1765 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1767 ; SKX-LABEL: test_cvttps2dq:
1768 ; SKX:       # BB#0:
1769 ; SKX-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [4:0.33]
1770 ; SKX-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [10:0.50]
1771 ; SKX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
1772 ; SKX-NEXT:    retq # sched: [7:1.00]
1774 ; BTVER2-LABEL: test_cvttps2dq:
1775 ; BTVER2:       # BB#0:
1776 ; BTVER2-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [8:1.00]
1777 ; BTVER2-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [3:1.00]
1778 ; BTVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1779 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1781 ; ZNVER1-LABEL: test_cvttps2dq:
1782 ; ZNVER1:       # BB#0:
1783 ; ZNVER1-NEXT:    vcvttps2dq (%rdi), %xmm1 # sched: [12:1.00]
1784 ; ZNVER1-NEXT:    vcvttps2dq %xmm0, %xmm0 # sched: [5:1.00]
1785 ; ZNVER1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
1786 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1787   %1 = fptosi <4 x float> %a0 to <4 x i32>
1788   %2 = load <4 x float>, <4 x float> *%a1, align 16
1789   %3 = fptosi <4 x float> %2 to <4 x i32>
1790   %4 = add <4 x i32> %1, %3
1791   ret <4 x i32> %4
1794 define i32 @test_cvttsd2si(double %a0, double *%a1) {
1795 ; GENERIC-LABEL: test_cvttsd2si:
1796 ; GENERIC:       # BB#0:
1797 ; GENERIC-NEXT:    cvttsd2si %xmm0, %ecx # sched: [5:1.00]
1798 ; GENERIC-NEXT:    cvttsd2si (%rdi), %eax # sched: [9:1.00]
1799 ; GENERIC-NEXT:    addl %ecx, %eax # sched: [1:0.33]
1800 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1802 ; ATOM-LABEL: test_cvttsd2si:
1803 ; ATOM:       # BB#0:
1804 ; ATOM-NEXT:    cvttsd2si (%rdi), %eax # sched: [9:4.50]
1805 ; ATOM-NEXT:    cvttsd2si %xmm0, %ecx # sched: [8:4.00]
1806 ; ATOM-NEXT:    addl %ecx, %eax # sched: [1:0.50]
1807 ; ATOM-NEXT:    retq # sched: [79:39.50]
1809 ; SLM-LABEL: test_cvttsd2si:
1810 ; SLM:       # BB#0:
1811 ; SLM-NEXT:    cvttsd2si (%rdi), %eax # sched: [7:1.00]
1812 ; SLM-NEXT:    cvttsd2si %xmm0, %ecx # sched: [4:0.50]
1813 ; SLM-NEXT:    addl %ecx, %eax # sched: [1:0.50]
1814 ; SLM-NEXT:    retq # sched: [4:1.00]
1816 ; SANDY-LABEL: test_cvttsd2si:
1817 ; SANDY:       # BB#0:
1818 ; SANDY-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [5:1.00]
1819 ; SANDY-NEXT:    vcvttsd2si (%rdi), %eax # sched: [10:1.00]
1820 ; SANDY-NEXT:    addl %ecx, %eax # sched: [1:0.33]
1821 ; SANDY-NEXT:    retq # sched: [1:1.00]
1823 ; HASWELL-LABEL: test_cvttsd2si:
1824 ; HASWELL:       # BB#0:
1825 ; HASWELL-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [4:1.00]
1826 ; HASWELL-NEXT:    vcvttsd2si (%rdi), %eax # sched: [4:1.00]
1827 ; HASWELL-NEXT:    addl %ecx, %eax # sched: [1:0.25]
1828 ; HASWELL-NEXT:    retq # sched: [2:1.00]
1830 ; BROADWELL-LABEL: test_cvttsd2si:
1831 ; BROADWELL:       # BB#0:
1832 ; BROADWELL-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [4:1.00]
1833 ; BROADWELL-NEXT:    vcvttsd2si (%rdi), %eax # sched: [9:1.00]
1834 ; BROADWELL-NEXT:    addl %ecx, %eax # sched: [1:0.25]
1835 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1837 ; SKYLAKE-LABEL: test_cvttsd2si:
1838 ; SKYLAKE:       # BB#0:
1839 ; SKYLAKE-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [6:1.00]
1840 ; SKYLAKE-NEXT:    vcvttsd2si (%rdi), %eax # sched: [11:1.00]
1841 ; SKYLAKE-NEXT:    addl %ecx, %eax # sched: [1:0.25]
1842 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1844 ; SKX-LABEL: test_cvttsd2si:
1845 ; SKX:       # BB#0:
1846 ; SKX-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [6:1.00]
1847 ; SKX-NEXT:    vcvttsd2si (%rdi), %eax # sched: [11:1.00]
1848 ; SKX-NEXT:    addl %ecx, %eax # sched: [1:0.25]
1849 ; SKX-NEXT:    retq # sched: [7:1.00]
1851 ; BTVER2-LABEL: test_cvttsd2si:
1852 ; BTVER2:       # BB#0:
1853 ; BTVER2-NEXT:    vcvttsd2si (%rdi), %eax # sched: [8:1.00]
1854 ; BTVER2-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [3:1.00]
1855 ; BTVER2-NEXT:    addl %ecx, %eax # sched: [1:0.50]
1856 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1858 ; ZNVER1-LABEL: test_cvttsd2si:
1859 ; ZNVER1:       # BB#0:
1860 ; ZNVER1-NEXT:    vcvttsd2si (%rdi), %eax # sched: [12:1.00]
1861 ; ZNVER1-NEXT:    vcvttsd2si %xmm0, %ecx # sched: [5:1.00]
1862 ; ZNVER1-NEXT:    addl %ecx, %eax # sched: [1:0.25]
1863 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1864   %1 = fptosi double %a0 to i32
1865   %2 = load double, double *%a1, align 8
1866   %3 = fptosi double %2 to i32
1867   %4 = add i32 %1, %3
1868   ret i32 %4
1871 define i64 @test_cvttsd2siq(double %a0, double *%a1) {
1872 ; GENERIC-LABEL: test_cvttsd2siq:
1873 ; GENERIC:       # BB#0:
1874 ; GENERIC-NEXT:    cvttsd2si %xmm0, %rcx # sched: [5:1.00]
1875 ; GENERIC-NEXT:    cvttsd2si (%rdi), %rax # sched: [9:1.00]
1876 ; GENERIC-NEXT:    addq %rcx, %rax # sched: [1:0.33]
1877 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1879 ; ATOM-LABEL: test_cvttsd2siq:
1880 ; ATOM:       # BB#0:
1881 ; ATOM-NEXT:    cvttsd2si (%rdi), %rax # sched: [9:4.50]
1882 ; ATOM-NEXT:    cvttsd2si %xmm0, %rcx # sched: [8:4.00]
1883 ; ATOM-NEXT:    addq %rcx, %rax # sched: [1:0.50]
1884 ; ATOM-NEXT:    retq # sched: [79:39.50]
1886 ; SLM-LABEL: test_cvttsd2siq:
1887 ; SLM:       # BB#0:
1888 ; SLM-NEXT:    cvttsd2si (%rdi), %rax # sched: [7:1.00]
1889 ; SLM-NEXT:    cvttsd2si %xmm0, %rcx # sched: [4:0.50]
1890 ; SLM-NEXT:    addq %rcx, %rax # sched: [1:0.50]
1891 ; SLM-NEXT:    retq # sched: [4:1.00]
1893 ; SANDY-LABEL: test_cvttsd2siq:
1894 ; SANDY:       # BB#0:
1895 ; SANDY-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [5:1.00]
1896 ; SANDY-NEXT:    vcvttsd2si (%rdi), %rax # sched: [10:1.00]
1897 ; SANDY-NEXT:    addq %rcx, %rax # sched: [1:0.33]
1898 ; SANDY-NEXT:    retq # sched: [1:1.00]
1900 ; HASWELL-LABEL: test_cvttsd2siq:
1901 ; HASWELL:       # BB#0:
1902 ; HASWELL-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [4:1.00]
1903 ; HASWELL-NEXT:    vcvttsd2si (%rdi), %rax # sched: [4:1.00]
1904 ; HASWELL-NEXT:    addq %rcx, %rax # sched: [1:0.25]
1905 ; HASWELL-NEXT:    retq # sched: [2:1.00]
1907 ; BROADWELL-LABEL: test_cvttsd2siq:
1908 ; BROADWELL:       # BB#0:
1909 ; BROADWELL-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [4:1.00]
1910 ; BROADWELL-NEXT:    vcvttsd2si (%rdi), %rax # sched: [9:1.00]
1911 ; BROADWELL-NEXT:    addq %rcx, %rax # sched: [1:0.25]
1912 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1914 ; SKYLAKE-LABEL: test_cvttsd2siq:
1915 ; SKYLAKE:       # BB#0:
1916 ; SKYLAKE-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [6:1.00]
1917 ; SKYLAKE-NEXT:    vcvttsd2si (%rdi), %rax # sched: [11:1.00]
1918 ; SKYLAKE-NEXT:    addq %rcx, %rax # sched: [1:0.25]
1919 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1921 ; SKX-LABEL: test_cvttsd2siq:
1922 ; SKX:       # BB#0:
1923 ; SKX-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [6:1.00]
1924 ; SKX-NEXT:    vcvttsd2si (%rdi), %rax # sched: [11:1.00]
1925 ; SKX-NEXT:    addq %rcx, %rax # sched: [1:0.25]
1926 ; SKX-NEXT:    retq # sched: [7:1.00]
1928 ; BTVER2-LABEL: test_cvttsd2siq:
1929 ; BTVER2:       # BB#0:
1930 ; BTVER2-NEXT:    vcvttsd2si (%rdi), %rax # sched: [8:1.00]
1931 ; BTVER2-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [3:1.00]
1932 ; BTVER2-NEXT:    addq %rcx, %rax # sched: [1:0.50]
1933 ; BTVER2-NEXT:    retq # sched: [4:1.00]
1935 ; ZNVER1-LABEL: test_cvttsd2siq:
1936 ; ZNVER1:       # BB#0:
1937 ; ZNVER1-NEXT:    vcvttsd2si (%rdi), %rax # sched: [12:1.00]
1938 ; ZNVER1-NEXT:    vcvttsd2si %xmm0, %rcx # sched: [5:1.00]
1939 ; ZNVER1-NEXT:    addq %rcx, %rax # sched: [1:0.25]
1940 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
1941   %1 = fptosi double %a0 to i64
1942   %2 = load double, double *%a1, align 8
1943   %3 = fptosi double %2 to i64
1944   %4 = add i64 %1, %3
1945   ret i64 %4
1948 define <2 x double> @test_divpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
1949 ; GENERIC-LABEL: test_divpd:
1950 ; GENERIC:       # BB#0:
1951 ; GENERIC-NEXT:    divpd %xmm1, %xmm0 # sched: [22:1.00]
1952 ; GENERIC-NEXT:    divpd (%rdi), %xmm0 # sched: [28:1.00]
1953 ; GENERIC-NEXT:    retq # sched: [1:1.00]
1955 ; ATOM-LABEL: test_divpd:
1956 ; ATOM:       # BB#0:
1957 ; ATOM-NEXT:    divpd %xmm1, %xmm0 # sched: [125:62.50]
1958 ; ATOM-NEXT:    divpd (%rdi), %xmm0 # sched: [125:62.50]
1959 ; ATOM-NEXT:    retq # sched: [79:39.50]
1961 ; SLM-LABEL: test_divpd:
1962 ; SLM:       # BB#0:
1963 ; SLM-NEXT:    divpd %xmm1, %xmm0 # sched: [34:34.00]
1964 ; SLM-NEXT:    divpd (%rdi), %xmm0 # sched: [37:34.00]
1965 ; SLM-NEXT:    retq # sched: [4:1.00]
1967 ; SANDY-LABEL: test_divpd:
1968 ; SANDY:       # BB#0:
1969 ; SANDY-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [22:1.00]
1970 ; SANDY-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [28:1.00]
1971 ; SANDY-NEXT:    retq # sched: [1:1.00]
1973 ; HASWELL-LABEL: test_divpd:
1974 ; HASWELL:       # BB#0:
1975 ; HASWELL-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [20:1.00]
1976 ; HASWELL-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [20:1.00]
1977 ; HASWELL-NEXT:    retq # sched: [2:1.00]
1979 ; BROADWELL-LABEL: test_divpd:
1980 ; BROADWELL:       # BB#0:
1981 ; BROADWELL-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [14:1.00]
1982 ; BROADWELL-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [19:1.00]
1983 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
1985 ; SKYLAKE-LABEL: test_divpd:
1986 ; SKYLAKE:       # BB#0:
1987 ; SKYLAKE-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [14:1.00]
1988 ; SKYLAKE-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [20:1.00]
1989 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
1991 ; SKX-LABEL: test_divpd:
1992 ; SKX:       # BB#0:
1993 ; SKX-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [14:1.00]
1994 ; SKX-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [20:1.00]
1995 ; SKX-NEXT:    retq # sched: [7:1.00]
1997 ; BTVER2-LABEL: test_divpd:
1998 ; BTVER2:       # BB#0:
1999 ; BTVER2-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [19:19.00]
2000 ; BTVER2-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [24:19.00]
2001 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2003 ; ZNVER1-LABEL: test_divpd:
2004 ; ZNVER1:       # BB#0:
2005 ; ZNVER1-NEXT:    vdivpd %xmm1, %xmm0, %xmm0 # sched: [15:1.00]
2006 ; ZNVER1-NEXT:    vdivpd (%rdi), %xmm0, %xmm0 # sched: [22:1.00]
2007 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2008   %1 = fdiv <2 x double> %a0, %a1
2009   %2 = load <2 x double>, <2 x double> *%a2, align 16
2010   %3 = fdiv <2 x double> %1, %2
2011   ret <2 x double> %3
2014 define double @test_divsd(double %a0, double %a1, double *%a2) {
2015 ; GENERIC-LABEL: test_divsd:
2016 ; GENERIC:       # BB#0:
2017 ; GENERIC-NEXT:    divsd %xmm1, %xmm0 # sched: [22:1.00]
2018 ; GENERIC-NEXT:    divsd (%rdi), %xmm0 # sched: [28:1.00]
2019 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2021 ; ATOM-LABEL: test_divsd:
2022 ; ATOM:       # BB#0:
2023 ; ATOM-NEXT:    divsd %xmm1, %xmm0 # sched: [62:31.00]
2024 ; ATOM-NEXT:    divsd (%rdi), %xmm0 # sched: [62:31.00]
2025 ; ATOM-NEXT:    retq # sched: [79:39.50]
2027 ; SLM-LABEL: test_divsd:
2028 ; SLM:       # BB#0:
2029 ; SLM-NEXT:    divsd %xmm1, %xmm0 # sched: [34:34.00]
2030 ; SLM-NEXT:    divsd (%rdi), %xmm0 # sched: [37:34.00]
2031 ; SLM-NEXT:    retq # sched: [4:1.00]
2033 ; SANDY-LABEL: test_divsd:
2034 ; SANDY:       # BB#0:
2035 ; SANDY-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [22:1.00]
2036 ; SANDY-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [28:1.00]
2037 ; SANDY-NEXT:    retq # sched: [1:1.00]
2039 ; HASWELL-LABEL: test_divsd:
2040 ; HASWELL:       # BB#0:
2041 ; HASWELL-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [20:1.00]
2042 ; HASWELL-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [20:1.00]
2043 ; HASWELL-NEXT:    retq # sched: [2:1.00]
2045 ; BROADWELL-LABEL: test_divsd:
2046 ; BROADWELL:       # BB#0:
2047 ; BROADWELL-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [14:1.00]
2048 ; BROADWELL-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [19:1.00]
2049 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2051 ; SKYLAKE-LABEL: test_divsd:
2052 ; SKYLAKE:       # BB#0:
2053 ; SKYLAKE-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [14:1.00]
2054 ; SKYLAKE-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [19:1.00]
2055 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2057 ; SKX-LABEL: test_divsd:
2058 ; SKX:       # BB#0:
2059 ; SKX-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [14:1.00]
2060 ; SKX-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [19:1.00]
2061 ; SKX-NEXT:    retq # sched: [7:1.00]
2063 ; BTVER2-LABEL: test_divsd:
2064 ; BTVER2:       # BB#0:
2065 ; BTVER2-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [19:19.00]
2066 ; BTVER2-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [24:19.00]
2067 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2069 ; ZNVER1-LABEL: test_divsd:
2070 ; ZNVER1:       # BB#0:
2071 ; ZNVER1-NEXT:    vdivsd %xmm1, %xmm0, %xmm0 # sched: [15:1.00]
2072 ; ZNVER1-NEXT:    vdivsd (%rdi), %xmm0, %xmm0 # sched: [22:1.00]
2073 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2074   %1 = fdiv double %a0, %a1
2075   %2 = load double, double *%a2, align 8
2076   %3 = fdiv double %1, %2
2077   ret double %3
2080 define void @test_lfence() {
2081 ; GENERIC-LABEL: test_lfence:
2082 ; GENERIC:       # BB#0:
2083 ; GENERIC-NEXT:    lfence # sched: [1:1.00]
2084 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2086 ; ATOM-LABEL: test_lfence:
2087 ; ATOM:       # BB#0:
2088 ; ATOM-NEXT:    lfence # sched: [1:0.50]
2089 ; ATOM-NEXT:    nop # sched: [1:0.50]
2090 ; ATOM-NEXT:    nop # sched: [1:0.50]
2091 ; ATOM-NEXT:    nop # sched: [1:0.50]
2092 ; ATOM-NEXT:    nop # sched: [1:0.50]
2093 ; ATOM-NEXT:    nop # sched: [1:0.50]
2094 ; ATOM-NEXT:    nop # sched: [1:0.50]
2095 ; ATOM-NEXT:    retq # sched: [79:39.50]
2097 ; SLM-LABEL: test_lfence:
2098 ; SLM:       # BB#0:
2099 ; SLM-NEXT:    lfence # sched: [1:1.00]
2100 ; SLM-NEXT:    retq # sched: [4:1.00]
2102 ; SANDY-LABEL: test_lfence:
2103 ; SANDY:       # BB#0:
2104 ; SANDY-NEXT:    lfence # sched: [1:1.00]
2105 ; SANDY-NEXT:    retq # sched: [1:1.00]
2107 ; HASWELL-LABEL: test_lfence:
2108 ; HASWELL:       # BB#0:
2109 ; HASWELL-NEXT:    lfence # sched: [2:0.50]
2110 ; HASWELL-NEXT:    retq # sched: [2:1.00]
2112 ; BROADWELL-LABEL: test_lfence:
2113 ; BROADWELL:       # BB#0:
2114 ; BROADWELL-NEXT:    lfence # sched: [2:0.50]
2115 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2117 ; SKYLAKE-LABEL: test_lfence:
2118 ; SKYLAKE:       # BB#0:
2119 ; SKYLAKE-NEXT:    lfence # sched: [2:0.50]
2120 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2122 ; SKX-LABEL: test_lfence:
2123 ; SKX:       # BB#0:
2124 ; SKX-NEXT:    lfence # sched: [2:0.50]
2125 ; SKX-NEXT:    retq # sched: [7:1.00]
2127 ; BTVER2-LABEL: test_lfence:
2128 ; BTVER2:       # BB#0:
2129 ; BTVER2-NEXT:    lfence # sched: [1:1.00]
2130 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2132 ; ZNVER1-LABEL: test_lfence:
2133 ; ZNVER1:       # BB#0:
2134 ; ZNVER1-NEXT:    lfence # sched: [1:0.50]
2135 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2136   call void @llvm.x86.sse2.lfence()
2137   ret void
2139 declare void @llvm.x86.sse2.lfence() nounwind readnone
2141 define void @test_mfence() {
2142 ; GENERIC-LABEL: test_mfence:
2143 ; GENERIC:       # BB#0:
2144 ; GENERIC-NEXT:    mfence # sched: [1:1.00]
2145 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2147 ; ATOM-LABEL: test_mfence:
2148 ; ATOM:       # BB#0:
2149 ; ATOM-NEXT:    mfence # sched: [1:1.00]
2150 ; ATOM-NEXT:    nop # sched: [1:0.50]
2151 ; ATOM-NEXT:    nop # sched: [1:0.50]
2152 ; ATOM-NEXT:    nop # sched: [1:0.50]
2153 ; ATOM-NEXT:    nop # sched: [1:0.50]
2154 ; ATOM-NEXT:    nop # sched: [1:0.50]
2155 ; ATOM-NEXT:    nop # sched: [1:0.50]
2156 ; ATOM-NEXT:    retq # sched: [79:39.50]
2158 ; SLM-LABEL: test_mfence:
2159 ; SLM:       # BB#0:
2160 ; SLM-NEXT:    mfence # sched: [1:1.00]
2161 ; SLM-NEXT:    retq # sched: [4:1.00]
2163 ; SANDY-LABEL: test_mfence:
2164 ; SANDY:       # BB#0:
2165 ; SANDY-NEXT:    mfence # sched: [1:1.00]
2166 ; SANDY-NEXT:    retq # sched: [1:1.00]
2168 ; HASWELL-LABEL: test_mfence:
2169 ; HASWELL:       # BB#0:
2170 ; HASWELL-NEXT:    mfence # sched: [2:0.50]
2171 ; HASWELL-NEXT:    retq # sched: [2:1.00]
2173 ; BROADWELL-LABEL: test_mfence:
2174 ; BROADWELL:       # BB#0:
2175 ; BROADWELL-NEXT:    mfence # sched: [2:0.50]
2176 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2178 ; SKYLAKE-LABEL: test_mfence:
2179 ; SKYLAKE:       # BB#0:
2180 ; SKYLAKE-NEXT:    mfence # sched: [3:0.50]
2181 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2183 ; SKX-LABEL: test_mfence:
2184 ; SKX:       # BB#0:
2185 ; SKX-NEXT:    mfence # sched: [3:0.50]
2186 ; SKX-NEXT:    retq # sched: [7:1.00]
2188 ; BTVER2-LABEL: test_mfence:
2189 ; BTVER2:       # BB#0:
2190 ; BTVER2-NEXT:    mfence # sched: [1:1.00]
2191 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2193 ; ZNVER1-LABEL: test_mfence:
2194 ; ZNVER1:       # BB#0:
2195 ; ZNVER1-NEXT:    mfence # sched: [1:0.50]
2196 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2197   call void @llvm.x86.sse2.mfence()
2198   ret void
2200 declare void @llvm.x86.sse2.mfence() nounwind readnone
2202 define void @test_maskmovdqu(<16 x i8> %a0, <16 x i8> %a1, i8* %a2) {
2203 ; GENERIC-LABEL: test_maskmovdqu:
2204 ; GENERIC:       # BB#0:
2205 ; GENERIC-NEXT:    maskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
2206 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2208 ; ATOM-LABEL: test_maskmovdqu:
2209 ; ATOM:       # BB#0:
2210 ; ATOM-NEXT:    maskmovdqu %xmm1, %xmm0 # sched: [2:1.00]
2211 ; ATOM-NEXT:    nop # sched: [1:0.50]
2212 ; ATOM-NEXT:    nop # sched: [1:0.50]
2213 ; ATOM-NEXT:    nop # sched: [1:0.50]
2214 ; ATOM-NEXT:    nop # sched: [1:0.50]
2215 ; ATOM-NEXT:    retq # sched: [79:39.50]
2217 ; SLM-LABEL: test_maskmovdqu:
2218 ; SLM:       # BB#0:
2219 ; SLM-NEXT:    maskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
2220 ; SLM-NEXT:    retq # sched: [4:1.00]
2222 ; SANDY-LABEL: test_maskmovdqu:
2223 ; SANDY:       # BB#0:
2224 ; SANDY-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
2225 ; SANDY-NEXT:    retq # sched: [1:1.00]
2227 ; HASWELL-LABEL: test_maskmovdqu:
2228 ; HASWELL:       # BB#0:
2229 ; HASWELL-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
2230 ; HASWELL-NEXT:    retq # sched: [2:1.00]
2232 ; BROADWELL-LABEL: test_maskmovdqu:
2233 ; BROADWELL:       # BB#0:
2234 ; BROADWELL-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
2235 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2237 ; SKYLAKE-LABEL: test_maskmovdqu:
2238 ; SKYLAKE:       # BB#0:
2239 ; SKYLAKE-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [2:1.00]
2240 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2242 ; SKX-LABEL: test_maskmovdqu:
2243 ; SKX:       # BB#0:
2244 ; SKX-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [2:1.00]
2245 ; SKX-NEXT:    retq # sched: [7:1.00]
2247 ; BTVER2-LABEL: test_maskmovdqu:
2248 ; BTVER2:       # BB#0:
2249 ; BTVER2-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [1:1.00]
2250 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2252 ; ZNVER1-LABEL: test_maskmovdqu:
2253 ; ZNVER1:       # BB#0:
2254 ; ZNVER1-NEXT:    vmaskmovdqu %xmm1, %xmm0 # sched: [100:?]
2255 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2256   call void @llvm.x86.sse2.maskmov.dqu(<16 x i8> %a0, <16 x i8> %a1, i8* %a2)
2257   ret void
2259 declare void @llvm.x86.sse2.maskmov.dqu(<16 x i8>, <16 x i8>, i8*) nounwind
2261 define <2 x double> @test_maxpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
2262 ; GENERIC-LABEL: test_maxpd:
2263 ; GENERIC:       # BB#0:
2264 ; GENERIC-NEXT:    maxpd %xmm1, %xmm0 # sched: [3:1.00]
2265 ; GENERIC-NEXT:    maxpd (%rdi), %xmm0 # sched: [9:1.00]
2266 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2268 ; ATOM-LABEL: test_maxpd:
2269 ; ATOM:       # BB#0:
2270 ; ATOM-NEXT:    maxpd %xmm1, %xmm0 # sched: [6:3.00]
2271 ; ATOM-NEXT:    maxpd (%rdi), %xmm0 # sched: [7:3.50]
2272 ; ATOM-NEXT:    retq # sched: [79:39.50]
2274 ; SLM-LABEL: test_maxpd:
2275 ; SLM:       # BB#0:
2276 ; SLM-NEXT:    maxpd %xmm1, %xmm0 # sched: [3:1.00]
2277 ; SLM-NEXT:    maxpd (%rdi), %xmm0 # sched: [6:1.00]
2278 ; SLM-NEXT:    retq # sched: [4:1.00]
2280 ; SANDY-LABEL: test_maxpd:
2281 ; SANDY:       # BB#0:
2282 ; SANDY-NEXT:    vmaxpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2283 ; SANDY-NEXT:    vmaxpd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
2284 ; SANDY-NEXT:    retq # sched: [1:1.00]
2286 ; HASWELL-LABEL: test_maxpd:
2287 ; HASWELL:       # BB#0:
2288 ; HASWELL-NEXT:    vmaxpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2289 ; HASWELL-NEXT:    vmaxpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00]
2290 ; HASWELL-NEXT:    retq # sched: [2:1.00]
2292 ; BROADWELL-LABEL: test_maxpd:
2293 ; BROADWELL:       # BB#0:
2294 ; BROADWELL-NEXT:    vmaxpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2295 ; BROADWELL-NEXT:    vmaxpd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
2296 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2298 ; SKYLAKE-LABEL: test_maxpd:
2299 ; SKYLAKE:       # BB#0:
2300 ; SKYLAKE-NEXT:    vmaxpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
2301 ; SKYLAKE-NEXT:    vmaxpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
2302 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2304 ; SKX-LABEL: test_maxpd:
2305 ; SKX:       # BB#0:
2306 ; SKX-NEXT:    vmaxpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
2307 ; SKX-NEXT:    vmaxpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
2308 ; SKX-NEXT:    retq # sched: [7:1.00]
2310 ; BTVER2-LABEL: test_maxpd:
2311 ; BTVER2:       # BB#0:
2312 ; BTVER2-NEXT:    vmaxpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2313 ; BTVER2-NEXT:    vmaxpd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
2314 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2316 ; ZNVER1-LABEL: test_maxpd:
2317 ; ZNVER1:       # BB#0:
2318 ; ZNVER1-NEXT:    vmaxpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2319 ; ZNVER1-NEXT:    vmaxpd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
2320 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2321   %1 = call <2 x double> @llvm.x86.sse2.max.pd(<2 x double> %a0, <2 x double> %a1)
2322   %2 = load <2 x double>, <2 x double> *%a2, align 16
2323   %3 = call <2 x double> @llvm.x86.sse2.max.pd(<2 x double> %1, <2 x double> %2)
2324   ret <2 x double> %3
2326 declare <2 x double> @llvm.x86.sse2.max.pd(<2 x double>, <2 x double>) nounwind readnone
2328 define <2 x double> @test_maxsd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
2329 ; GENERIC-LABEL: test_maxsd:
2330 ; GENERIC:       # BB#0:
2331 ; GENERIC-NEXT:    maxsd %xmm1, %xmm0 # sched: [3:1.00]
2332 ; GENERIC-NEXT:    maxsd (%rdi), %xmm0 # sched: [9:1.00]
2333 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2335 ; ATOM-LABEL: test_maxsd:
2336 ; ATOM:       # BB#0:
2337 ; ATOM-NEXT:    maxsd %xmm1, %xmm0 # sched: [5:5.00]
2338 ; ATOM-NEXT:    maxsd (%rdi), %xmm0 # sched: [5:5.00]
2339 ; ATOM-NEXT:    retq # sched: [79:39.50]
2341 ; SLM-LABEL: test_maxsd:
2342 ; SLM:       # BB#0:
2343 ; SLM-NEXT:    maxsd %xmm1, %xmm0 # sched: [3:1.00]
2344 ; SLM-NEXT:    maxsd (%rdi), %xmm0 # sched: [6:1.00]
2345 ; SLM-NEXT:    retq # sched: [4:1.00]
2347 ; SANDY-LABEL: test_maxsd:
2348 ; SANDY:       # BB#0:
2349 ; SANDY-NEXT:    vmaxsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2350 ; SANDY-NEXT:    vmaxsd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
2351 ; SANDY-NEXT:    retq # sched: [1:1.00]
2353 ; HASWELL-LABEL: test_maxsd:
2354 ; HASWELL:       # BB#0:
2355 ; HASWELL-NEXT:    vmaxsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2356 ; HASWELL-NEXT:    vmaxsd (%rdi), %xmm0, %xmm0 # sched: [3:1.00]
2357 ; HASWELL-NEXT:    retq # sched: [2:1.00]
2359 ; BROADWELL-LABEL: test_maxsd:
2360 ; BROADWELL:       # BB#0:
2361 ; BROADWELL-NEXT:    vmaxsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2362 ; BROADWELL-NEXT:    vmaxsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
2363 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2365 ; SKYLAKE-LABEL: test_maxsd:
2366 ; SKYLAKE:       # BB#0:
2367 ; SKYLAKE-NEXT:    vmaxsd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
2368 ; SKYLAKE-NEXT:    vmaxsd (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
2369 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2371 ; SKX-LABEL: test_maxsd:
2372 ; SKX:       # BB#0:
2373 ; SKX-NEXT:    vmaxsd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
2374 ; SKX-NEXT:    vmaxsd (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
2375 ; SKX-NEXT:    retq # sched: [7:1.00]
2377 ; BTVER2-LABEL: test_maxsd:
2378 ; BTVER2:       # BB#0:
2379 ; BTVER2-NEXT:    vmaxsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2380 ; BTVER2-NEXT:    vmaxsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
2381 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2383 ; ZNVER1-LABEL: test_maxsd:
2384 ; ZNVER1:       # BB#0:
2385 ; ZNVER1-NEXT:    vmaxsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2386 ; ZNVER1-NEXT:    vmaxsd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
2387 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2388   %1 = call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %a0, <2 x double> %a1)
2389   %2 = load <2 x double>, <2 x double> *%a2, align 16
2390   %3 = call <2 x double> @llvm.x86.sse2.max.sd(<2 x double> %1, <2 x double> %2)
2391   ret <2 x double> %3
2393 declare <2 x double> @llvm.x86.sse2.max.sd(<2 x double>, <2 x double>) nounwind readnone
2395 define <2 x double> @test_minpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
2396 ; GENERIC-LABEL: test_minpd:
2397 ; GENERIC:       # BB#0:
2398 ; GENERIC-NEXT:    minpd %xmm1, %xmm0 # sched: [3:1.00]
2399 ; GENERIC-NEXT:    minpd (%rdi), %xmm0 # sched: [9:1.00]
2400 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2402 ; ATOM-LABEL: test_minpd:
2403 ; ATOM:       # BB#0:
2404 ; ATOM-NEXT:    minpd %xmm1, %xmm0 # sched: [6:3.00]
2405 ; ATOM-NEXT:    minpd (%rdi), %xmm0 # sched: [7:3.50]
2406 ; ATOM-NEXT:    retq # sched: [79:39.50]
2408 ; SLM-LABEL: test_minpd:
2409 ; SLM:       # BB#0:
2410 ; SLM-NEXT:    minpd %xmm1, %xmm0 # sched: [3:1.00]
2411 ; SLM-NEXT:    minpd (%rdi), %xmm0 # sched: [6:1.00]
2412 ; SLM-NEXT:    retq # sched: [4:1.00]
2414 ; SANDY-LABEL: test_minpd:
2415 ; SANDY:       # BB#0:
2416 ; SANDY-NEXT:    vminpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2417 ; SANDY-NEXT:    vminpd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
2418 ; SANDY-NEXT:    retq # sched: [1:1.00]
2420 ; HASWELL-LABEL: test_minpd:
2421 ; HASWELL:       # BB#0:
2422 ; HASWELL-NEXT:    vminpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2423 ; HASWELL-NEXT:    vminpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00]
2424 ; HASWELL-NEXT:    retq # sched: [2:1.00]
2426 ; BROADWELL-LABEL: test_minpd:
2427 ; BROADWELL:       # BB#0:
2428 ; BROADWELL-NEXT:    vminpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2429 ; BROADWELL-NEXT:    vminpd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
2430 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2432 ; SKYLAKE-LABEL: test_minpd:
2433 ; SKYLAKE:       # BB#0:
2434 ; SKYLAKE-NEXT:    vminpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
2435 ; SKYLAKE-NEXT:    vminpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
2436 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2438 ; SKX-LABEL: test_minpd:
2439 ; SKX:       # BB#0:
2440 ; SKX-NEXT:    vminpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
2441 ; SKX-NEXT:    vminpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
2442 ; SKX-NEXT:    retq # sched: [7:1.00]
2444 ; BTVER2-LABEL: test_minpd:
2445 ; BTVER2:       # BB#0:
2446 ; BTVER2-NEXT:    vminpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2447 ; BTVER2-NEXT:    vminpd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
2448 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2450 ; ZNVER1-LABEL: test_minpd:
2451 ; ZNVER1:       # BB#0:
2452 ; ZNVER1-NEXT:    vminpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2453 ; ZNVER1-NEXT:    vminpd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
2454 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2455   %1 = call <2 x double> @llvm.x86.sse2.min.pd(<2 x double> %a0, <2 x double> %a1)
2456   %2 = load <2 x double>, <2 x double> *%a2, align 16
2457   %3 = call <2 x double> @llvm.x86.sse2.min.pd(<2 x double> %1, <2 x double> %2)
2458   ret <2 x double> %3
2460 declare <2 x double> @llvm.x86.sse2.min.pd(<2 x double>, <2 x double>) nounwind readnone
2462 define <2 x double> @test_minsd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
2463 ; GENERIC-LABEL: test_minsd:
2464 ; GENERIC:       # BB#0:
2465 ; GENERIC-NEXT:    minsd %xmm1, %xmm0 # sched: [3:1.00]
2466 ; GENERIC-NEXT:    minsd (%rdi), %xmm0 # sched: [9:1.00]
2467 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2469 ; ATOM-LABEL: test_minsd:
2470 ; ATOM:       # BB#0:
2471 ; ATOM-NEXT:    minsd %xmm1, %xmm0 # sched: [5:5.00]
2472 ; ATOM-NEXT:    minsd (%rdi), %xmm0 # sched: [5:5.00]
2473 ; ATOM-NEXT:    retq # sched: [79:39.50]
2475 ; SLM-LABEL: test_minsd:
2476 ; SLM:       # BB#0:
2477 ; SLM-NEXT:    minsd %xmm1, %xmm0 # sched: [3:1.00]
2478 ; SLM-NEXT:    minsd (%rdi), %xmm0 # sched: [6:1.00]
2479 ; SLM-NEXT:    retq # sched: [4:1.00]
2481 ; SANDY-LABEL: test_minsd:
2482 ; SANDY:       # BB#0:
2483 ; SANDY-NEXT:    vminsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2484 ; SANDY-NEXT:    vminsd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
2485 ; SANDY-NEXT:    retq # sched: [1:1.00]
2487 ; HASWELL-LABEL: test_minsd:
2488 ; HASWELL:       # BB#0:
2489 ; HASWELL-NEXT:    vminsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2490 ; HASWELL-NEXT:    vminsd (%rdi), %xmm0, %xmm0 # sched: [3:1.00]
2491 ; HASWELL-NEXT:    retq # sched: [2:1.00]
2493 ; BROADWELL-LABEL: test_minsd:
2494 ; BROADWELL:       # BB#0:
2495 ; BROADWELL-NEXT:    vminsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2496 ; BROADWELL-NEXT:    vminsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
2497 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2499 ; SKYLAKE-LABEL: test_minsd:
2500 ; SKYLAKE:       # BB#0:
2501 ; SKYLAKE-NEXT:    vminsd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
2502 ; SKYLAKE-NEXT:    vminsd (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
2503 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2505 ; SKX-LABEL: test_minsd:
2506 ; SKX:       # BB#0:
2507 ; SKX-NEXT:    vminsd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
2508 ; SKX-NEXT:    vminsd (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
2509 ; SKX-NEXT:    retq # sched: [7:1.00]
2511 ; BTVER2-LABEL: test_minsd:
2512 ; BTVER2:       # BB#0:
2513 ; BTVER2-NEXT:    vminsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2514 ; BTVER2-NEXT:    vminsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
2515 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2517 ; ZNVER1-LABEL: test_minsd:
2518 ; ZNVER1:       # BB#0:
2519 ; ZNVER1-NEXT:    vminsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2520 ; ZNVER1-NEXT:    vminsd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
2521 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2522   %1 = call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %a0, <2 x double> %a1)
2523   %2 = load <2 x double>, <2 x double> *%a2, align 16
2524   %3 = call <2 x double> @llvm.x86.sse2.min.sd(<2 x double> %1, <2 x double> %2)
2525   ret <2 x double> %3
2527 declare <2 x double> @llvm.x86.sse2.min.sd(<2 x double>, <2 x double>) nounwind readnone
2529 define void @test_movapd(<2 x double> *%a0, <2 x double> *%a1) {
2530 ; GENERIC-LABEL: test_movapd:
2531 ; GENERIC:       # BB#0:
2532 ; GENERIC-NEXT:    movapd (%rdi), %xmm0 # sched: [6:0.50]
2533 ; GENERIC-NEXT:    addpd %xmm0, %xmm0 # sched: [3:1.00]
2534 ; GENERIC-NEXT:    movapd %xmm0, (%rsi) # sched: [5:1.00]
2535 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2537 ; ATOM-LABEL: test_movapd:
2538 ; ATOM:       # BB#0:
2539 ; ATOM-NEXT:    movapd (%rdi), %xmm0 # sched: [1:1.00]
2540 ; ATOM-NEXT:    addpd %xmm0, %xmm0 # sched: [6:3.00]
2541 ; ATOM-NEXT:    movapd %xmm0, (%rsi) # sched: [1:1.00]
2542 ; ATOM-NEXT:    retq # sched: [79:39.50]
2544 ; SLM-LABEL: test_movapd:
2545 ; SLM:       # BB#0:
2546 ; SLM-NEXT:    movapd (%rdi), %xmm0 # sched: [3:1.00]
2547 ; SLM-NEXT:    addpd %xmm0, %xmm0 # sched: [3:1.00]
2548 ; SLM-NEXT:    movapd %xmm0, (%rsi) # sched: [1:1.00]
2549 ; SLM-NEXT:    retq # sched: [4:1.00]
2551 ; SANDY-LABEL: test_movapd:
2552 ; SANDY:       # BB#0:
2553 ; SANDY-NEXT:    vmovapd (%rdi), %xmm0 # sched: [6:0.50]
2554 ; SANDY-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
2555 ; SANDY-NEXT:    vmovapd %xmm0, (%rsi) # sched: [5:1.00]
2556 ; SANDY-NEXT:    retq # sched: [1:1.00]
2558 ; HASWELL-LABEL: test_movapd:
2559 ; HASWELL:       # BB#0:
2560 ; HASWELL-NEXT:    vmovapd (%rdi), %xmm0 # sched: [1:0.50]
2561 ; HASWELL-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
2562 ; HASWELL-NEXT:    vmovapd %xmm0, (%rsi) # sched: [1:1.00]
2563 ; HASWELL-NEXT:    retq # sched: [2:1.00]
2565 ; BROADWELL-LABEL: test_movapd:
2566 ; BROADWELL:       # BB#0:
2567 ; BROADWELL-NEXT:    vmovapd (%rdi), %xmm0 # sched: [5:0.50]
2568 ; BROADWELL-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
2569 ; BROADWELL-NEXT:    vmovapd %xmm0, (%rsi) # sched: [1:1.00]
2570 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2572 ; SKYLAKE-LABEL: test_movapd:
2573 ; SKYLAKE:       # BB#0:
2574 ; SKYLAKE-NEXT:    vmovapd (%rdi), %xmm0 # sched: [6:0.50]
2575 ; SKYLAKE-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [4:0.50]
2576 ; SKYLAKE-NEXT:    vmovapd %xmm0, (%rsi) # sched: [1:1.00]
2577 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2579 ; SKX-LABEL: test_movapd:
2580 ; SKX:       # BB#0:
2581 ; SKX-NEXT:    vmovapd (%rdi), %xmm0 # sched: [6:0.50]
2582 ; SKX-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [4:0.33]
2583 ; SKX-NEXT:    vmovapd %xmm0, (%rsi) # sched: [1:1.00]
2584 ; SKX-NEXT:    retq # sched: [7:1.00]
2586 ; BTVER2-LABEL: test_movapd:
2587 ; BTVER2:       # BB#0:
2588 ; BTVER2-NEXT:    vmovapd (%rdi), %xmm0 # sched: [5:1.00]
2589 ; BTVER2-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
2590 ; BTVER2-NEXT:    vmovapd %xmm0, (%rsi) # sched: [1:1.00]
2591 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2593 ; ZNVER1-LABEL: test_movapd:
2594 ; ZNVER1:       # BB#0:
2595 ; ZNVER1-NEXT:    vmovapd (%rdi), %xmm0 # sched: [8:0.50]
2596 ; ZNVER1-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
2597 ; ZNVER1-NEXT:    vmovapd %xmm0, (%rsi) # sched: [1:0.50]
2598 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2599   %1 = load <2 x double>, <2 x double> *%a0, align 16
2600   %2 = fadd <2 x double> %1, %1
2601   store <2 x double> %2, <2 x double> *%a1, align 16
2602   ret void
2605 define void @test_movdqa(<2 x i64> *%a0, <2 x i64> *%a1) {
2606 ; GENERIC-LABEL: test_movdqa:
2607 ; GENERIC:       # BB#0:
2608 ; GENERIC-NEXT:    movdqa (%rdi), %xmm0 # sched: [6:0.50]
2609 ; GENERIC-NEXT:    paddq %xmm0, %xmm0 # sched: [1:0.50]
2610 ; GENERIC-NEXT:    movdqa %xmm0, (%rsi) # sched: [5:1.00]
2611 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2613 ; ATOM-LABEL: test_movdqa:
2614 ; ATOM:       # BB#0:
2615 ; ATOM-NEXT:    movdqa (%rdi), %xmm0 # sched: [1:1.00]
2616 ; ATOM-NEXT:    paddq %xmm0, %xmm0 # sched: [2:1.00]
2617 ; ATOM-NEXT:    movdqa %xmm0, (%rsi) # sched: [1:1.00]
2618 ; ATOM-NEXT:    retq # sched: [79:39.50]
2620 ; SLM-LABEL: test_movdqa:
2621 ; SLM:       # BB#0:
2622 ; SLM-NEXT:    movdqa (%rdi), %xmm0 # sched: [3:1.00]
2623 ; SLM-NEXT:    paddq %xmm0, %xmm0 # sched: [1:0.50]
2624 ; SLM-NEXT:    movdqa %xmm0, (%rsi) # sched: [1:1.00]
2625 ; SLM-NEXT:    retq # sched: [4:1.00]
2627 ; SANDY-LABEL: test_movdqa:
2628 ; SANDY:       # BB#0:
2629 ; SANDY-NEXT:    vmovdqa (%rdi), %xmm0 # sched: [6:0.50]
2630 ; SANDY-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
2631 ; SANDY-NEXT:    vmovdqa %xmm0, (%rsi) # sched: [5:1.00]
2632 ; SANDY-NEXT:    retq # sched: [1:1.00]
2634 ; HASWELL-LABEL: test_movdqa:
2635 ; HASWELL:       # BB#0:
2636 ; HASWELL-NEXT:    vmovdqa (%rdi), %xmm0 # sched: [1:0.50]
2637 ; HASWELL-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
2638 ; HASWELL-NEXT:    vmovdqa %xmm0, (%rsi) # sched: [1:1.00]
2639 ; HASWELL-NEXT:    retq # sched: [2:1.00]
2641 ; BROADWELL-LABEL: test_movdqa:
2642 ; BROADWELL:       # BB#0:
2643 ; BROADWELL-NEXT:    vmovdqa (%rdi), %xmm0 # sched: [5:0.50]
2644 ; BROADWELL-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
2645 ; BROADWELL-NEXT:    vmovdqa %xmm0, (%rsi) # sched: [1:1.00]
2646 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2648 ; SKYLAKE-LABEL: test_movdqa:
2649 ; SKYLAKE:       # BB#0:
2650 ; SKYLAKE-NEXT:    vmovdqa (%rdi), %xmm0 # sched: [6:0.50]
2651 ; SKYLAKE-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.33]
2652 ; SKYLAKE-NEXT:    vmovdqa %xmm0, (%rsi) # sched: [1:1.00]
2653 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2655 ; SKX-LABEL: test_movdqa:
2656 ; SKX:       # BB#0:
2657 ; SKX-NEXT:    vmovdqa (%rdi), %xmm0 # sched: [6:0.50]
2658 ; SKX-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.33]
2659 ; SKX-NEXT:    vmovdqa %xmm0, (%rsi) # sched: [1:1.00]
2660 ; SKX-NEXT:    retq # sched: [7:1.00]
2662 ; BTVER2-LABEL: test_movdqa:
2663 ; BTVER2:       # BB#0:
2664 ; BTVER2-NEXT:    vmovdqa (%rdi), %xmm0 # sched: [5:1.00]
2665 ; BTVER2-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
2666 ; BTVER2-NEXT:    vmovdqa %xmm0, (%rsi) # sched: [1:1.00]
2667 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2669 ; ZNVER1-LABEL: test_movdqa:
2670 ; ZNVER1:       # BB#0:
2671 ; ZNVER1-NEXT:    vmovdqa (%rdi), %xmm0 # sched: [8:0.50]
2672 ; ZNVER1-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.25]
2673 ; ZNVER1-NEXT:    vmovdqa %xmm0, (%rsi) # sched: [1:0.50]
2674 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2675   %1 = load <2 x i64>, <2 x i64> *%a0, align 16
2676   %2 = add <2 x i64> %1, %1
2677   store <2 x i64> %2, <2 x i64> *%a1, align 16
2678   ret void
2681 define void @test_movdqu(<2 x i64> *%a0, <2 x i64> *%a1) {
2682 ; GENERIC-LABEL: test_movdqu:
2683 ; GENERIC:       # BB#0:
2684 ; GENERIC-NEXT:    movdqu (%rdi), %xmm0 # sched: [6:0.50]
2685 ; GENERIC-NEXT:    paddq %xmm0, %xmm0 # sched: [1:0.50]
2686 ; GENERIC-NEXT:    movdqu %xmm0, (%rsi) # sched: [5:1.00]
2687 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2689 ; ATOM-LABEL: test_movdqu:
2690 ; ATOM:       # BB#0:
2691 ; ATOM-NEXT:    movdqu (%rdi), %xmm0 # sched: [3:1.50]
2692 ; ATOM-NEXT:    paddq %xmm0, %xmm0 # sched: [2:1.00]
2693 ; ATOM-NEXT:    movdqu %xmm0, (%rsi) # sched: [2:1.00]
2694 ; ATOM-NEXT:    retq # sched: [79:39.50]
2696 ; SLM-LABEL: test_movdqu:
2697 ; SLM:       # BB#0:
2698 ; SLM-NEXT:    movdqu (%rdi), %xmm0 # sched: [3:1.00]
2699 ; SLM-NEXT:    paddq %xmm0, %xmm0 # sched: [1:0.50]
2700 ; SLM-NEXT:    movdqu %xmm0, (%rsi) # sched: [1:1.00]
2701 ; SLM-NEXT:    retq # sched: [4:1.00]
2703 ; SANDY-LABEL: test_movdqu:
2704 ; SANDY:       # BB#0:
2705 ; SANDY-NEXT:    vmovdqu (%rdi), %xmm0 # sched: [6:0.50]
2706 ; SANDY-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
2707 ; SANDY-NEXT:    vmovdqu %xmm0, (%rsi) # sched: [5:1.00]
2708 ; SANDY-NEXT:    retq # sched: [1:1.00]
2710 ; HASWELL-LABEL: test_movdqu:
2711 ; HASWELL:       # BB#0:
2712 ; HASWELL-NEXT:    vmovdqu (%rdi), %xmm0 # sched: [1:0.50]
2713 ; HASWELL-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
2714 ; HASWELL-NEXT:    vmovdqu %xmm0, (%rsi) # sched: [1:1.00]
2715 ; HASWELL-NEXT:    retq # sched: [2:1.00]
2717 ; BROADWELL-LABEL: test_movdqu:
2718 ; BROADWELL:       # BB#0:
2719 ; BROADWELL-NEXT:    vmovdqu (%rdi), %xmm0 # sched: [5:0.50]
2720 ; BROADWELL-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
2721 ; BROADWELL-NEXT:    vmovdqu %xmm0, (%rsi) # sched: [1:1.00]
2722 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2724 ; SKYLAKE-LABEL: test_movdqu:
2725 ; SKYLAKE:       # BB#0:
2726 ; SKYLAKE-NEXT:    vmovdqu (%rdi), %xmm0 # sched: [6:0.50]
2727 ; SKYLAKE-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.33]
2728 ; SKYLAKE-NEXT:    vmovdqu %xmm0, (%rsi) # sched: [1:1.00]
2729 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2731 ; SKX-LABEL: test_movdqu:
2732 ; SKX:       # BB#0:
2733 ; SKX-NEXT:    vmovdqu (%rdi), %xmm0 # sched: [6:0.50]
2734 ; SKX-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.33]
2735 ; SKX-NEXT:    vmovdqu %xmm0, (%rsi) # sched: [1:1.00]
2736 ; SKX-NEXT:    retq # sched: [7:1.00]
2738 ; BTVER2-LABEL: test_movdqu:
2739 ; BTVER2:       # BB#0:
2740 ; BTVER2-NEXT:    vmovdqu (%rdi), %xmm0 # sched: [5:1.00]
2741 ; BTVER2-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
2742 ; BTVER2-NEXT:    vmovdqu %xmm0, (%rsi) # sched: [1:1.00]
2743 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2745 ; ZNVER1-LABEL: test_movdqu:
2746 ; ZNVER1:       # BB#0:
2747 ; ZNVER1-NEXT:    vmovdqu (%rdi), %xmm0 # sched: [8:0.50]
2748 ; ZNVER1-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.25]
2749 ; ZNVER1-NEXT:    vmovdqu %xmm0, (%rsi) # sched: [1:0.50]
2750 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2751   %1 = load <2 x i64>, <2 x i64> *%a0, align 1
2752   %2 = add <2 x i64> %1, %1
2753   store <2 x i64> %2, <2 x i64> *%a1, align 1
2754   ret void
2757 define i32 @test_movd(<4 x i32> %a0, i32 %a1, i32 *%a2) {
2758 ; GENERIC-LABEL: test_movd:
2759 ; GENERIC:       # BB#0:
2760 ; GENERIC-NEXT:    movd %edi, %xmm1 # sched: [1:1.00]
2761 ; GENERIC-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero sched: [6:0.50]
2762 ; GENERIC-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
2763 ; GENERIC-NEXT:    paddd %xmm0, %xmm2 # sched: [1:0.50]
2764 ; GENERIC-NEXT:    movd %xmm2, %eax # sched: [2:1.00]
2765 ; GENERIC-NEXT:    movd %xmm1, (%rsi) # sched: [5:1.00]
2766 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2768 ; ATOM-LABEL: test_movd:
2769 ; ATOM:       # BB#0:
2770 ; ATOM-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [1:1.00]
2771 ; ATOM-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
2772 ; ATOM-NEXT:    movd %xmm1, %eax # sched: [3:3.00]
2773 ; ATOM-NEXT:    movd %edi, %xmm1 # sched: [1:1.00]
2774 ; ATOM-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
2775 ; ATOM-NEXT:    movd %xmm1, (%rsi) # sched: [1:1.00]
2776 ; ATOM-NEXT:    retq # sched: [79:39.50]
2778 ; SLM-LABEL: test_movd:
2779 ; SLM:       # BB#0:
2780 ; SLM-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero sched: [3:1.00]
2781 ; SLM-NEXT:    movd %edi, %xmm1 # sched: [1:0.50]
2782 ; SLM-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
2783 ; SLM-NEXT:    movd %xmm1, (%rsi) # sched: [1:1.00]
2784 ; SLM-NEXT:    paddd %xmm0, %xmm2 # sched: [1:0.50]
2785 ; SLM-NEXT:    movd %xmm2, %eax # sched: [1:0.50]
2786 ; SLM-NEXT:    retq # sched: [4:1.00]
2788 ; SANDY-LABEL: test_movd:
2789 ; SANDY:       # BB#0:
2790 ; SANDY-NEXT:    vmovd %edi, %xmm1 # sched: [1:1.00]
2791 ; SANDY-NEXT:    vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero sched: [6:0.50]
2792 ; SANDY-NEXT:    vpaddd %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
2793 ; SANDY-NEXT:    vpaddd %xmm2, %xmm0, %xmm0 # sched: [1:0.50]
2794 ; SANDY-NEXT:    vmovd %xmm0, %eax # sched: [2:1.00]
2795 ; SANDY-NEXT:    vmovd %xmm1, (%rsi) # sched: [5:1.00]
2796 ; SANDY-NEXT:    retq # sched: [1:1.00]
2798 ; HASWELL-LABEL: test_movd:
2799 ; HASWELL:       # BB#0:
2800 ; HASWELL-NEXT:    vmovd %edi, %xmm1 # sched: [1:1.00]
2801 ; HASWELL-NEXT:    vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero sched: [1:0.50]
2802 ; HASWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
2803 ; HASWELL-NEXT:    vpaddd %xmm2, %xmm0, %xmm0 # sched: [1:0.50]
2804 ; HASWELL-NEXT:    vmovd %xmm0, %eax # sched: [1:1.00]
2805 ; HASWELL-NEXT:    vmovd %xmm1, (%rsi) # sched: [1:1.00]
2806 ; HASWELL-NEXT:    retq # sched: [2:1.00]
2808 ; BROADWELL-LABEL: test_movd:
2809 ; BROADWELL:       # BB#0:
2810 ; BROADWELL-NEXT:    vmovd %edi, %xmm1 # sched: [1:1.00]
2811 ; BROADWELL-NEXT:    vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero sched: [5:0.50]
2812 ; BROADWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
2813 ; BROADWELL-NEXT:    vpaddd %xmm2, %xmm0, %xmm0 # sched: [1:0.50]
2814 ; BROADWELL-NEXT:    vmovd %xmm0, %eax # sched: [1:1.00]
2815 ; BROADWELL-NEXT:    vmovd %xmm1, (%rsi) # sched: [1:1.00]
2816 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2818 ; SKYLAKE-LABEL: test_movd:
2819 ; SKYLAKE:       # BB#0:
2820 ; SKYLAKE-NEXT:    vmovd %edi, %xmm1 # sched: [1:1.00]
2821 ; SKYLAKE-NEXT:    vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero sched: [5:0.50]
2822 ; SKYLAKE-NEXT:    vpaddd %xmm1, %xmm0, %xmm1 # sched: [1:0.33]
2823 ; SKYLAKE-NEXT:    vpaddd %xmm2, %xmm0, %xmm0 # sched: [1:0.33]
2824 ; SKYLAKE-NEXT:    vmovd %xmm0, %eax # sched: [2:1.00]
2825 ; SKYLAKE-NEXT:    vmovd %xmm1, (%rsi) # sched: [1:1.00]
2826 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2828 ; SKX-LABEL: test_movd:
2829 ; SKX:       # BB#0:
2830 ; SKX-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
2831 ; SKX-NEXT:    vmovd %edi, %xmm2 # sched: [1:1.00]
2832 ; SKX-NEXT:    vpaddd %xmm2, %xmm0, %xmm2 # sched: [1:0.33]
2833 ; SKX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
2834 ; SKX-NEXT:    vmovd %xmm0, %eax # sched: [2:1.00]
2835 ; SKX-NEXT:    vmovd %xmm2, (%rsi) # sched: [1:1.00]
2836 ; SKX-NEXT:    retq # sched: [7:1.00]
2838 ; BTVER2-LABEL: test_movd:
2839 ; BTVER2:       # BB#0:
2840 ; BTVER2-NEXT:    vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero sched: [5:1.00]
2841 ; BTVER2-NEXT:    vmovd %edi, %xmm1 # sched: [1:0.17]
2842 ; BTVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
2843 ; BTVER2-NEXT:    vmovd %xmm1, (%rsi) # sched: [1:1.00]
2844 ; BTVER2-NEXT:    vpaddd %xmm2, %xmm0, %xmm0 # sched: [1:0.50]
2845 ; BTVER2-NEXT:    vmovd %xmm0, %eax # sched: [1:0.17]
2846 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2848 ; ZNVER1-LABEL: test_movd:
2849 ; ZNVER1:       # BB#0:
2850 ; ZNVER1-NEXT:    vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero sched: [8:0.50]
2851 ; ZNVER1-NEXT:    vmovd %edi, %xmm1 # sched: [3:1.00]
2852 ; ZNVER1-NEXT:    vpaddd %xmm1, %xmm0, %xmm1 # sched: [1:0.25]
2853 ; ZNVER1-NEXT:    vmovd %xmm1, (%rsi) # sched: [1:0.50]
2854 ; ZNVER1-NEXT:    vpaddd %xmm2, %xmm0, %xmm0 # sched: [1:0.25]
2855 ; ZNVER1-NEXT:    vmovd %xmm0, %eax # sched: [2:1.00]
2856 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2857   %1 = insertelement <4 x i32> undef, i32 %a1, i32 0
2858   %2 = load i32, i32 *%a2
2859   %3 = insertelement <4 x i32> undef, i32 %2, i32 0
2860   %4 = add <4 x i32> %a0, %1
2861   %5 = add <4 x i32> %a0, %3
2862   %6 = extractelement <4 x i32> %4, i32 0
2863   %7 = extractelement <4 x i32> %5, i32 0
2864   store i32 %6, i32* %a2
2865   ret i32 %7
2868 define i64 @test_movd_64(<2 x i64> %a0, i64 %a1, i64 *%a2) {
2869 ; GENERIC-LABEL: test_movd_64:
2870 ; GENERIC:       # BB#0:
2871 ; GENERIC-NEXT:    movq %rdi, %xmm1 # sched: [1:1.00]
2872 ; GENERIC-NEXT:    movq {{.*#+}} xmm2 = mem[0],zero sched: [4:0.50]
2873 ; GENERIC-NEXT:    paddq %xmm0, %xmm1 # sched: [1:0.50]
2874 ; GENERIC-NEXT:    paddq %xmm0, %xmm2 # sched: [1:0.50]
2875 ; GENERIC-NEXT:    movq %xmm2, %rax # sched: [2:1.00]
2876 ; GENERIC-NEXT:    movq %xmm1, (%rsi) # sched: [5:1.00]
2877 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2879 ; ATOM-LABEL: test_movd_64:
2880 ; ATOM:       # BB#0:
2881 ; ATOM-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero sched: [1:1.00]
2882 ; ATOM-NEXT:    movq %rdi, %xmm2 # sched: [1:1.00]
2883 ; ATOM-NEXT:    paddq %xmm0, %xmm2 # sched: [2:1.00]
2884 ; ATOM-NEXT:    paddq %xmm0, %xmm1 # sched: [2:1.00]
2885 ; ATOM-NEXT:    movq %xmm2, (%rsi) # sched: [1:1.00]
2886 ; ATOM-NEXT:    movq %xmm1, %rax # sched: [3:3.00]
2887 ; ATOM-NEXT:    retq # sched: [79:39.50]
2889 ; SLM-LABEL: test_movd_64:
2890 ; SLM:       # BB#0:
2891 ; SLM-NEXT:    movq {{.*#+}} xmm2 = mem[0],zero sched: [3:1.00]
2892 ; SLM-NEXT:    movq %rdi, %xmm1 # sched: [1:0.50]
2893 ; SLM-NEXT:    paddq %xmm0, %xmm1 # sched: [1:0.50]
2894 ; SLM-NEXT:    movq %xmm1, (%rsi) # sched: [1:1.00]
2895 ; SLM-NEXT:    paddq %xmm0, %xmm2 # sched: [1:0.50]
2896 ; SLM-NEXT:    movq %xmm2, %rax # sched: [1:0.50]
2897 ; SLM-NEXT:    retq # sched: [4:1.00]
2899 ; SANDY-LABEL: test_movd_64:
2900 ; SANDY:       # BB#0:
2901 ; SANDY-NEXT:    vmovq %rdi, %xmm1 # sched: [1:1.00]
2902 ; SANDY-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero sched: [6:0.50]
2903 ; SANDY-NEXT:    vpaddq %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
2904 ; SANDY-NEXT:    vpaddq %xmm2, %xmm0, %xmm0 # sched: [1:0.50]
2905 ; SANDY-NEXT:    vmovq %xmm0, %rax # sched: [2:1.00]
2906 ; SANDY-NEXT:    vmovq %xmm1, (%rsi) # sched: [5:1.00]
2907 ; SANDY-NEXT:    retq # sched: [1:1.00]
2909 ; HASWELL-LABEL: test_movd_64:
2910 ; HASWELL:       # BB#0:
2911 ; HASWELL-NEXT:    vmovq %rdi, %xmm1 # sched: [1:1.00]
2912 ; HASWELL-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero sched: [1:0.50]
2913 ; HASWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
2914 ; HASWELL-NEXT:    vpaddq %xmm2, %xmm0, %xmm0 # sched: [1:0.50]
2915 ; HASWELL-NEXT:    vmovq %xmm0, %rax # sched: [1:1.00]
2916 ; HASWELL-NEXT:    vmovq %xmm1, (%rsi) # sched: [1:1.00]
2917 ; HASWELL-NEXT:    retq # sched: [2:1.00]
2919 ; BROADWELL-LABEL: test_movd_64:
2920 ; BROADWELL:       # BB#0:
2921 ; BROADWELL-NEXT:    vmovq %rdi, %xmm1 # sched: [1:1.00]
2922 ; BROADWELL-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero sched: [5:0.50]
2923 ; BROADWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
2924 ; BROADWELL-NEXT:    vpaddq %xmm2, %xmm0, %xmm0 # sched: [1:0.50]
2925 ; BROADWELL-NEXT:    vmovq %xmm0, %rax # sched: [1:1.00]
2926 ; BROADWELL-NEXT:    vmovq %xmm1, (%rsi) # sched: [1:1.00]
2927 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
2929 ; SKYLAKE-LABEL: test_movd_64:
2930 ; SKYLAKE:       # BB#0:
2931 ; SKYLAKE-NEXT:    vmovq %rdi, %xmm1 # sched: [1:1.00]
2932 ; SKYLAKE-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero sched: [5:0.50]
2933 ; SKYLAKE-NEXT:    vpaddq %xmm1, %xmm0, %xmm1 # sched: [1:0.33]
2934 ; SKYLAKE-NEXT:    vpaddq %xmm2, %xmm0, %xmm0 # sched: [1:0.33]
2935 ; SKYLAKE-NEXT:    vmovq %xmm0, %rax # sched: [2:1.00]
2936 ; SKYLAKE-NEXT:    vmovq %xmm1, (%rsi) # sched: [1:1.00]
2937 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
2939 ; SKX-LABEL: test_movd_64:
2940 ; SKX:       # BB#0:
2941 ; SKX-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero sched: [5:0.50]
2942 ; SKX-NEXT:    vmovq %rdi, %xmm2 # sched: [1:1.00]
2943 ; SKX-NEXT:    vpaddq %xmm2, %xmm0, %xmm2 # sched: [1:0.33]
2944 ; SKX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
2945 ; SKX-NEXT:    vmovq %xmm0, %rax # sched: [2:1.00]
2946 ; SKX-NEXT:    vmovq %xmm2, (%rsi) # sched: [1:1.00]
2947 ; SKX-NEXT:    retq # sched: [7:1.00]
2949 ; BTVER2-LABEL: test_movd_64:
2950 ; BTVER2:       # BB#0:
2951 ; BTVER2-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero sched: [5:1.00]
2952 ; BTVER2-NEXT:    vmovq %rdi, %xmm1 # sched: [1:0.17]
2953 ; BTVER2-NEXT:    vpaddq %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
2954 ; BTVER2-NEXT:    vmovq %xmm1, (%rsi) # sched: [1:1.00]
2955 ; BTVER2-NEXT:    vpaddq %xmm2, %xmm0, %xmm0 # sched: [1:0.50]
2956 ; BTVER2-NEXT:    vmovq %xmm0, %rax # sched: [1:0.17]
2957 ; BTVER2-NEXT:    retq # sched: [4:1.00]
2959 ; ZNVER1-LABEL: test_movd_64:
2960 ; ZNVER1:       # BB#0:
2961 ; ZNVER1-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero sched: [8:0.50]
2962 ; ZNVER1-NEXT:    vmovq %rdi, %xmm1 # sched: [3:1.00]
2963 ; ZNVER1-NEXT:    vpaddq %xmm1, %xmm0, %xmm1 # sched: [1:0.25]
2964 ; ZNVER1-NEXT:    vmovq %xmm1, (%rsi) # sched: [1:0.50]
2965 ; ZNVER1-NEXT:    vpaddq %xmm2, %xmm0, %xmm0 # sched: [1:0.25]
2966 ; ZNVER1-NEXT:    vmovq %xmm0, %rax # sched: [2:1.00]
2967 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
2968   %1 = insertelement <2 x i64> undef, i64 %a1, i64 0
2969   %2 = load i64, i64 *%a2
2970   %3 = insertelement <2 x i64> undef, i64 %2, i64 0
2971   %4 = add <2 x i64> %a0, %1
2972   %5 = add <2 x i64> %a0, %3
2973   %6 = extractelement <2 x i64> %4, i64 0
2974   %7 = extractelement <2 x i64> %5, i64 0
2975   store i64 %6, i64* %a2
2976   ret i64 %7
2979 define void @test_movhpd(<2 x double> %a0, <2 x double> %a1, x86_mmx *%a2) {
2980 ; GENERIC-LABEL: test_movhpd:
2981 ; GENERIC:       # BB#0:
2982 ; GENERIC-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [7:1.00]
2983 ; GENERIC-NEXT:    addpd %xmm0, %xmm1 # sched: [3:1.00]
2984 ; GENERIC-NEXT:    movhpd %xmm1, (%rdi) # sched: [5:1.00]
2985 ; GENERIC-NEXT:    retq # sched: [1:1.00]
2987 ; ATOM-LABEL: test_movhpd:
2988 ; ATOM:       # BB#0:
2989 ; ATOM-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [1:1.00]
2990 ; ATOM-NEXT:    addpd %xmm0, %xmm1 # sched: [6:3.00]
2991 ; ATOM-NEXT:    movhpd %xmm1, (%rdi) # sched: [1:1.00]
2992 ; ATOM-NEXT:    retq # sched: [79:39.50]
2994 ; SLM-LABEL: test_movhpd:
2995 ; SLM:       # BB#0:
2996 ; SLM-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [4:1.00]
2997 ; SLM-NEXT:    addpd %xmm0, %xmm1 # sched: [3:1.00]
2998 ; SLM-NEXT:    movhpd %xmm1, (%rdi) # sched: [1:1.00]
2999 ; SLM-NEXT:    retq # sched: [4:1.00]
3001 ; SANDY-LABEL: test_movhpd:
3002 ; SANDY:       # BB#0:
3003 ; SANDY-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [7:1.00]
3004 ; SANDY-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3005 ; SANDY-NEXT:    vmovhpd %xmm0, (%rdi) # sched: [5:1.00]
3006 ; SANDY-NEXT:    retq # sched: [1:1.00]
3008 ; HASWELL-LABEL: test_movhpd:
3009 ; HASWELL:       # BB#0:
3010 ; HASWELL-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [1:1.00]
3011 ; HASWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3012 ; HASWELL-NEXT:    vmovhpd %xmm0, (%rdi) # sched: [1:1.00]
3013 ; HASWELL-NEXT:    retq # sched: [2:1.00]
3015 ; BROADWELL-LABEL: test_movhpd:
3016 ; BROADWELL:       # BB#0:
3017 ; BROADWELL-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [6:1.00]
3018 ; BROADWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3019 ; BROADWELL-NEXT:    vmovhpd %xmm0, (%rdi) # sched: [1:1.00]
3020 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3022 ; SKYLAKE-LABEL: test_movhpd:
3023 ; SKYLAKE:       # BB#0:
3024 ; SKYLAKE-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [6:1.00]
3025 ; SKYLAKE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
3026 ; SKYLAKE-NEXT:    vmovhpd %xmm0, (%rdi) # sched: [1:1.00]
3027 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3029 ; SKX-LABEL: test_movhpd:
3030 ; SKX:       # BB#0:
3031 ; SKX-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [6:1.00]
3032 ; SKX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
3033 ; SKX-NEXT:    vmovhpd %xmm0, (%rdi) # sched: [1:1.00]
3034 ; SKX-NEXT:    retq # sched: [7:1.00]
3036 ; BTVER2-LABEL: test_movhpd:
3037 ; BTVER2:       # BB#0:
3038 ; BTVER2-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [6:1.00]
3039 ; BTVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3040 ; BTVER2-NEXT:    vmovhpd %xmm0, (%rdi) # sched: [1:1.00]
3041 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3043 ; ZNVER1-LABEL: test_movhpd:
3044 ; ZNVER1:       # BB#0:
3045 ; ZNVER1-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [8:0.50]
3046 ; ZNVER1-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3047 ; ZNVER1-NEXT:    vmovhpd %xmm0, (%rdi) # sched: [1:0.50]
3048 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3049   %1 = bitcast x86_mmx* %a2 to double*
3050   %2 = load double, double *%1, align 8
3051   %3 = insertelement <2 x double> %a1, double %2, i32 1
3052   %4 = fadd <2 x double> %a0, %3
3053   %5 = extractelement <2 x double> %4, i32 1
3054   store double %5, double* %1
3055   ret void
3058 define void @test_movlpd(<2 x double> %a0, <2 x double> %a1, x86_mmx *%a2) {
3059 ; GENERIC-LABEL: test_movlpd:
3060 ; GENERIC:       # BB#0:
3061 ; GENERIC-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [7:1.00]
3062 ; GENERIC-NEXT:    addpd %xmm0, %xmm1 # sched: [3:1.00]
3063 ; GENERIC-NEXT:    movlpd %xmm1, (%rdi) # sched: [5:1.00]
3064 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3066 ; ATOM-LABEL: test_movlpd:
3067 ; ATOM:       # BB#0:
3068 ; ATOM-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [1:1.00]
3069 ; ATOM-NEXT:    addpd %xmm0, %xmm1 # sched: [6:3.00]
3070 ; ATOM-NEXT:    movlpd %xmm1, (%rdi) # sched: [1:1.00]
3071 ; ATOM-NEXT:    retq # sched: [79:39.50]
3073 ; SLM-LABEL: test_movlpd:
3074 ; SLM:       # BB#0:
3075 ; SLM-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [4:1.00]
3076 ; SLM-NEXT:    addpd %xmm0, %xmm1 # sched: [3:1.00]
3077 ; SLM-NEXT:    movlpd %xmm1, (%rdi) # sched: [1:1.00]
3078 ; SLM-NEXT:    retq # sched: [4:1.00]
3080 ; SANDY-LABEL: test_movlpd:
3081 ; SANDY:       # BB#0:
3082 ; SANDY-NEXT:    vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [7:1.00]
3083 ; SANDY-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3084 ; SANDY-NEXT:    vmovlpd %xmm0, (%rdi) # sched: [5:1.00]
3085 ; SANDY-NEXT:    retq # sched: [1:1.00]
3087 ; HASWELL-LABEL: test_movlpd:
3088 ; HASWELL:       # BB#0:
3089 ; HASWELL-NEXT:    vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [1:1.00]
3090 ; HASWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3091 ; HASWELL-NEXT:    vmovlpd %xmm0, (%rdi) # sched: [1:1.00]
3092 ; HASWELL-NEXT:    retq # sched: [2:1.00]
3094 ; BROADWELL-LABEL: test_movlpd:
3095 ; BROADWELL:       # BB#0:
3096 ; BROADWELL-NEXT:    vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [6:1.00]
3097 ; BROADWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3098 ; BROADWELL-NEXT:    vmovlpd %xmm0, (%rdi) # sched: [1:1.00]
3099 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3101 ; SKYLAKE-LABEL: test_movlpd:
3102 ; SKYLAKE:       # BB#0:
3103 ; SKYLAKE-NEXT:    vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [6:1.00]
3104 ; SKYLAKE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
3105 ; SKYLAKE-NEXT:    vmovlpd %xmm0, (%rdi) # sched: [1:1.00]
3106 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3108 ; SKX-LABEL: test_movlpd:
3109 ; SKX:       # BB#0:
3110 ; SKX-NEXT:    vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [6:1.00]
3111 ; SKX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
3112 ; SKX-NEXT:    vmovlpd %xmm0, (%rdi) # sched: [1:1.00]
3113 ; SKX-NEXT:    retq # sched: [7:1.00]
3115 ; BTVER2-LABEL: test_movlpd:
3116 ; BTVER2:       # BB#0:
3117 ; BTVER2-NEXT:    vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [6:1.00]
3118 ; BTVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3119 ; BTVER2-NEXT:    vmovlpd %xmm0, (%rdi) # sched: [1:1.00]
3120 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3122 ; ZNVER1-LABEL: test_movlpd:
3123 ; ZNVER1:       # BB#0:
3124 ; ZNVER1-NEXT:    vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [8:0.50]
3125 ; ZNVER1-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3126 ; ZNVER1-NEXT:    vmovlpd %xmm0, (%rdi) # sched: [1:0.50]
3127 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3128   %1 = bitcast x86_mmx* %a2 to double*
3129   %2 = load double, double *%1, align 8
3130   %3 = insertelement <2 x double> %a1, double %2, i32 0
3131   %4 = fadd <2 x double> %a0, %3
3132   %5 = extractelement <2 x double> %4, i32 0
3133   store double %5, double* %1
3134   ret void
3137 define i32 @test_movmskpd(<2 x double> %a0) {
3138 ; GENERIC-LABEL: test_movmskpd:
3139 ; GENERIC:       # BB#0:
3140 ; GENERIC-NEXT:    movmskpd %xmm0, %eax # sched: [2:1.00]
3141 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3143 ; ATOM-LABEL: test_movmskpd:
3144 ; ATOM:       # BB#0:
3145 ; ATOM-NEXT:    movmskpd %xmm0, %eax # sched: [3:3.00]
3146 ; ATOM-NEXT:    nop # sched: [1:0.50]
3147 ; ATOM-NEXT:    nop # sched: [1:0.50]
3148 ; ATOM-NEXT:    retq # sched: [79:39.50]
3150 ; SLM-LABEL: test_movmskpd:
3151 ; SLM:       # BB#0:
3152 ; SLM-NEXT:    movmskpd %xmm0, %eax # sched: [1:0.50]
3153 ; SLM-NEXT:    retq # sched: [4:1.00]
3155 ; SANDY-LABEL: test_movmskpd:
3156 ; SANDY:       # BB#0:
3157 ; SANDY-NEXT:    vmovmskpd %xmm0, %eax # sched: [2:1.00]
3158 ; SANDY-NEXT:    retq # sched: [1:1.00]
3160 ; HASWELL-LABEL: test_movmskpd:
3161 ; HASWELL:       # BB#0:
3162 ; HASWELL-NEXT:    vmovmskpd %xmm0, %eax # sched: [3:1.00]
3163 ; HASWELL-NEXT:    retq # sched: [2:1.00]
3165 ; BROADWELL-LABEL: test_movmskpd:
3166 ; BROADWELL:       # BB#0:
3167 ; BROADWELL-NEXT:    vmovmskpd %xmm0, %eax # sched: [3:1.00]
3168 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3170 ; SKYLAKE-LABEL: test_movmskpd:
3171 ; SKYLAKE:       # BB#0:
3172 ; SKYLAKE-NEXT:    vmovmskpd %xmm0, %eax # sched: [2:1.00]
3173 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3175 ; SKX-LABEL: test_movmskpd:
3176 ; SKX:       # BB#0:
3177 ; SKX-NEXT:    vmovmskpd %xmm0, %eax # sched: [2:1.00]
3178 ; SKX-NEXT:    retq # sched: [7:1.00]
3180 ; BTVER2-LABEL: test_movmskpd:
3181 ; BTVER2:       # BB#0:
3182 ; BTVER2-NEXT:    vmovmskpd %xmm0, %eax # sched: [3:1.00]
3183 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3185 ; ZNVER1-LABEL: test_movmskpd:
3186 ; ZNVER1:       # BB#0:
3187 ; ZNVER1-NEXT:    vmovmskpd %xmm0, %eax # sched: [1:1.00]
3188 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3189   %1 = call i32 @llvm.x86.sse2.movmsk.pd(<2 x double> %a0)
3190   ret i32 %1
3192 declare i32 @llvm.x86.sse2.movmsk.pd(<2 x double>) nounwind readnone
3194 define void @test_movntdqa(<2 x i64> %a0, <2 x i64> *%a1) {
3195 ; GENERIC-LABEL: test_movntdqa:
3196 ; GENERIC:       # BB#0:
3197 ; GENERIC-NEXT:    paddq %xmm0, %xmm0 # sched: [1:0.50]
3198 ; GENERIC-NEXT:    movntdq %xmm0, (%rdi) # sched: [5:1.00]
3199 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3201 ; ATOM-LABEL: test_movntdqa:
3202 ; ATOM:       # BB#0:
3203 ; ATOM-NEXT:    paddq %xmm0, %xmm0 # sched: [2:1.00]
3204 ; ATOM-NEXT:    movntdq %xmm0, (%rdi) # sched: [1:1.00]
3205 ; ATOM-NEXT:    nop # sched: [1:0.50]
3206 ; ATOM-NEXT:    nop # sched: [1:0.50]
3207 ; ATOM-NEXT:    retq # sched: [79:39.50]
3209 ; SLM-LABEL: test_movntdqa:
3210 ; SLM:       # BB#0:
3211 ; SLM-NEXT:    paddq %xmm0, %xmm0 # sched: [1:0.50]
3212 ; SLM-NEXT:    movntdq %xmm0, (%rdi) # sched: [1:1.00]
3213 ; SLM-NEXT:    retq # sched: [4:1.00]
3215 ; SANDY-LABEL: test_movntdqa:
3216 ; SANDY:       # BB#0:
3217 ; SANDY-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
3218 ; SANDY-NEXT:    vmovntdq %xmm0, (%rdi) # sched: [5:1.00]
3219 ; SANDY-NEXT:    retq # sched: [1:1.00]
3221 ; HASWELL-LABEL: test_movntdqa:
3222 ; HASWELL:       # BB#0:
3223 ; HASWELL-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
3224 ; HASWELL-NEXT:    vmovntdq %xmm0, (%rdi) # sched: [1:1.00]
3225 ; HASWELL-NEXT:    retq # sched: [2:1.00]
3227 ; BROADWELL-LABEL: test_movntdqa:
3228 ; BROADWELL:       # BB#0:
3229 ; BROADWELL-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
3230 ; BROADWELL-NEXT:    vmovntdq %xmm0, (%rdi) # sched: [1:1.00]
3231 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3233 ; SKYLAKE-LABEL: test_movntdqa:
3234 ; SKYLAKE:       # BB#0:
3235 ; SKYLAKE-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.33]
3236 ; SKYLAKE-NEXT:    vmovntdq %xmm0, (%rdi) # sched: [1:1.00]
3237 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3239 ; SKX-LABEL: test_movntdqa:
3240 ; SKX:       # BB#0:
3241 ; SKX-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.33]
3242 ; SKX-NEXT:    vmovntdq %xmm0, (%rdi) # sched: [1:1.00]
3243 ; SKX-NEXT:    retq # sched: [7:1.00]
3245 ; BTVER2-LABEL: test_movntdqa:
3246 ; BTVER2:       # BB#0:
3247 ; BTVER2-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.50]
3248 ; BTVER2-NEXT:    vmovntdq %xmm0, (%rdi) # sched: [1:1.00]
3249 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3251 ; ZNVER1-LABEL: test_movntdqa:
3252 ; ZNVER1:       # BB#0:
3253 ; ZNVER1-NEXT:    vpaddq %xmm0, %xmm0, %xmm0 # sched: [1:0.25]
3254 ; ZNVER1-NEXT:    vmovntdq %xmm0, (%rdi) # sched: [1:0.50]
3255 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3256   %1 = add <2 x i64> %a0, %a0
3257   store <2 x i64> %1, <2 x i64> *%a1, align 16, !nontemporal !0
3258   ret void
3261 define void @test_movntpd(<2 x double> %a0, <2 x double> *%a1) {
3262 ; GENERIC-LABEL: test_movntpd:
3263 ; GENERIC:       # BB#0:
3264 ; GENERIC-NEXT:    addpd %xmm0, %xmm0 # sched: [3:1.00]
3265 ; GENERIC-NEXT:    movntpd %xmm0, (%rdi) # sched: [5:1.00]
3266 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3268 ; ATOM-LABEL: test_movntpd:
3269 ; ATOM:       # BB#0:
3270 ; ATOM-NEXT:    addpd %xmm0, %xmm0 # sched: [6:3.00]
3271 ; ATOM-NEXT:    movntpd %xmm0, (%rdi) # sched: [1:1.00]
3272 ; ATOM-NEXT:    retq # sched: [79:39.50]
3274 ; SLM-LABEL: test_movntpd:
3275 ; SLM:       # BB#0:
3276 ; SLM-NEXT:    addpd %xmm0, %xmm0 # sched: [3:1.00]
3277 ; SLM-NEXT:    movntpd %xmm0, (%rdi) # sched: [1:1.00]
3278 ; SLM-NEXT:    retq # sched: [4:1.00]
3280 ; SANDY-LABEL: test_movntpd:
3281 ; SANDY:       # BB#0:
3282 ; SANDY-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3283 ; SANDY-NEXT:    vmovntpd %xmm0, (%rdi) # sched: [5:1.00]
3284 ; SANDY-NEXT:    retq # sched: [1:1.00]
3286 ; HASWELL-LABEL: test_movntpd:
3287 ; HASWELL:       # BB#0:
3288 ; HASWELL-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3289 ; HASWELL-NEXT:    vmovntpd %xmm0, (%rdi) # sched: [1:1.00]
3290 ; HASWELL-NEXT:    retq # sched: [2:1.00]
3292 ; BROADWELL-LABEL: test_movntpd:
3293 ; BROADWELL:       # BB#0:
3294 ; BROADWELL-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3295 ; BROADWELL-NEXT:    vmovntpd %xmm0, (%rdi) # sched: [1:1.00]
3296 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3298 ; SKYLAKE-LABEL: test_movntpd:
3299 ; SKYLAKE:       # BB#0:
3300 ; SKYLAKE-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [4:0.50]
3301 ; SKYLAKE-NEXT:    vmovntpd %xmm0, (%rdi) # sched: [1:1.00]
3302 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3304 ; SKX-LABEL: test_movntpd:
3305 ; SKX:       # BB#0:
3306 ; SKX-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [4:0.33]
3307 ; SKX-NEXT:    vmovntpd %xmm0, (%rdi) # sched: [1:1.00]
3308 ; SKX-NEXT:    retq # sched: [7:1.00]
3310 ; BTVER2-LABEL: test_movntpd:
3311 ; BTVER2:       # BB#0:
3312 ; BTVER2-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3313 ; BTVER2-NEXT:    vmovntpd %xmm0, (%rdi) # sched: [1:1.00]
3314 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3316 ; ZNVER1-LABEL: test_movntpd:
3317 ; ZNVER1:       # BB#0:
3318 ; ZNVER1-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3319 ; ZNVER1-NEXT:    vmovntpd %xmm0, (%rdi) # sched: [1:0.50]
3320 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3321   %1 = fadd <2 x double> %a0, %a0
3322   store <2 x double> %1, <2 x double> *%a1, align 16, !nontemporal !0
3323   ret void
3326 define <2 x i64> @test_movq_mem(<2 x i64> %a0, i64 *%a1) {
3327 ; GENERIC-LABEL: test_movq_mem:
3328 ; GENERIC:       # BB#0:
3329 ; GENERIC-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero sched: [4:0.50]
3330 ; GENERIC-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
3331 ; GENERIC-NEXT:    movq %xmm0, (%rdi) # sched: [5:1.00]
3332 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3334 ; ATOM-LABEL: test_movq_mem:
3335 ; ATOM:       # BB#0:
3336 ; ATOM-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero sched: [1:1.00]
3337 ; ATOM-NEXT:    paddq %xmm1, %xmm0 # sched: [2:1.00]
3338 ; ATOM-NEXT:    movq %xmm0, (%rdi) # sched: [1:1.00]
3339 ; ATOM-NEXT:    retq # sched: [79:39.50]
3341 ; SLM-LABEL: test_movq_mem:
3342 ; SLM:       # BB#0:
3343 ; SLM-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero sched: [3:1.00]
3344 ; SLM-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
3345 ; SLM-NEXT:    movq %xmm0, (%rdi) # sched: [1:1.00]
3346 ; SLM-NEXT:    retq # sched: [4:1.00]
3348 ; SANDY-LABEL: test_movq_mem:
3349 ; SANDY:       # BB#0:
3350 ; SANDY-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero sched: [6:0.50]
3351 ; SANDY-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3352 ; SANDY-NEXT:    vmovq %xmm0, (%rdi) # sched: [5:1.00]
3353 ; SANDY-NEXT:    retq # sched: [1:1.00]
3355 ; HASWELL-LABEL: test_movq_mem:
3356 ; HASWELL:       # BB#0:
3357 ; HASWELL-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero sched: [1:0.50]
3358 ; HASWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3359 ; HASWELL-NEXT:    vmovq %xmm0, (%rdi) # sched: [1:1.00]
3360 ; HASWELL-NEXT:    retq # sched: [2:1.00]
3362 ; BROADWELL-LABEL: test_movq_mem:
3363 ; BROADWELL:       # BB#0:
3364 ; BROADWELL-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero sched: [5:0.50]
3365 ; BROADWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3366 ; BROADWELL-NEXT:    vmovq %xmm0, (%rdi) # sched: [1:1.00]
3367 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3369 ; SKYLAKE-LABEL: test_movq_mem:
3370 ; SKYLAKE:       # BB#0:
3371 ; SKYLAKE-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero sched: [5:0.50]
3372 ; SKYLAKE-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3373 ; SKYLAKE-NEXT:    vmovq %xmm0, (%rdi) # sched: [1:1.00]
3374 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3376 ; SKX-LABEL: test_movq_mem:
3377 ; SKX:       # BB#0:
3378 ; SKX-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero sched: [5:0.50]
3379 ; SKX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3380 ; SKX-NEXT:    vmovq %xmm0, (%rdi) # sched: [1:1.00]
3381 ; SKX-NEXT:    retq # sched: [7:1.00]
3383 ; BTVER2-LABEL: test_movq_mem:
3384 ; BTVER2:       # BB#0:
3385 ; BTVER2-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero sched: [5:1.00]
3386 ; BTVER2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3387 ; BTVER2-NEXT:    vmovq %xmm0, (%rdi) # sched: [1:1.00]
3388 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3390 ; ZNVER1-LABEL: test_movq_mem:
3391 ; ZNVER1:       # BB#0:
3392 ; ZNVER1-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero sched: [8:0.50]
3393 ; ZNVER1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3394 ; ZNVER1-NEXT:    vmovq %xmm0, (%rdi) # sched: [1:0.50]
3395 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3396   %1 = load i64, i64* %a1, align 1
3397   %2 = insertelement <2 x i64> zeroinitializer, i64 %1, i32 0
3398   %3 = add <2 x i64> %a0, %2
3399   %4 = extractelement <2 x i64> %3, i32 0
3400   store i64 %4, i64 *%a1, align 1
3401   ret <2 x i64> %3
3404 define <2 x i64> @test_movq_reg(<2 x i64> %a0, <2 x i64> %a1) {
3405 ; GENERIC-LABEL: test_movq_reg:
3406 ; GENERIC:       # BB#0:
3407 ; GENERIC-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero sched: [1:1.00]
3408 ; GENERIC-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
3409 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3411 ; ATOM-LABEL: test_movq_reg:
3412 ; ATOM:       # BB#0:
3413 ; ATOM-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero sched: [1:0.50]
3414 ; ATOM-NEXT:    paddq %xmm1, %xmm0 # sched: [2:1.00]
3415 ; ATOM-NEXT:    nop # sched: [1:0.50]
3416 ; ATOM-NEXT:    nop # sched: [1:0.50]
3417 ; ATOM-NEXT:    retq # sched: [79:39.50]
3419 ; SLM-LABEL: test_movq_reg:
3420 ; SLM:       # BB#0:
3421 ; SLM-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero sched: [1:0.50]
3422 ; SLM-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
3423 ; SLM-NEXT:    retq # sched: [4:1.00]
3425 ; SANDY-LABEL: test_movq_reg:
3426 ; SANDY:       # BB#0:
3427 ; SANDY-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero sched: [1:0.33]
3428 ; SANDY-NEXT:    vpaddq %xmm0, %xmm1, %xmm0 # sched: [1:0.50]
3429 ; SANDY-NEXT:    retq # sched: [1:1.00]
3431 ; HASWELL-LABEL: test_movq_reg:
3432 ; HASWELL:       # BB#0:
3433 ; HASWELL-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero sched: [1:0.33]
3434 ; HASWELL-NEXT:    vpaddq %xmm0, %xmm1, %xmm0 # sched: [1:0.50]
3435 ; HASWELL-NEXT:    retq # sched: [2:1.00]
3437 ; BROADWELL-LABEL: test_movq_reg:
3438 ; BROADWELL:       # BB#0:
3439 ; BROADWELL-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero sched: [1:0.33]
3440 ; BROADWELL-NEXT:    vpaddq %xmm0, %xmm1, %xmm0 # sched: [1:0.50]
3441 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3443 ; SKYLAKE-LABEL: test_movq_reg:
3444 ; SKYLAKE:       # BB#0:
3445 ; SKYLAKE-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero sched: [1:0.33]
3446 ; SKYLAKE-NEXT:    vpaddq %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
3447 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3449 ; SKX-LABEL: test_movq_reg:
3450 ; SKX:       # BB#0:
3451 ; SKX-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero sched: [1:0.33]
3452 ; SKX-NEXT:    vpaddq %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
3453 ; SKX-NEXT:    retq # sched: [7:1.00]
3455 ; BTVER2-LABEL: test_movq_reg:
3456 ; BTVER2:       # BB#0:
3457 ; BTVER2-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero sched: [1:0.50]
3458 ; BTVER2-NEXT:    vpaddq %xmm0, %xmm1, %xmm0 # sched: [1:0.50]
3459 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3461 ; ZNVER1-LABEL: test_movq_reg:
3462 ; ZNVER1:       # BB#0:
3463 ; ZNVER1-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero sched: [1:0.25]
3464 ; ZNVER1-NEXT:    vpaddq %xmm0, %xmm1, %xmm0 # sched: [1:0.25]
3465 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3466   %1 = shufflevector <2 x i64> %a0, <2 x i64> zeroinitializer, <2 x i32> <i32 0, i32 2>
3467   %2 = add <2 x i64> %a1, %1
3468   ret <2 x i64> %2
3471 define void @test_movsd_mem(double* %a0, double* %a1) {
3472 ; GENERIC-LABEL: test_movsd_mem:
3473 ; GENERIC:       # BB#0:
3474 ; GENERIC-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [4:0.50]
3475 ; GENERIC-NEXT:    addsd %xmm0, %xmm0 # sched: [3:1.00]
3476 ; GENERIC-NEXT:    movsd %xmm0, (%rsi) # sched: [1:1.00]
3477 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3479 ; ATOM-LABEL: test_movsd_mem:
3480 ; ATOM:       # BB#0:
3481 ; ATOM-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [1:1.00]
3482 ; ATOM-NEXT:    addsd %xmm0, %xmm0 # sched: [5:5.00]
3483 ; ATOM-NEXT:    movsd %xmm0, (%rsi) # sched: [1:1.00]
3484 ; ATOM-NEXT:    retq # sched: [79:39.50]
3486 ; SLM-LABEL: test_movsd_mem:
3487 ; SLM:       # BB#0:
3488 ; SLM-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero sched: [3:1.00]
3489 ; SLM-NEXT:    addsd %xmm0, %xmm0 # sched: [3:1.00]
3490 ; SLM-NEXT:    movsd %xmm0, (%rsi) # sched: [1:1.00]
3491 ; SLM-NEXT:    retq # sched: [4:1.00]
3493 ; SANDY-LABEL: test_movsd_mem:
3494 ; SANDY:       # BB#0:
3495 ; SANDY-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero sched: [6:0.50]
3496 ; SANDY-NEXT:    vaddsd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3497 ; SANDY-NEXT:    vmovsd %xmm0, (%rsi) # sched: [5:1.00]
3498 ; SANDY-NEXT:    retq # sched: [1:1.00]
3500 ; HASWELL-LABEL: test_movsd_mem:
3501 ; HASWELL:       # BB#0:
3502 ; HASWELL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero sched: [1:0.50]
3503 ; HASWELL-NEXT:    vaddsd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3504 ; HASWELL-NEXT:    vmovsd %xmm0, (%rsi) # sched: [1:1.00]
3505 ; HASWELL-NEXT:    retq # sched: [2:1.00]
3507 ; BROADWELL-LABEL: test_movsd_mem:
3508 ; BROADWELL:       # BB#0:
3509 ; BROADWELL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero sched: [5:0.50]
3510 ; BROADWELL-NEXT:    vaddsd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3511 ; BROADWELL-NEXT:    vmovsd %xmm0, (%rsi) # sched: [1:1.00]
3512 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3514 ; SKYLAKE-LABEL: test_movsd_mem:
3515 ; SKYLAKE:       # BB#0:
3516 ; SKYLAKE-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero sched: [5:0.50]
3517 ; SKYLAKE-NEXT:    vaddsd %xmm0, %xmm0, %xmm0 # sched: [4:0.50]
3518 ; SKYLAKE-NEXT:    vmovsd %xmm0, (%rsi) # sched: [1:1.00]
3519 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3521 ; SKX-LABEL: test_movsd_mem:
3522 ; SKX:       # BB#0:
3523 ; SKX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero sched: [5:0.50]
3524 ; SKX-NEXT:    vaddsd %xmm0, %xmm0, %xmm0 # sched: [4:0.33]
3525 ; SKX-NEXT:    vmovsd %xmm0, (%rsi) # sched: [1:1.00]
3526 ; SKX-NEXT:    retq # sched: [7:1.00]
3528 ; BTVER2-LABEL: test_movsd_mem:
3529 ; BTVER2:       # BB#0:
3530 ; BTVER2-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero sched: [5:1.00]
3531 ; BTVER2-NEXT:    vaddsd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3532 ; BTVER2-NEXT:    vmovsd %xmm0, (%rsi) # sched: [1:1.00]
3533 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3535 ; ZNVER1-LABEL: test_movsd_mem:
3536 ; ZNVER1:       # BB#0:
3537 ; ZNVER1-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero sched: [8:0.50]
3538 ; ZNVER1-NEXT:    vaddsd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3539 ; ZNVER1-NEXT:    vmovsd %xmm0, (%rsi) # sched: [1:0.50]
3540 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3541   %1 = load double, double* %a0, align 1
3542   %2 = fadd double %1, %1
3543   store double %2, double *%a1, align 1
3544   ret void
3547 define <2 x double> @test_movsd_reg(<2 x double> %a0, <2 x double> %a1) {
3548 ; GENERIC-LABEL: test_movsd_reg:
3549 ; GENERIC:       # BB#0:
3550 ; GENERIC-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0] sched: [1:1.00]
3551 ; GENERIC-NEXT:    movaps %xmm1, %xmm0 # sched: [1:1.00]
3552 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3554 ; ATOM-LABEL: test_movsd_reg:
3555 ; ATOM:       # BB#0:
3556 ; ATOM-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0] sched: [1:1.00]
3557 ; ATOM-NEXT:    movaps %xmm1, %xmm0 # sched: [1:0.50]
3558 ; ATOM-NEXT:    nop # sched: [1:0.50]
3559 ; ATOM-NEXT:    nop # sched: [1:0.50]
3560 ; ATOM-NEXT:    nop # sched: [1:0.50]
3561 ; ATOM-NEXT:    nop # sched: [1:0.50]
3562 ; ATOM-NEXT:    retq # sched: [79:39.50]
3564 ; SLM-LABEL: test_movsd_reg:
3565 ; SLM:       # BB#0:
3566 ; SLM-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0] sched: [1:1.00]
3567 ; SLM-NEXT:    movaps %xmm1, %xmm0 # sched: [1:1.00]
3568 ; SLM-NEXT:    retq # sched: [4:1.00]
3570 ; SANDY-LABEL: test_movsd_reg:
3571 ; SANDY:       # BB#0:
3572 ; SANDY-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0] sched: [1:1.00]
3573 ; SANDY-NEXT:    retq # sched: [1:1.00]
3575 ; HASWELL-LABEL: test_movsd_reg:
3576 ; HASWELL:       # BB#0:
3577 ; HASWELL-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0] sched: [1:1.00]
3578 ; HASWELL-NEXT:    retq # sched: [2:1.00]
3580 ; BROADWELL-LABEL: test_movsd_reg:
3581 ; BROADWELL:       # BB#0:
3582 ; BROADWELL-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0] sched: [1:1.00]
3583 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3585 ; SKYLAKE-LABEL: test_movsd_reg:
3586 ; SKYLAKE:       # BB#0:
3587 ; SKYLAKE-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0] sched: [1:1.00]
3588 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3590 ; SKX-LABEL: test_movsd_reg:
3591 ; SKX:       # BB#0:
3592 ; SKX-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0] sched: [1:1.00]
3593 ; SKX-NEXT:    retq # sched: [7:1.00]
3595 ; BTVER2-LABEL: test_movsd_reg:
3596 ; BTVER2:       # BB#0:
3597 ; BTVER2-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0] sched: [1:0.50]
3598 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3600 ; ZNVER1-LABEL: test_movsd_reg:
3601 ; ZNVER1:       # BB#0:
3602 ; ZNVER1-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0] sched: [1:0.50]
3603 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3604   %1 = shufflevector <2 x double> %a0, <2 x double> %a1, <2 x i32> <i32 2, i32 0>
3605   ret <2 x double> %1
3608 define void @test_movupd(<2 x double> *%a0, <2 x double> *%a1) {
3609 ; GENERIC-LABEL: test_movupd:
3610 ; GENERIC:       # BB#0:
3611 ; GENERIC-NEXT:    movupd (%rdi), %xmm0 # sched: [6:0.50]
3612 ; GENERIC-NEXT:    addpd %xmm0, %xmm0 # sched: [3:1.00]
3613 ; GENERIC-NEXT:    movupd %xmm0, (%rsi) # sched: [5:1.00]
3614 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3616 ; ATOM-LABEL: test_movupd:
3617 ; ATOM:       # BB#0:
3618 ; ATOM-NEXT:    movupd (%rdi), %xmm0 # sched: [3:1.50]
3619 ; ATOM-NEXT:    addpd %xmm0, %xmm0 # sched: [6:3.00]
3620 ; ATOM-NEXT:    movupd %xmm0, (%rsi) # sched: [2:1.00]
3621 ; ATOM-NEXT:    retq # sched: [79:39.50]
3623 ; SLM-LABEL: test_movupd:
3624 ; SLM:       # BB#0:
3625 ; SLM-NEXT:    movupd (%rdi), %xmm0 # sched: [3:1.00]
3626 ; SLM-NEXT:    addpd %xmm0, %xmm0 # sched: [3:1.00]
3627 ; SLM-NEXT:    movupd %xmm0, (%rsi) # sched: [1:1.00]
3628 ; SLM-NEXT:    retq # sched: [4:1.00]
3630 ; SANDY-LABEL: test_movupd:
3631 ; SANDY:       # BB#0:
3632 ; SANDY-NEXT:    vmovupd (%rdi), %xmm0 # sched: [6:0.50]
3633 ; SANDY-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3634 ; SANDY-NEXT:    vmovupd %xmm0, (%rsi) # sched: [5:1.00]
3635 ; SANDY-NEXT:    retq # sched: [1:1.00]
3637 ; HASWELL-LABEL: test_movupd:
3638 ; HASWELL:       # BB#0:
3639 ; HASWELL-NEXT:    vmovupd (%rdi), %xmm0 # sched: [1:0.50]
3640 ; HASWELL-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3641 ; HASWELL-NEXT:    vmovupd %xmm0, (%rsi) # sched: [1:1.00]
3642 ; HASWELL-NEXT:    retq # sched: [2:1.00]
3644 ; BROADWELL-LABEL: test_movupd:
3645 ; BROADWELL:       # BB#0:
3646 ; BROADWELL-NEXT:    vmovupd (%rdi), %xmm0 # sched: [5:0.50]
3647 ; BROADWELL-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3648 ; BROADWELL-NEXT:    vmovupd %xmm0, (%rsi) # sched: [1:1.00]
3649 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3651 ; SKYLAKE-LABEL: test_movupd:
3652 ; SKYLAKE:       # BB#0:
3653 ; SKYLAKE-NEXT:    vmovupd (%rdi), %xmm0 # sched: [6:0.50]
3654 ; SKYLAKE-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [4:0.50]
3655 ; SKYLAKE-NEXT:    vmovupd %xmm0, (%rsi) # sched: [1:1.00]
3656 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3658 ; SKX-LABEL: test_movupd:
3659 ; SKX:       # BB#0:
3660 ; SKX-NEXT:    vmovupd (%rdi), %xmm0 # sched: [6:0.50]
3661 ; SKX-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [4:0.33]
3662 ; SKX-NEXT:    vmovupd %xmm0, (%rsi) # sched: [1:1.00]
3663 ; SKX-NEXT:    retq # sched: [7:1.00]
3665 ; BTVER2-LABEL: test_movupd:
3666 ; BTVER2:       # BB#0:
3667 ; BTVER2-NEXT:    vmovupd (%rdi), %xmm0 # sched: [5:1.00]
3668 ; BTVER2-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3669 ; BTVER2-NEXT:    vmovupd %xmm0, (%rsi) # sched: [1:1.00]
3670 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3672 ; ZNVER1-LABEL: test_movupd:
3673 ; ZNVER1:       # BB#0:
3674 ; ZNVER1-NEXT:    vmovupd (%rdi), %xmm0 # sched: [8:0.50]
3675 ; ZNVER1-NEXT:    vaddpd %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
3676 ; ZNVER1-NEXT:    vmovupd %xmm0, (%rsi) # sched: [1:0.50]
3677 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3678   %1 = load <2 x double>, <2 x double> *%a0, align 1
3679   %2 = fadd <2 x double> %1, %1
3680   store <2 x double> %2, <2 x double> *%a1, align 1
3681   ret void
3684 define <2 x double> @test_mulpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
3685 ; GENERIC-LABEL: test_mulpd:
3686 ; GENERIC:       # BB#0:
3687 ; GENERIC-NEXT:    mulpd %xmm1, %xmm0 # sched: [5:1.00]
3688 ; GENERIC-NEXT:    mulpd (%rdi), %xmm0 # sched: [11:1.00]
3689 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3691 ; ATOM-LABEL: test_mulpd:
3692 ; ATOM:       # BB#0:
3693 ; ATOM-NEXT:    mulpd %xmm1, %xmm0 # sched: [9:4.50]
3694 ; ATOM-NEXT:    mulpd (%rdi), %xmm0 # sched: [10:5.00]
3695 ; ATOM-NEXT:    retq # sched: [79:39.50]
3697 ; SLM-LABEL: test_mulpd:
3698 ; SLM:       # BB#0:
3699 ; SLM-NEXT:    mulpd %xmm1, %xmm0 # sched: [5:2.00]
3700 ; SLM-NEXT:    mulpd (%rdi), %xmm0 # sched: [8:2.00]
3701 ; SLM-NEXT:    retq # sched: [4:1.00]
3703 ; SANDY-LABEL: test_mulpd:
3704 ; SANDY:       # BB#0:
3705 ; SANDY-NEXT:    vmulpd %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
3706 ; SANDY-NEXT:    vmulpd (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
3707 ; SANDY-NEXT:    retq # sched: [1:1.00]
3709 ; HASWELL-LABEL: test_mulpd:
3710 ; HASWELL:       # BB#0:
3711 ; HASWELL-NEXT:    vmulpd %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
3712 ; HASWELL-NEXT:    vmulpd (%rdi), %xmm0, %xmm0 # sched: [5:0.50]
3713 ; HASWELL-NEXT:    retq # sched: [2:1.00]
3715 ; BROADWELL-LABEL: test_mulpd:
3716 ; BROADWELL:       # BB#0:
3717 ; BROADWELL-NEXT:    vmulpd %xmm1, %xmm0, %xmm0 # sched: [3:0.50]
3718 ; BROADWELL-NEXT:    vmulpd (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
3719 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3721 ; SKYLAKE-LABEL: test_mulpd:
3722 ; SKYLAKE:       # BB#0:
3723 ; SKYLAKE-NEXT:    vmulpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
3724 ; SKYLAKE-NEXT:    vmulpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
3725 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3727 ; SKX-LABEL: test_mulpd:
3728 ; SKX:       # BB#0:
3729 ; SKX-NEXT:    vmulpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
3730 ; SKX-NEXT:    vmulpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
3731 ; SKX-NEXT:    retq # sched: [7:1.00]
3733 ; BTVER2-LABEL: test_mulpd:
3734 ; BTVER2:       # BB#0:
3735 ; BTVER2-NEXT:    vmulpd %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
3736 ; BTVER2-NEXT:    vmulpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
3737 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3739 ; ZNVER1-LABEL: test_mulpd:
3740 ; ZNVER1:       # BB#0:
3741 ; ZNVER1-NEXT:    vmulpd %xmm1, %xmm0, %xmm0 # sched: [3:0.50]
3742 ; ZNVER1-NEXT:    vmulpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
3743 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3744   %1 = fmul <2 x double> %a0, %a1
3745   %2 = load <2 x double>, <2 x double> *%a2, align 16
3746   %3 = fmul <2 x double> %1, %2
3747   ret <2 x double> %3
3750 define double @test_mulsd(double %a0, double %a1, double *%a2) {
3751 ; GENERIC-LABEL: test_mulsd:
3752 ; GENERIC:       # BB#0:
3753 ; GENERIC-NEXT:    mulsd %xmm1, %xmm0 # sched: [5:1.00]
3754 ; GENERIC-NEXT:    mulsd (%rdi), %xmm0 # sched: [11:1.00]
3755 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3757 ; ATOM-LABEL: test_mulsd:
3758 ; ATOM:       # BB#0:
3759 ; ATOM-NEXT:    mulsd %xmm1, %xmm0 # sched: [5:5.00]
3760 ; ATOM-NEXT:    mulsd (%rdi), %xmm0 # sched: [5:5.00]
3761 ; ATOM-NEXT:    retq # sched: [79:39.50]
3763 ; SLM-LABEL: test_mulsd:
3764 ; SLM:       # BB#0:
3765 ; SLM-NEXT:    mulsd %xmm1, %xmm0 # sched: [5:2.00]
3766 ; SLM-NEXT:    mulsd (%rdi), %xmm0 # sched: [8:2.00]
3767 ; SLM-NEXT:    retq # sched: [4:1.00]
3769 ; SANDY-LABEL: test_mulsd:
3770 ; SANDY:       # BB#0:
3771 ; SANDY-NEXT:    vmulsd %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
3772 ; SANDY-NEXT:    vmulsd (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
3773 ; SANDY-NEXT:    retq # sched: [1:1.00]
3775 ; HASWELL-LABEL: test_mulsd:
3776 ; HASWELL:       # BB#0:
3777 ; HASWELL-NEXT:    vmulsd %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
3778 ; HASWELL-NEXT:    vmulsd (%rdi), %xmm0, %xmm0 # sched: [5:0.50]
3779 ; HASWELL-NEXT:    retq # sched: [2:1.00]
3781 ; BROADWELL-LABEL: test_mulsd:
3782 ; BROADWELL:       # BB#0:
3783 ; BROADWELL-NEXT:    vmulsd %xmm1, %xmm0, %xmm0 # sched: [3:0.50]
3784 ; BROADWELL-NEXT:    vmulsd (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
3785 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3787 ; SKYLAKE-LABEL: test_mulsd:
3788 ; SKYLAKE:       # BB#0:
3789 ; SKYLAKE-NEXT:    vmulsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
3790 ; SKYLAKE-NEXT:    vmulsd (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
3791 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3793 ; SKX-LABEL: test_mulsd:
3794 ; SKX:       # BB#0:
3795 ; SKX-NEXT:    vmulsd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
3796 ; SKX-NEXT:    vmulsd (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
3797 ; SKX-NEXT:    retq # sched: [7:1.00]
3799 ; BTVER2-LABEL: test_mulsd:
3800 ; BTVER2:       # BB#0:
3801 ; BTVER2-NEXT:    vmulsd %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
3802 ; BTVER2-NEXT:    vmulsd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
3803 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3805 ; ZNVER1-LABEL: test_mulsd:
3806 ; ZNVER1:       # BB#0:
3807 ; ZNVER1-NEXT:    vmulsd %xmm1, %xmm0, %xmm0 # sched: [3:0.50]
3808 ; ZNVER1-NEXT:    vmulsd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
3809 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3810   %1 = fmul double %a0, %a1
3811   %2 = load double, double *%a2, align 8
3812   %3 = fmul double %1, %2
3813   ret double %3
3816 define <2 x double> @test_orpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
3817 ; GENERIC-LABEL: test_orpd:
3818 ; GENERIC:       # BB#0:
3819 ; GENERIC-NEXT:    orpd %xmm1, %xmm0 # sched: [1:1.00]
3820 ; GENERIC-NEXT:    orpd (%rdi), %xmm0 # sched: [7:1.00]
3821 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
3822 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3824 ; ATOM-LABEL: test_orpd:
3825 ; ATOM:       # BB#0:
3826 ; ATOM-NEXT:    orpd %xmm1, %xmm0 # sched: [1:0.50]
3827 ; ATOM-NEXT:    orpd (%rdi), %xmm0 # sched: [1:1.00]
3828 ; ATOM-NEXT:    addpd %xmm1, %xmm0 # sched: [6:3.00]
3829 ; ATOM-NEXT:    retq # sched: [79:39.50]
3831 ; SLM-LABEL: test_orpd:
3832 ; SLM:       # BB#0:
3833 ; SLM-NEXT:    orpd %xmm1, %xmm0 # sched: [1:0.50]
3834 ; SLM-NEXT:    orpd (%rdi), %xmm0 # sched: [4:1.00]
3835 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
3836 ; SLM-NEXT:    retq # sched: [4:1.00]
3838 ; SANDY-LABEL: test_orpd:
3839 ; SANDY:       # BB#0:
3840 ; SANDY-NEXT:    vorpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
3841 ; SANDY-NEXT:    vorpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
3842 ; SANDY-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
3843 ; SANDY-NEXT:    retq # sched: [1:1.00]
3845 ; HASWELL-LABEL: test_orpd:
3846 ; HASWELL:       # BB#0:
3847 ; HASWELL-NEXT:    vorpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
3848 ; HASWELL-NEXT:    vorpd (%rdi), %xmm0, %xmm0 # sched: [1:1.00]
3849 ; HASWELL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
3850 ; HASWELL-NEXT:    retq # sched: [2:1.00]
3852 ; BROADWELL-LABEL: test_orpd:
3853 ; BROADWELL:       # BB#0:
3854 ; BROADWELL-NEXT:    vorpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
3855 ; BROADWELL-NEXT:    vorpd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
3856 ; BROADWELL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
3857 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3859 ; SKYLAKE-LABEL: test_orpd:
3860 ; SKYLAKE:       # BB#0:
3861 ; SKYLAKE-NEXT:    vorpd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3862 ; SKYLAKE-NEXT:    vorpd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3863 ; SKYLAKE-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [4:0.50]
3864 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3866 ; SKX-LABEL: test_orpd:
3867 ; SKX:       # BB#0:
3868 ; SKX-NEXT:    vorpd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3869 ; SKX-NEXT:    vorpd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3870 ; SKX-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [4:0.33]
3871 ; SKX-NEXT:    retq # sched: [7:1.00]
3873 ; BTVER2-LABEL: test_orpd:
3874 ; BTVER2:       # BB#0:
3875 ; BTVER2-NEXT:    vorpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3876 ; BTVER2-NEXT:    vorpd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
3877 ; BTVER2-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
3878 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3880 ; ZNVER1-LABEL: test_orpd:
3881 ; ZNVER1:       # BB#0:
3882 ; ZNVER1-NEXT:    vorpd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3883 ; ZNVER1-NEXT:    vorpd (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
3884 ; ZNVER1-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
3885 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3886   %1 = bitcast <2 x double> %a0 to <4 x i32>
3887   %2 = bitcast <2 x double> %a1 to <4 x i32>
3888   %3 = or <4 x i32> %1, %2
3889   %4 = load <2 x double>, <2 x double> *%a2, align 16
3890   %5 = bitcast <2 x double> %4 to <4 x i32>
3891   %6 = or <4 x i32> %3, %5
3892   %7 = bitcast <4 x i32> %6 to <2 x double>
3893   %8 = fadd <2 x double> %a1, %7
3894   ret <2 x double> %8
3897 define <8 x i16> @test_packssdw(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
3898 ; GENERIC-LABEL: test_packssdw:
3899 ; GENERIC:       # BB#0:
3900 ; GENERIC-NEXT:    packssdw %xmm1, %xmm0 # sched: [1:0.50]
3901 ; GENERIC-NEXT:    packssdw (%rdi), %xmm0 # sched: [7:0.50]
3902 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3904 ; ATOM-LABEL: test_packssdw:
3905 ; ATOM:       # BB#0:
3906 ; ATOM-NEXT:    packssdw %xmm1, %xmm0 # sched: [1:1.00]
3907 ; ATOM-NEXT:    packssdw (%rdi), %xmm0 # sched: [1:1.00]
3908 ; ATOM-NEXT:    nop # sched: [1:0.50]
3909 ; ATOM-NEXT:    nop # sched: [1:0.50]
3910 ; ATOM-NEXT:    nop # sched: [1:0.50]
3911 ; ATOM-NEXT:    nop # sched: [1:0.50]
3912 ; ATOM-NEXT:    retq # sched: [79:39.50]
3914 ; SLM-LABEL: test_packssdw:
3915 ; SLM:       # BB#0:
3916 ; SLM-NEXT:    packssdw %xmm1, %xmm0 # sched: [1:1.00]
3917 ; SLM-NEXT:    packssdw (%rdi), %xmm0 # sched: [4:1.00]
3918 ; SLM-NEXT:    retq # sched: [4:1.00]
3920 ; SANDY-LABEL: test_packssdw:
3921 ; SANDY:       # BB#0:
3922 ; SANDY-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3923 ; SANDY-NEXT:    vpackssdw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3924 ; SANDY-NEXT:    retq # sched: [1:1.00]
3926 ; HASWELL-LABEL: test_packssdw:
3927 ; HASWELL:       # BB#0:
3928 ; HASWELL-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
3929 ; HASWELL-NEXT:    vpackssdw (%rdi), %xmm0, %xmm0 # sched: [1:1.00]
3930 ; HASWELL-NEXT:    retq # sched: [2:1.00]
3932 ; BROADWELL-LABEL: test_packssdw:
3933 ; BROADWELL:       # BB#0:
3934 ; BROADWELL-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
3935 ; BROADWELL-NEXT:    vpackssdw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
3936 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
3938 ; SKYLAKE-LABEL: test_packssdw:
3939 ; SKYLAKE:       # BB#0:
3940 ; SKYLAKE-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
3941 ; SKYLAKE-NEXT:    vpackssdw (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
3942 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
3944 ; SKX-LABEL: test_packssdw:
3945 ; SKX:       # BB#0:
3946 ; SKX-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
3947 ; SKX-NEXT:    vpackssdw (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
3948 ; SKX-NEXT:    retq # sched: [7:1.00]
3950 ; BTVER2-LABEL: test_packssdw:
3951 ; BTVER2:       # BB#0:
3952 ; BTVER2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3953 ; BTVER2-NEXT:    vpackssdw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
3954 ; BTVER2-NEXT:    retq # sched: [4:1.00]
3956 ; ZNVER1-LABEL: test_packssdw:
3957 ; ZNVER1:       # BB#0:
3958 ; ZNVER1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3959 ; ZNVER1-NEXT:    vpackssdw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
3960 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
3961   %1 = call <8 x i16> @llvm.x86.sse2.packssdw.128(<4 x i32> %a0, <4 x i32> %a1)
3962   %2 = bitcast <8 x i16> %1 to <4 x i32>
3963   %3 = load <4 x i32>, <4 x i32> *%a2, align 16
3964   %4 = call <8 x i16> @llvm.x86.sse2.packssdw.128(<4 x i32> %2, <4 x i32> %3)
3965   ret <8 x i16> %4
3967 declare <8 x i16> @llvm.x86.sse2.packssdw.128(<4 x i32>, <4 x i32>) nounwind readnone
3969 define <16 x i8> @test_packsswb(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
3970 ; GENERIC-LABEL: test_packsswb:
3971 ; GENERIC:       # BB#0:
3972 ; GENERIC-NEXT:    packsswb %xmm1, %xmm0 # sched: [1:0.50]
3973 ; GENERIC-NEXT:    packsswb (%rdi), %xmm0 # sched: [7:0.50]
3974 ; GENERIC-NEXT:    retq # sched: [1:1.00]
3976 ; ATOM-LABEL: test_packsswb:
3977 ; ATOM:       # BB#0:
3978 ; ATOM-NEXT:    packsswb %xmm1, %xmm0 # sched: [1:1.00]
3979 ; ATOM-NEXT:    packsswb (%rdi), %xmm0 # sched: [1:1.00]
3980 ; ATOM-NEXT:    nop # sched: [1:0.50]
3981 ; ATOM-NEXT:    nop # sched: [1:0.50]
3982 ; ATOM-NEXT:    nop # sched: [1:0.50]
3983 ; ATOM-NEXT:    nop # sched: [1:0.50]
3984 ; ATOM-NEXT:    retq # sched: [79:39.50]
3986 ; SLM-LABEL: test_packsswb:
3987 ; SLM:       # BB#0:
3988 ; SLM-NEXT:    packsswb %xmm1, %xmm0 # sched: [1:1.00]
3989 ; SLM-NEXT:    packsswb (%rdi), %xmm0 # sched: [4:1.00]
3990 ; SLM-NEXT:    retq # sched: [4:1.00]
3992 ; SANDY-LABEL: test_packsswb:
3993 ; SANDY:       # BB#0:
3994 ; SANDY-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3995 ; SANDY-NEXT:    vpacksswb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3996 ; SANDY-NEXT:    retq # sched: [1:1.00]
3998 ; HASWELL-LABEL: test_packsswb:
3999 ; HASWELL:       # BB#0:
4000 ; HASWELL-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
4001 ; HASWELL-NEXT:    vpacksswb (%rdi), %xmm0, %xmm0 # sched: [1:1.00]
4002 ; HASWELL-NEXT:    retq # sched: [2:1.00]
4004 ; BROADWELL-LABEL: test_packsswb:
4005 ; BROADWELL:       # BB#0:
4006 ; BROADWELL-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
4007 ; BROADWELL-NEXT:    vpacksswb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4008 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4010 ; SKYLAKE-LABEL: test_packsswb:
4011 ; SKYLAKE:       # BB#0:
4012 ; SKYLAKE-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
4013 ; SKYLAKE-NEXT:    vpacksswb (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
4014 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4016 ; SKX-LABEL: test_packsswb:
4017 ; SKX:       # BB#0:
4018 ; SKX-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
4019 ; SKX-NEXT:    vpacksswb (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
4020 ; SKX-NEXT:    retq # sched: [7:1.00]
4022 ; BTVER2-LABEL: test_packsswb:
4023 ; BTVER2:       # BB#0:
4024 ; BTVER2-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4025 ; BTVER2-NEXT:    vpacksswb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4026 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4028 ; ZNVER1-LABEL: test_packsswb:
4029 ; ZNVER1:       # BB#0:
4030 ; ZNVER1-NEXT:    vpacksswb %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4031 ; ZNVER1-NEXT:    vpacksswb (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
4032 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4033   %1 = call <16 x i8> @llvm.x86.sse2.packsswb.128(<8 x i16> %a0, <8 x i16> %a1)
4034   %2 = bitcast <16 x i8> %1 to <8 x i16>
4035   %3 = load <8 x i16>, <8 x i16> *%a2, align 16
4036   %4 = call <16 x i8> @llvm.x86.sse2.packsswb.128(<8 x i16> %2, <8 x i16> %3)
4037   ret <16 x i8> %4
4039 declare <16 x i8> @llvm.x86.sse2.packsswb.128(<8 x i16>, <8 x i16>) nounwind readnone
4041 define <16 x i8> @test_packuswb(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
4042 ; GENERIC-LABEL: test_packuswb:
4043 ; GENERIC:       # BB#0:
4044 ; GENERIC-NEXT:    packuswb %xmm1, %xmm0 # sched: [1:0.50]
4045 ; GENERIC-NEXT:    packuswb (%rdi), %xmm0 # sched: [7:0.50]
4046 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4048 ; ATOM-LABEL: test_packuswb:
4049 ; ATOM:       # BB#0:
4050 ; ATOM-NEXT:    packuswb %xmm1, %xmm0 # sched: [1:1.00]
4051 ; ATOM-NEXT:    packuswb (%rdi), %xmm0 # sched: [1:1.00]
4052 ; ATOM-NEXT:    nop # sched: [1:0.50]
4053 ; ATOM-NEXT:    nop # sched: [1:0.50]
4054 ; ATOM-NEXT:    nop # sched: [1:0.50]
4055 ; ATOM-NEXT:    nop # sched: [1:0.50]
4056 ; ATOM-NEXT:    retq # sched: [79:39.50]
4058 ; SLM-LABEL: test_packuswb:
4059 ; SLM:       # BB#0:
4060 ; SLM-NEXT:    packuswb %xmm1, %xmm0 # sched: [1:1.00]
4061 ; SLM-NEXT:    packuswb (%rdi), %xmm0 # sched: [4:1.00]
4062 ; SLM-NEXT:    retq # sched: [4:1.00]
4064 ; SANDY-LABEL: test_packuswb:
4065 ; SANDY:       # BB#0:
4066 ; SANDY-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4067 ; SANDY-NEXT:    vpackuswb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4068 ; SANDY-NEXT:    retq # sched: [1:1.00]
4070 ; HASWELL-LABEL: test_packuswb:
4071 ; HASWELL:       # BB#0:
4072 ; HASWELL-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
4073 ; HASWELL-NEXT:    vpackuswb (%rdi), %xmm0, %xmm0 # sched: [1:1.00]
4074 ; HASWELL-NEXT:    retq # sched: [2:1.00]
4076 ; BROADWELL-LABEL: test_packuswb:
4077 ; BROADWELL:       # BB#0:
4078 ; BROADWELL-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
4079 ; BROADWELL-NEXT:    vpackuswb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4080 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4082 ; SKYLAKE-LABEL: test_packuswb:
4083 ; SKYLAKE:       # BB#0:
4084 ; SKYLAKE-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
4085 ; SKYLAKE-NEXT:    vpackuswb (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
4086 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4088 ; SKX-LABEL: test_packuswb:
4089 ; SKX:       # BB#0:
4090 ; SKX-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
4091 ; SKX-NEXT:    vpackuswb (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
4092 ; SKX-NEXT:    retq # sched: [7:1.00]
4094 ; BTVER2-LABEL: test_packuswb:
4095 ; BTVER2:       # BB#0:
4096 ; BTVER2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4097 ; BTVER2-NEXT:    vpackuswb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4098 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4100 ; ZNVER1-LABEL: test_packuswb:
4101 ; ZNVER1:       # BB#0:
4102 ; ZNVER1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4103 ; ZNVER1-NEXT:    vpackuswb (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
4104 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4105   %1 = call <16 x i8> @llvm.x86.sse2.packuswb.128(<8 x i16> %a0, <8 x i16> %a1)
4106   %2 = bitcast <16 x i8> %1 to <8 x i16>
4107   %3 = load <8 x i16>, <8 x i16> *%a2, align 16
4108   %4 = call <16 x i8> @llvm.x86.sse2.packuswb.128(<8 x i16> %2, <8 x i16> %3)
4109   ret <16 x i8> %4
4111 declare <16 x i8> @llvm.x86.sse2.packuswb.128(<8 x i16>, <8 x i16>) nounwind readnone
4113 define <16 x i8> @test_paddb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
4114 ; GENERIC-LABEL: test_paddb:
4115 ; GENERIC:       # BB#0:
4116 ; GENERIC-NEXT:    paddb %xmm1, %xmm0 # sched: [1:0.50]
4117 ; GENERIC-NEXT:    paddb (%rdi), %xmm0 # sched: [7:0.50]
4118 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4120 ; ATOM-LABEL: test_paddb:
4121 ; ATOM:       # BB#0:
4122 ; ATOM-NEXT:    paddb %xmm1, %xmm0 # sched: [1:0.50]
4123 ; ATOM-NEXT:    paddb (%rdi), %xmm0 # sched: [1:1.00]
4124 ; ATOM-NEXT:    nop # sched: [1:0.50]
4125 ; ATOM-NEXT:    nop # sched: [1:0.50]
4126 ; ATOM-NEXT:    nop # sched: [1:0.50]
4127 ; ATOM-NEXT:    nop # sched: [1:0.50]
4128 ; ATOM-NEXT:    retq # sched: [79:39.50]
4130 ; SLM-LABEL: test_paddb:
4131 ; SLM:       # BB#0:
4132 ; SLM-NEXT:    paddb %xmm1, %xmm0 # sched: [1:0.50]
4133 ; SLM-NEXT:    paddb (%rdi), %xmm0 # sched: [4:1.00]
4134 ; SLM-NEXT:    retq # sched: [4:1.00]
4136 ; SANDY-LABEL: test_paddb:
4137 ; SANDY:       # BB#0:
4138 ; SANDY-NEXT:    vpaddb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4139 ; SANDY-NEXT:    vpaddb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4140 ; SANDY-NEXT:    retq # sched: [1:1.00]
4142 ; HASWELL-LABEL: test_paddb:
4143 ; HASWELL:       # BB#0:
4144 ; HASWELL-NEXT:    vpaddb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4145 ; HASWELL-NEXT:    vpaddb (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
4146 ; HASWELL-NEXT:    retq # sched: [2:1.00]
4148 ; BROADWELL-LABEL: test_paddb:
4149 ; BROADWELL:       # BB#0:
4150 ; BROADWELL-NEXT:    vpaddb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4151 ; BROADWELL-NEXT:    vpaddb (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
4152 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4154 ; SKYLAKE-LABEL: test_paddb:
4155 ; SKYLAKE:       # BB#0:
4156 ; SKYLAKE-NEXT:    vpaddb %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4157 ; SKYLAKE-NEXT:    vpaddb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4158 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4160 ; SKX-LABEL: test_paddb:
4161 ; SKX:       # BB#0:
4162 ; SKX-NEXT:    vpaddb %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4163 ; SKX-NEXT:    vpaddb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4164 ; SKX-NEXT:    retq # sched: [7:1.00]
4166 ; BTVER2-LABEL: test_paddb:
4167 ; BTVER2:       # BB#0:
4168 ; BTVER2-NEXT:    vpaddb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4169 ; BTVER2-NEXT:    vpaddb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4170 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4172 ; ZNVER1-LABEL: test_paddb:
4173 ; ZNVER1:       # BB#0:
4174 ; ZNVER1-NEXT:    vpaddb %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4175 ; ZNVER1-NEXT:    vpaddb (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
4176 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4177   %1 = add <16 x i8> %a0, %a1
4178   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
4179   %3 = add <16 x i8> %1, %2
4180   ret <16 x i8> %3
4183 define <4 x i32> @test_paddd(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
4184 ; GENERIC-LABEL: test_paddd:
4185 ; GENERIC:       # BB#0:
4186 ; GENERIC-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
4187 ; GENERIC-NEXT:    paddd (%rdi), %xmm0 # sched: [7:0.50]
4188 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4190 ; ATOM-LABEL: test_paddd:
4191 ; ATOM:       # BB#0:
4192 ; ATOM-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
4193 ; ATOM-NEXT:    paddd (%rdi), %xmm0 # sched: [1:1.00]
4194 ; ATOM-NEXT:    nop # sched: [1:0.50]
4195 ; ATOM-NEXT:    nop # sched: [1:0.50]
4196 ; ATOM-NEXT:    nop # sched: [1:0.50]
4197 ; ATOM-NEXT:    nop # sched: [1:0.50]
4198 ; ATOM-NEXT:    retq # sched: [79:39.50]
4200 ; SLM-LABEL: test_paddd:
4201 ; SLM:       # BB#0:
4202 ; SLM-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
4203 ; SLM-NEXT:    paddd (%rdi), %xmm0 # sched: [4:1.00]
4204 ; SLM-NEXT:    retq # sched: [4:1.00]
4206 ; SANDY-LABEL: test_paddd:
4207 ; SANDY:       # BB#0:
4208 ; SANDY-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4209 ; SANDY-NEXT:    vpaddd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4210 ; SANDY-NEXT:    retq # sched: [1:1.00]
4212 ; HASWELL-LABEL: test_paddd:
4213 ; HASWELL:       # BB#0:
4214 ; HASWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4215 ; HASWELL-NEXT:    vpaddd (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
4216 ; HASWELL-NEXT:    retq # sched: [2:1.00]
4218 ; BROADWELL-LABEL: test_paddd:
4219 ; BROADWELL:       # BB#0:
4220 ; BROADWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4221 ; BROADWELL-NEXT:    vpaddd (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
4222 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4224 ; SKYLAKE-LABEL: test_paddd:
4225 ; SKYLAKE:       # BB#0:
4226 ; SKYLAKE-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4227 ; SKYLAKE-NEXT:    vpaddd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4228 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4230 ; SKX-LABEL: test_paddd:
4231 ; SKX:       # BB#0:
4232 ; SKX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4233 ; SKX-NEXT:    vpaddd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4234 ; SKX-NEXT:    retq # sched: [7:1.00]
4236 ; BTVER2-LABEL: test_paddd:
4237 ; BTVER2:       # BB#0:
4238 ; BTVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4239 ; BTVER2-NEXT:    vpaddd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4240 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4242 ; ZNVER1-LABEL: test_paddd:
4243 ; ZNVER1:       # BB#0:
4244 ; ZNVER1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4245 ; ZNVER1-NEXT:    vpaddd (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
4246 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4247   %1 = add <4 x i32> %a0, %a1
4248   %2 = load <4 x i32>, <4 x i32> *%a2, align 16
4249   %3 = add <4 x i32> %1, %2
4250   ret <4 x i32> %3
4253 define <2 x i64> @test_paddq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
4254 ; GENERIC-LABEL: test_paddq:
4255 ; GENERIC:       # BB#0:
4256 ; GENERIC-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
4257 ; GENERIC-NEXT:    paddq (%rdi), %xmm0 # sched: [7:0.50]
4258 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4260 ; ATOM-LABEL: test_paddq:
4261 ; ATOM:       # BB#0:
4262 ; ATOM-NEXT:    paddq %xmm1, %xmm0 # sched: [2:1.00]
4263 ; ATOM-NEXT:    paddq (%rdi), %xmm0 # sched: [3:1.50]
4264 ; ATOM-NEXT:    retq # sched: [79:39.50]
4266 ; SLM-LABEL: test_paddq:
4267 ; SLM:       # BB#0:
4268 ; SLM-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
4269 ; SLM-NEXT:    paddq (%rdi), %xmm0 # sched: [4:1.00]
4270 ; SLM-NEXT:    retq # sched: [4:1.00]
4272 ; SANDY-LABEL: test_paddq:
4273 ; SANDY:       # BB#0:
4274 ; SANDY-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4275 ; SANDY-NEXT:    vpaddq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4276 ; SANDY-NEXT:    retq # sched: [1:1.00]
4278 ; HASWELL-LABEL: test_paddq:
4279 ; HASWELL:       # BB#0:
4280 ; HASWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4281 ; HASWELL-NEXT:    vpaddq (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
4282 ; HASWELL-NEXT:    retq # sched: [2:1.00]
4284 ; BROADWELL-LABEL: test_paddq:
4285 ; BROADWELL:       # BB#0:
4286 ; BROADWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4287 ; BROADWELL-NEXT:    vpaddq (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
4288 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4290 ; SKYLAKE-LABEL: test_paddq:
4291 ; SKYLAKE:       # BB#0:
4292 ; SKYLAKE-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4293 ; SKYLAKE-NEXT:    vpaddq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4294 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4296 ; SKX-LABEL: test_paddq:
4297 ; SKX:       # BB#0:
4298 ; SKX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4299 ; SKX-NEXT:    vpaddq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4300 ; SKX-NEXT:    retq # sched: [7:1.00]
4302 ; BTVER2-LABEL: test_paddq:
4303 ; BTVER2:       # BB#0:
4304 ; BTVER2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4305 ; BTVER2-NEXT:    vpaddq (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4306 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4308 ; ZNVER1-LABEL: test_paddq:
4309 ; ZNVER1:       # BB#0:
4310 ; ZNVER1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4311 ; ZNVER1-NEXT:    vpaddq (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
4312 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4313   %1 = add <2 x i64> %a0, %a1
4314   %2 = load <2 x i64>, <2 x i64> *%a2, align 16
4315   %3 = add <2 x i64> %1, %2
4316   ret <2 x i64> %3
4319 define <16 x i8> @test_paddsb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
4320 ; GENERIC-LABEL: test_paddsb:
4321 ; GENERIC:       # BB#0:
4322 ; GENERIC-NEXT:    paddsb %xmm1, %xmm0 # sched: [1:0.50]
4323 ; GENERIC-NEXT:    paddsb (%rdi), %xmm0 # sched: [7:0.50]
4324 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4326 ; ATOM-LABEL: test_paddsb:
4327 ; ATOM:       # BB#0:
4328 ; ATOM-NEXT:    paddsb %xmm1, %xmm0 # sched: [1:0.50]
4329 ; ATOM-NEXT:    paddsb (%rdi), %xmm0 # sched: [1:1.00]
4330 ; ATOM-NEXT:    nop # sched: [1:0.50]
4331 ; ATOM-NEXT:    nop # sched: [1:0.50]
4332 ; ATOM-NEXT:    nop # sched: [1:0.50]
4333 ; ATOM-NEXT:    nop # sched: [1:0.50]
4334 ; ATOM-NEXT:    retq # sched: [79:39.50]
4336 ; SLM-LABEL: test_paddsb:
4337 ; SLM:       # BB#0:
4338 ; SLM-NEXT:    paddsb %xmm1, %xmm0 # sched: [1:0.50]
4339 ; SLM-NEXT:    paddsb (%rdi), %xmm0 # sched: [4:1.00]
4340 ; SLM-NEXT:    retq # sched: [4:1.00]
4342 ; SANDY-LABEL: test_paddsb:
4343 ; SANDY:       # BB#0:
4344 ; SANDY-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4345 ; SANDY-NEXT:    vpaddsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4346 ; SANDY-NEXT:    retq # sched: [1:1.00]
4348 ; HASWELL-LABEL: test_paddsb:
4349 ; HASWELL:       # BB#0:
4350 ; HASWELL-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4351 ; HASWELL-NEXT:    vpaddsb (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
4352 ; HASWELL-NEXT:    retq # sched: [2:1.00]
4354 ; BROADWELL-LABEL: test_paddsb:
4355 ; BROADWELL:       # BB#0:
4356 ; BROADWELL-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4357 ; BROADWELL-NEXT:    vpaddsb (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
4358 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4360 ; SKYLAKE-LABEL: test_paddsb:
4361 ; SKYLAKE:       # BB#0:
4362 ; SKYLAKE-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4363 ; SKYLAKE-NEXT:    vpaddsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4364 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4366 ; SKX-LABEL: test_paddsb:
4367 ; SKX:       # BB#0:
4368 ; SKX-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4369 ; SKX-NEXT:    vpaddsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4370 ; SKX-NEXT:    retq # sched: [7:1.00]
4372 ; BTVER2-LABEL: test_paddsb:
4373 ; BTVER2:       # BB#0:
4374 ; BTVER2-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4375 ; BTVER2-NEXT:    vpaddsb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4376 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4378 ; ZNVER1-LABEL: test_paddsb:
4379 ; ZNVER1:       # BB#0:
4380 ; ZNVER1-NEXT:    vpaddsb %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4381 ; ZNVER1-NEXT:    vpaddsb (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
4382 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4383   %1 = call <16 x i8> @llvm.x86.sse2.padds.b(<16 x i8> %a0, <16 x i8> %a1)
4384   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
4385   %3 = call <16 x i8> @llvm.x86.sse2.padds.b(<16 x i8> %1, <16 x i8> %2)
4386   ret <16 x i8> %3
4388 declare <16 x i8> @llvm.x86.sse2.padds.b(<16 x i8>, <16 x i8>) nounwind readnone
4390 define <8 x i16> @test_paddsw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
4391 ; GENERIC-LABEL: test_paddsw:
4392 ; GENERIC:       # BB#0:
4393 ; GENERIC-NEXT:    paddsw %xmm1, %xmm0 # sched: [1:0.50]
4394 ; GENERIC-NEXT:    paddsw (%rdi), %xmm0 # sched: [7:0.50]
4395 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4397 ; ATOM-LABEL: test_paddsw:
4398 ; ATOM:       # BB#0:
4399 ; ATOM-NEXT:    paddsw %xmm1, %xmm0 # sched: [1:0.50]
4400 ; ATOM-NEXT:    paddsw (%rdi), %xmm0 # sched: [1:1.00]
4401 ; ATOM-NEXT:    nop # sched: [1:0.50]
4402 ; ATOM-NEXT:    nop # sched: [1:0.50]
4403 ; ATOM-NEXT:    nop # sched: [1:0.50]
4404 ; ATOM-NEXT:    nop # sched: [1:0.50]
4405 ; ATOM-NEXT:    retq # sched: [79:39.50]
4407 ; SLM-LABEL: test_paddsw:
4408 ; SLM:       # BB#0:
4409 ; SLM-NEXT:    paddsw %xmm1, %xmm0 # sched: [1:0.50]
4410 ; SLM-NEXT:    paddsw (%rdi), %xmm0 # sched: [4:1.00]
4411 ; SLM-NEXT:    retq # sched: [4:1.00]
4413 ; SANDY-LABEL: test_paddsw:
4414 ; SANDY:       # BB#0:
4415 ; SANDY-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4416 ; SANDY-NEXT:    vpaddsw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4417 ; SANDY-NEXT:    retq # sched: [1:1.00]
4419 ; HASWELL-LABEL: test_paddsw:
4420 ; HASWELL:       # BB#0:
4421 ; HASWELL-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4422 ; HASWELL-NEXT:    vpaddsw (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
4423 ; HASWELL-NEXT:    retq # sched: [2:1.00]
4425 ; BROADWELL-LABEL: test_paddsw:
4426 ; BROADWELL:       # BB#0:
4427 ; BROADWELL-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4428 ; BROADWELL-NEXT:    vpaddsw (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
4429 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4431 ; SKYLAKE-LABEL: test_paddsw:
4432 ; SKYLAKE:       # BB#0:
4433 ; SKYLAKE-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4434 ; SKYLAKE-NEXT:    vpaddsw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4435 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4437 ; SKX-LABEL: test_paddsw:
4438 ; SKX:       # BB#0:
4439 ; SKX-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4440 ; SKX-NEXT:    vpaddsw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4441 ; SKX-NEXT:    retq # sched: [7:1.00]
4443 ; BTVER2-LABEL: test_paddsw:
4444 ; BTVER2:       # BB#0:
4445 ; BTVER2-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4446 ; BTVER2-NEXT:    vpaddsw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4447 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4449 ; ZNVER1-LABEL: test_paddsw:
4450 ; ZNVER1:       # BB#0:
4451 ; ZNVER1-NEXT:    vpaddsw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4452 ; ZNVER1-NEXT:    vpaddsw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
4453 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4454   %1 = call <8 x i16> @llvm.x86.sse2.padds.w(<8 x i16> %a0, <8 x i16> %a1)
4455   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
4456   %3 = call <8 x i16> @llvm.x86.sse2.padds.w(<8 x i16> %1, <8 x i16> %2)
4457   ret <8 x i16> %3
4459 declare <8 x i16> @llvm.x86.sse2.padds.w(<8 x i16>, <8 x i16>) nounwind readnone
4461 define <16 x i8> @test_paddusb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
4462 ; GENERIC-LABEL: test_paddusb:
4463 ; GENERIC:       # BB#0:
4464 ; GENERIC-NEXT:    paddusb %xmm1, %xmm0 # sched: [1:0.50]
4465 ; GENERIC-NEXT:    paddusb (%rdi), %xmm0 # sched: [7:0.50]
4466 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4468 ; ATOM-LABEL: test_paddusb:
4469 ; ATOM:       # BB#0:
4470 ; ATOM-NEXT:    paddusb %xmm1, %xmm0 # sched: [1:0.50]
4471 ; ATOM-NEXT:    paddusb (%rdi), %xmm0 # sched: [1:1.00]
4472 ; ATOM-NEXT:    nop # sched: [1:0.50]
4473 ; ATOM-NEXT:    nop # sched: [1:0.50]
4474 ; ATOM-NEXT:    nop # sched: [1:0.50]
4475 ; ATOM-NEXT:    nop # sched: [1:0.50]
4476 ; ATOM-NEXT:    retq # sched: [79:39.50]
4478 ; SLM-LABEL: test_paddusb:
4479 ; SLM:       # BB#0:
4480 ; SLM-NEXT:    paddusb %xmm1, %xmm0 # sched: [1:0.50]
4481 ; SLM-NEXT:    paddusb (%rdi), %xmm0 # sched: [4:1.00]
4482 ; SLM-NEXT:    retq # sched: [4:1.00]
4484 ; SANDY-LABEL: test_paddusb:
4485 ; SANDY:       # BB#0:
4486 ; SANDY-NEXT:    vpaddusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4487 ; SANDY-NEXT:    vpaddusb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4488 ; SANDY-NEXT:    retq # sched: [1:1.00]
4490 ; HASWELL-LABEL: test_paddusb:
4491 ; HASWELL:       # BB#0:
4492 ; HASWELL-NEXT:    vpaddusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4493 ; HASWELL-NEXT:    vpaddusb (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
4494 ; HASWELL-NEXT:    retq # sched: [2:1.00]
4496 ; BROADWELL-LABEL: test_paddusb:
4497 ; BROADWELL:       # BB#0:
4498 ; BROADWELL-NEXT:    vpaddusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4499 ; BROADWELL-NEXT:    vpaddusb (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
4500 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4502 ; SKYLAKE-LABEL: test_paddusb:
4503 ; SKYLAKE:       # BB#0:
4504 ; SKYLAKE-NEXT:    vpaddusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4505 ; SKYLAKE-NEXT:    vpaddusb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4506 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4508 ; SKX-LABEL: test_paddusb:
4509 ; SKX:       # BB#0:
4510 ; SKX-NEXT:    vpaddusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4511 ; SKX-NEXT:    vpaddusb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4512 ; SKX-NEXT:    retq # sched: [7:1.00]
4514 ; BTVER2-LABEL: test_paddusb:
4515 ; BTVER2:       # BB#0:
4516 ; BTVER2-NEXT:    vpaddusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4517 ; BTVER2-NEXT:    vpaddusb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4518 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4520 ; ZNVER1-LABEL: test_paddusb:
4521 ; ZNVER1:       # BB#0:
4522 ; ZNVER1-NEXT:    vpaddusb %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4523 ; ZNVER1-NEXT:    vpaddusb (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
4524 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4525   %1 = call <16 x i8> @llvm.x86.sse2.paddus.b(<16 x i8> %a0, <16 x i8> %a1)
4526   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
4527   %3 = call <16 x i8> @llvm.x86.sse2.paddus.b(<16 x i8> %1, <16 x i8> %2)
4528   ret <16 x i8> %3
4530 declare <16 x i8> @llvm.x86.sse2.paddus.b(<16 x i8>, <16 x i8>) nounwind readnone
4532 define <8 x i16> @test_paddusw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
4533 ; GENERIC-LABEL: test_paddusw:
4534 ; GENERIC:       # BB#0:
4535 ; GENERIC-NEXT:    paddusw %xmm1, %xmm0 # sched: [1:0.50]
4536 ; GENERIC-NEXT:    paddusw (%rdi), %xmm0 # sched: [7:0.50]
4537 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4539 ; ATOM-LABEL: test_paddusw:
4540 ; ATOM:       # BB#0:
4541 ; ATOM-NEXT:    paddusw %xmm1, %xmm0 # sched: [1:0.50]
4542 ; ATOM-NEXT:    paddusw (%rdi), %xmm0 # sched: [1:1.00]
4543 ; ATOM-NEXT:    nop # sched: [1:0.50]
4544 ; ATOM-NEXT:    nop # sched: [1:0.50]
4545 ; ATOM-NEXT:    nop # sched: [1:0.50]
4546 ; ATOM-NEXT:    nop # sched: [1:0.50]
4547 ; ATOM-NEXT:    retq # sched: [79:39.50]
4549 ; SLM-LABEL: test_paddusw:
4550 ; SLM:       # BB#0:
4551 ; SLM-NEXT:    paddusw %xmm1, %xmm0 # sched: [1:0.50]
4552 ; SLM-NEXT:    paddusw (%rdi), %xmm0 # sched: [4:1.00]
4553 ; SLM-NEXT:    retq # sched: [4:1.00]
4555 ; SANDY-LABEL: test_paddusw:
4556 ; SANDY:       # BB#0:
4557 ; SANDY-NEXT:    vpaddusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4558 ; SANDY-NEXT:    vpaddusw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4559 ; SANDY-NEXT:    retq # sched: [1:1.00]
4561 ; HASWELL-LABEL: test_paddusw:
4562 ; HASWELL:       # BB#0:
4563 ; HASWELL-NEXT:    vpaddusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4564 ; HASWELL-NEXT:    vpaddusw (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
4565 ; HASWELL-NEXT:    retq # sched: [2:1.00]
4567 ; BROADWELL-LABEL: test_paddusw:
4568 ; BROADWELL:       # BB#0:
4569 ; BROADWELL-NEXT:    vpaddusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4570 ; BROADWELL-NEXT:    vpaddusw (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
4571 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4573 ; SKYLAKE-LABEL: test_paddusw:
4574 ; SKYLAKE:       # BB#0:
4575 ; SKYLAKE-NEXT:    vpaddusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4576 ; SKYLAKE-NEXT:    vpaddusw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4577 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4579 ; SKX-LABEL: test_paddusw:
4580 ; SKX:       # BB#0:
4581 ; SKX-NEXT:    vpaddusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4582 ; SKX-NEXT:    vpaddusw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4583 ; SKX-NEXT:    retq # sched: [7:1.00]
4585 ; BTVER2-LABEL: test_paddusw:
4586 ; BTVER2:       # BB#0:
4587 ; BTVER2-NEXT:    vpaddusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4588 ; BTVER2-NEXT:    vpaddusw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4589 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4591 ; ZNVER1-LABEL: test_paddusw:
4592 ; ZNVER1:       # BB#0:
4593 ; ZNVER1-NEXT:    vpaddusw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4594 ; ZNVER1-NEXT:    vpaddusw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
4595 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4596   %1 = call <8 x i16> @llvm.x86.sse2.paddus.w(<8 x i16> %a0, <8 x i16> %a1)
4597   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
4598   %3 = call <8 x i16> @llvm.x86.sse2.paddus.w(<8 x i16> %1, <8 x i16> %2)
4599   ret <8 x i16> %3
4601 declare <8 x i16> @llvm.x86.sse2.paddus.w(<8 x i16>, <8 x i16>) nounwind readnone
4603 define <8 x i16> @test_paddw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
4604 ; GENERIC-LABEL: test_paddw:
4605 ; GENERIC:       # BB#0:
4606 ; GENERIC-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
4607 ; GENERIC-NEXT:    paddw (%rdi), %xmm0 # sched: [7:0.50]
4608 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4610 ; ATOM-LABEL: test_paddw:
4611 ; ATOM:       # BB#0:
4612 ; ATOM-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
4613 ; ATOM-NEXT:    paddw (%rdi), %xmm0 # sched: [1:1.00]
4614 ; ATOM-NEXT:    nop # sched: [1:0.50]
4615 ; ATOM-NEXT:    nop # sched: [1:0.50]
4616 ; ATOM-NEXT:    nop # sched: [1:0.50]
4617 ; ATOM-NEXT:    nop # sched: [1:0.50]
4618 ; ATOM-NEXT:    retq # sched: [79:39.50]
4620 ; SLM-LABEL: test_paddw:
4621 ; SLM:       # BB#0:
4622 ; SLM-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
4623 ; SLM-NEXT:    paddw (%rdi), %xmm0 # sched: [4:1.00]
4624 ; SLM-NEXT:    retq # sched: [4:1.00]
4626 ; SANDY-LABEL: test_paddw:
4627 ; SANDY:       # BB#0:
4628 ; SANDY-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4629 ; SANDY-NEXT:    vpaddw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4630 ; SANDY-NEXT:    retq # sched: [1:1.00]
4632 ; HASWELL-LABEL: test_paddw:
4633 ; HASWELL:       # BB#0:
4634 ; HASWELL-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4635 ; HASWELL-NEXT:    vpaddw (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
4636 ; HASWELL-NEXT:    retq # sched: [2:1.00]
4638 ; BROADWELL-LABEL: test_paddw:
4639 ; BROADWELL:       # BB#0:
4640 ; BROADWELL-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4641 ; BROADWELL-NEXT:    vpaddw (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
4642 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4644 ; SKYLAKE-LABEL: test_paddw:
4645 ; SKYLAKE:       # BB#0:
4646 ; SKYLAKE-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4647 ; SKYLAKE-NEXT:    vpaddw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4648 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4650 ; SKX-LABEL: test_paddw:
4651 ; SKX:       # BB#0:
4652 ; SKX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4653 ; SKX-NEXT:    vpaddw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4654 ; SKX-NEXT:    retq # sched: [7:1.00]
4656 ; BTVER2-LABEL: test_paddw:
4657 ; BTVER2:       # BB#0:
4658 ; BTVER2-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4659 ; BTVER2-NEXT:    vpaddw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4660 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4662 ; ZNVER1-LABEL: test_paddw:
4663 ; ZNVER1:       # BB#0:
4664 ; ZNVER1-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4665 ; ZNVER1-NEXT:    vpaddw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
4666 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4667   %1 = add <8 x i16> %a0, %a1
4668   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
4669   %3 = add <8 x i16> %1, %2
4670   ret <8 x i16> %3
4673 define <2 x i64> @test_pand(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
4674 ; GENERIC-LABEL: test_pand:
4675 ; GENERIC:       # BB#0:
4676 ; GENERIC-NEXT:    pand %xmm1, %xmm0 # sched: [1:0.33]
4677 ; GENERIC-NEXT:    pand (%rdi), %xmm0 # sched: [7:0.50]
4678 ; GENERIC-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
4679 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4681 ; ATOM-LABEL: test_pand:
4682 ; ATOM:       # BB#0:
4683 ; ATOM-NEXT:    pand %xmm1, %xmm0 # sched: [1:0.50]
4684 ; ATOM-NEXT:    pand (%rdi), %xmm0 # sched: [1:1.00]
4685 ; ATOM-NEXT:    paddq %xmm1, %xmm0 # sched: [2:1.00]
4686 ; ATOM-NEXT:    retq # sched: [79:39.50]
4688 ; SLM-LABEL: test_pand:
4689 ; SLM:       # BB#0:
4690 ; SLM-NEXT:    pand %xmm1, %xmm0 # sched: [1:0.50]
4691 ; SLM-NEXT:    pand (%rdi), %xmm0 # sched: [4:1.00]
4692 ; SLM-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
4693 ; SLM-NEXT:    retq # sched: [4:1.00]
4695 ; SANDY-LABEL: test_pand:
4696 ; SANDY:       # BB#0:
4697 ; SANDY-NEXT:    vpand %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4698 ; SANDY-NEXT:    vpand (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4699 ; SANDY-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4700 ; SANDY-NEXT:    retq # sched: [1:1.00]
4702 ; HASWELL-LABEL: test_pand:
4703 ; HASWELL:       # BB#0:
4704 ; HASWELL-NEXT:    vpand %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4705 ; HASWELL-NEXT:    vpand (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
4706 ; HASWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4707 ; HASWELL-NEXT:    retq # sched: [2:1.00]
4709 ; BROADWELL-LABEL: test_pand:
4710 ; BROADWELL:       # BB#0:
4711 ; BROADWELL-NEXT:    vpand %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4712 ; BROADWELL-NEXT:    vpand (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
4713 ; BROADWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4714 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4716 ; SKYLAKE-LABEL: test_pand:
4717 ; SKYLAKE:       # BB#0:
4718 ; SKYLAKE-NEXT:    vpand %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4719 ; SKYLAKE-NEXT:    vpand (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4720 ; SKYLAKE-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4721 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4723 ; SKX-LABEL: test_pand:
4724 ; SKX:       # BB#0:
4725 ; SKX-NEXT:    vpand %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4726 ; SKX-NEXT:    vpand (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4727 ; SKX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4728 ; SKX-NEXT:    retq # sched: [7:1.00]
4730 ; BTVER2-LABEL: test_pand:
4731 ; BTVER2:       # BB#0:
4732 ; BTVER2-NEXT:    vpand %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4733 ; BTVER2-NEXT:    vpand (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4734 ; BTVER2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4735 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4737 ; ZNVER1-LABEL: test_pand:
4738 ; ZNVER1:       # BB#0:
4739 ; ZNVER1-NEXT:    vpand %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4740 ; ZNVER1-NEXT:    vpand (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
4741 ; ZNVER1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4742 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4743   %1 = and <2 x i64> %a0, %a1
4744   %2 = load <2 x i64>, <2 x i64> *%a2, align 16
4745   %3 = and <2 x i64> %1, %2
4746   %4 = add <2 x i64> %3, %a1
4747   ret <2 x i64> %4
4750 define <2 x i64> @test_pandn(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
4751 ; GENERIC-LABEL: test_pandn:
4752 ; GENERIC:       # BB#0:
4753 ; GENERIC-NEXT:    pandn %xmm1, %xmm0 # sched: [1:0.33]
4754 ; GENERIC-NEXT:    movdqa %xmm0, %xmm1 # sched: [1:0.33]
4755 ; GENERIC-NEXT:    pandn (%rdi), %xmm1 # sched: [7:0.50]
4756 ; GENERIC-NEXT:    paddq %xmm0, %xmm1 # sched: [1:0.50]
4757 ; GENERIC-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.33]
4758 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4760 ; ATOM-LABEL: test_pandn:
4761 ; ATOM:       # BB#0:
4762 ; ATOM-NEXT:    pandn %xmm1, %xmm0 # sched: [1:0.50]
4763 ; ATOM-NEXT:    movdqa %xmm0, %xmm1 # sched: [1:0.50]
4764 ; ATOM-NEXT:    pandn (%rdi), %xmm1 # sched: [1:1.00]
4765 ; ATOM-NEXT:    paddq %xmm0, %xmm1 # sched: [2:1.00]
4766 ; ATOM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
4767 ; ATOM-NEXT:    retq # sched: [79:39.50]
4769 ; SLM-LABEL: test_pandn:
4770 ; SLM:       # BB#0:
4771 ; SLM-NEXT:    pandn %xmm1, %xmm0 # sched: [1:0.50]
4772 ; SLM-NEXT:    movdqa %xmm0, %xmm1 # sched: [1:0.50]
4773 ; SLM-NEXT:    pandn (%rdi), %xmm1 # sched: [4:1.00]
4774 ; SLM-NEXT:    paddq %xmm0, %xmm1 # sched: [1:0.50]
4775 ; SLM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
4776 ; SLM-NEXT:    retq # sched: [4:1.00]
4778 ; SANDY-LABEL: test_pandn:
4779 ; SANDY:       # BB#0:
4780 ; SANDY-NEXT:    vpandn %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4781 ; SANDY-NEXT:    vpandn (%rdi), %xmm0, %xmm1 # sched: [7:0.50]
4782 ; SANDY-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4783 ; SANDY-NEXT:    retq # sched: [1:1.00]
4785 ; HASWELL-LABEL: test_pandn:
4786 ; HASWELL:       # BB#0:
4787 ; HASWELL-NEXT:    vpandn %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4788 ; HASWELL-NEXT:    vpandn (%rdi), %xmm0, %xmm1 # sched: [1:0.50]
4789 ; HASWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4790 ; HASWELL-NEXT:    retq # sched: [2:1.00]
4792 ; BROADWELL-LABEL: test_pandn:
4793 ; BROADWELL:       # BB#0:
4794 ; BROADWELL-NEXT:    vpandn %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4795 ; BROADWELL-NEXT:    vpandn (%rdi), %xmm0, %xmm1 # sched: [6:0.50]
4796 ; BROADWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4797 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4799 ; SKYLAKE-LABEL: test_pandn:
4800 ; SKYLAKE:       # BB#0:
4801 ; SKYLAKE-NEXT:    vpandn %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4802 ; SKYLAKE-NEXT:    vpandn (%rdi), %xmm0, %xmm1 # sched: [7:0.50]
4803 ; SKYLAKE-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4804 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4806 ; SKX-LABEL: test_pandn:
4807 ; SKX:       # BB#0:
4808 ; SKX-NEXT:    vpandn %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4809 ; SKX-NEXT:    vpandn (%rdi), %xmm0, %xmm1 # sched: [7:0.50]
4810 ; SKX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
4811 ; SKX-NEXT:    retq # sched: [7:1.00]
4813 ; BTVER2-LABEL: test_pandn:
4814 ; BTVER2:       # BB#0:
4815 ; BTVER2-NEXT:    vpandn %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4816 ; BTVER2-NEXT:    vpandn (%rdi), %xmm0, %xmm1 # sched: [6:1.00]
4817 ; BTVER2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4818 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4820 ; ZNVER1-LABEL: test_pandn:
4821 ; ZNVER1:       # BB#0:
4822 ; ZNVER1-NEXT:    vpandn %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4823 ; ZNVER1-NEXT:    vpandn (%rdi), %xmm0, %xmm1 # sched: [8:0.50]
4824 ; ZNVER1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4825 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4826   %1 = xor <2 x i64> %a0, <i64 -1, i64 -1>
4827   %2 = and <2 x i64> %a1, %1
4828   %3 = load <2 x i64>, <2 x i64> *%a2, align 16
4829   %4 = xor <2 x i64> %2, <i64 -1, i64 -1>
4830   %5 = and <2 x i64> %3, %4
4831   %6 = add <2 x i64> %2, %5
4832   ret <2 x i64> %6
4835 define <16 x i8> @test_pavgb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
4836 ; GENERIC-LABEL: test_pavgb:
4837 ; GENERIC:       # BB#0:
4838 ; GENERIC-NEXT:    pavgb %xmm1, %xmm0 # sched: [1:0.50]
4839 ; GENERIC-NEXT:    pavgb (%rdi), %xmm0 # sched: [7:0.50]
4840 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4842 ; ATOM-LABEL: test_pavgb:
4843 ; ATOM:       # BB#0:
4844 ; ATOM-NEXT:    pavgb %xmm1, %xmm0 # sched: [1:0.50]
4845 ; ATOM-NEXT:    pavgb (%rdi), %xmm0 # sched: [1:1.00]
4846 ; ATOM-NEXT:    nop # sched: [1:0.50]
4847 ; ATOM-NEXT:    nop # sched: [1:0.50]
4848 ; ATOM-NEXT:    nop # sched: [1:0.50]
4849 ; ATOM-NEXT:    nop # sched: [1:0.50]
4850 ; ATOM-NEXT:    retq # sched: [79:39.50]
4852 ; SLM-LABEL: test_pavgb:
4853 ; SLM:       # BB#0:
4854 ; SLM-NEXT:    pavgb %xmm1, %xmm0 # sched: [1:0.50]
4855 ; SLM-NEXT:    pavgb (%rdi), %xmm0 # sched: [4:1.00]
4856 ; SLM-NEXT:    retq # sched: [4:1.00]
4858 ; SANDY-LABEL: test_pavgb:
4859 ; SANDY:       # BB#0:
4860 ; SANDY-NEXT:    vpavgb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4861 ; SANDY-NEXT:    vpavgb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4862 ; SANDY-NEXT:    retq # sched: [1:1.00]
4864 ; HASWELL-LABEL: test_pavgb:
4865 ; HASWELL:       # BB#0:
4866 ; HASWELL-NEXT:    vpavgb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4867 ; HASWELL-NEXT:    vpavgb (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
4868 ; HASWELL-NEXT:    retq # sched: [2:1.00]
4870 ; BROADWELL-LABEL: test_pavgb:
4871 ; BROADWELL:       # BB#0:
4872 ; BROADWELL-NEXT:    vpavgb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4873 ; BROADWELL-NEXT:    vpavgb (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
4874 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4876 ; SKYLAKE-LABEL: test_pavgb:
4877 ; SKYLAKE:       # BB#0:
4878 ; SKYLAKE-NEXT:    vpavgb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4879 ; SKYLAKE-NEXT:    vpavgb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4880 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4882 ; SKX-LABEL: test_pavgb:
4883 ; SKX:       # BB#0:
4884 ; SKX-NEXT:    vpavgb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4885 ; SKX-NEXT:    vpavgb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4886 ; SKX-NEXT:    retq # sched: [7:1.00]
4888 ; BTVER2-LABEL: test_pavgb:
4889 ; BTVER2:       # BB#0:
4890 ; BTVER2-NEXT:    vpavgb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4891 ; BTVER2-NEXT:    vpavgb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4892 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4894 ; ZNVER1-LABEL: test_pavgb:
4895 ; ZNVER1:       # BB#0:
4896 ; ZNVER1-NEXT:    vpavgb %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4897 ; ZNVER1-NEXT:    vpavgb (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
4898 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4899   %1 = zext <16 x i8> %a0 to <16 x i16>
4900   %2 = zext <16 x i8> %a1 to <16 x i16>
4901   %3 = add <16 x i16> %1, %2
4902   %4 = add <16 x i16> %3, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
4903   %5 = lshr <16 x i16> %4, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
4904   %6 = trunc <16 x i16> %5 to <16 x i8>
4905   %7 = load <16 x i8>, <16 x i8> *%a2, align 16
4906   %8 = zext <16 x i8> %6 to <16 x i16>
4907   %9 = zext <16 x i8> %7 to <16 x i16>
4908   %10 = add <16 x i16> %8, %9
4909   %11 = add <16 x i16> %10, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
4910   %12 = lshr <16 x i16> %11, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
4911   %13 = trunc <16 x i16> %12 to <16 x i8>
4912   ret <16 x i8> %13
4915 define <8 x i16> @test_pavgw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
4916 ; GENERIC-LABEL: test_pavgw:
4917 ; GENERIC:       # BB#0:
4918 ; GENERIC-NEXT:    pavgw %xmm1, %xmm0 # sched: [1:0.50]
4919 ; GENERIC-NEXT:    pavgw (%rdi), %xmm0 # sched: [7:0.50]
4920 ; GENERIC-NEXT:    retq # sched: [1:1.00]
4922 ; ATOM-LABEL: test_pavgw:
4923 ; ATOM:       # BB#0:
4924 ; ATOM-NEXT:    pavgw %xmm1, %xmm0 # sched: [1:0.50]
4925 ; ATOM-NEXT:    pavgw (%rdi), %xmm0 # sched: [1:1.00]
4926 ; ATOM-NEXT:    nop # sched: [1:0.50]
4927 ; ATOM-NEXT:    nop # sched: [1:0.50]
4928 ; ATOM-NEXT:    nop # sched: [1:0.50]
4929 ; ATOM-NEXT:    nop # sched: [1:0.50]
4930 ; ATOM-NEXT:    retq # sched: [79:39.50]
4932 ; SLM-LABEL: test_pavgw:
4933 ; SLM:       # BB#0:
4934 ; SLM-NEXT:    pavgw %xmm1, %xmm0 # sched: [1:0.50]
4935 ; SLM-NEXT:    pavgw (%rdi), %xmm0 # sched: [4:1.00]
4936 ; SLM-NEXT:    retq # sched: [4:1.00]
4938 ; SANDY-LABEL: test_pavgw:
4939 ; SANDY:       # BB#0:
4940 ; SANDY-NEXT:    vpavgw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4941 ; SANDY-NEXT:    vpavgw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4942 ; SANDY-NEXT:    retq # sched: [1:1.00]
4944 ; HASWELL-LABEL: test_pavgw:
4945 ; HASWELL:       # BB#0:
4946 ; HASWELL-NEXT:    vpavgw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4947 ; HASWELL-NEXT:    vpavgw (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
4948 ; HASWELL-NEXT:    retq # sched: [2:1.00]
4950 ; BROADWELL-LABEL: test_pavgw:
4951 ; BROADWELL:       # BB#0:
4952 ; BROADWELL-NEXT:    vpavgw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4953 ; BROADWELL-NEXT:    vpavgw (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
4954 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
4956 ; SKYLAKE-LABEL: test_pavgw:
4957 ; SKYLAKE:       # BB#0:
4958 ; SKYLAKE-NEXT:    vpavgw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4959 ; SKYLAKE-NEXT:    vpavgw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4960 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
4962 ; SKX-LABEL: test_pavgw:
4963 ; SKX:       # BB#0:
4964 ; SKX-NEXT:    vpavgw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4965 ; SKX-NEXT:    vpavgw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
4966 ; SKX-NEXT:    retq # sched: [7:1.00]
4968 ; BTVER2-LABEL: test_pavgw:
4969 ; BTVER2:       # BB#0:
4970 ; BTVER2-NEXT:    vpavgw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
4971 ; BTVER2-NEXT:    vpavgw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
4972 ; BTVER2-NEXT:    retq # sched: [4:1.00]
4974 ; ZNVER1-LABEL: test_pavgw:
4975 ; ZNVER1:       # BB#0:
4976 ; ZNVER1-NEXT:    vpavgw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
4977 ; ZNVER1-NEXT:    vpavgw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
4978 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
4979   %1 = zext <8 x i16> %a0 to <8 x i32>
4980   %2 = zext <8 x i16> %a1 to <8 x i32>
4981   %3 = add <8 x i32> %1, %2
4982   %4 = add <8 x i32> %3, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
4983   %5 = lshr <8 x i32> %4, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
4984   %6 = trunc <8 x i32> %5 to <8 x i16>
4985   %7 = load <8 x i16>, <8 x i16> *%a2, align 16
4986   %8 = zext <8 x i16> %6 to <8 x i32>
4987   %9 = zext <8 x i16> %7 to <8 x i32>
4988   %10 = add <8 x i32> %8, %9
4989   %11 = add <8 x i32> %10, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
4990   %12 = lshr <8 x i32> %11, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
4991   %13 = trunc <8 x i32> %12 to <8 x i16>
4992   ret <8 x i16> %13
4995 define <16 x i8> @test_pcmpeqb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
4996 ; GENERIC-LABEL: test_pcmpeqb:
4997 ; GENERIC:       # BB#0:
4998 ; GENERIC-NEXT:    pcmpeqb %xmm0, %xmm1 # sched: [1:0.50]
4999 ; GENERIC-NEXT:    pcmpeqb (%rdi), %xmm0 # sched: [7:0.50]
5000 ; GENERIC-NEXT:    por %xmm1, %xmm0 # sched: [1:0.33]
5001 ; GENERIC-NEXT:    retq # sched: [1:1.00]
5003 ; ATOM-LABEL: test_pcmpeqb:
5004 ; ATOM:       # BB#0:
5005 ; ATOM-NEXT:    pcmpeqb %xmm0, %xmm1 # sched: [1:0.50]
5006 ; ATOM-NEXT:    pcmpeqb (%rdi), %xmm0 # sched: [1:1.00]
5007 ; ATOM-NEXT:    por %xmm1, %xmm0 # sched: [1:0.50]
5008 ; ATOM-NEXT:    nop # sched: [1:0.50]
5009 ; ATOM-NEXT:    nop # sched: [1:0.50]
5010 ; ATOM-NEXT:    retq # sched: [79:39.50]
5012 ; SLM-LABEL: test_pcmpeqb:
5013 ; SLM:       # BB#0:
5014 ; SLM-NEXT:    pcmpeqb %xmm0, %xmm1 # sched: [1:0.50]
5015 ; SLM-NEXT:    pcmpeqb (%rdi), %xmm0 # sched: [4:1.00]
5016 ; SLM-NEXT:    por %xmm1, %xmm0 # sched: [1:0.50]
5017 ; SLM-NEXT:    retq # sched: [4:1.00]
5019 ; SANDY-LABEL: test_pcmpeqb:
5020 ; SANDY:       # BB#0:
5021 ; SANDY-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5022 ; SANDY-NEXT:    vpcmpeqb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5023 ; SANDY-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5024 ; SANDY-NEXT:    retq # sched: [1:1.00]
5026 ; HASWELL-LABEL: test_pcmpeqb:
5027 ; HASWELL:       # BB#0:
5028 ; HASWELL-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5029 ; HASWELL-NEXT:    vpcmpeqb (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
5030 ; HASWELL-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5031 ; HASWELL-NEXT:    retq # sched: [2:1.00]
5033 ; BROADWELL-LABEL: test_pcmpeqb:
5034 ; BROADWELL:       # BB#0:
5035 ; BROADWELL-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5036 ; BROADWELL-NEXT:    vpcmpeqb (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
5037 ; BROADWELL-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5038 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
5040 ; SKYLAKE-LABEL: test_pcmpeqb:
5041 ; SKYLAKE:       # BB#0:
5042 ; SKYLAKE-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5043 ; SKYLAKE-NEXT:    vpcmpeqb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5044 ; SKYLAKE-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5045 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5047 ; SKX-LABEL: test_pcmpeqb:
5048 ; SKX:       # BB#0:
5049 ; SKX-NEXT:    vpcmpeqb %xmm1, %xmm0, %k0 # sched: [3:1.00]
5050 ; SKX-NEXT:    vpcmpeqb (%rdi), %xmm0, %k1 # sched: [9:1.00]
5051 ; SKX-NEXT:    korw %k1, %k0, %k0 # sched: [1:1.00]
5052 ; SKX-NEXT:    vpmovm2b %k0, %xmm0
5053 ; SKX-NEXT:    retq # sched: [7:1.00]
5055 ; BTVER2-LABEL: test_pcmpeqb:
5056 ; BTVER2:       # BB#0:
5057 ; BTVER2-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5058 ; BTVER2-NEXT:    vpcmpeqb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
5059 ; BTVER2-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.50]
5060 ; BTVER2-NEXT:    retq # sched: [4:1.00]
5062 ; ZNVER1-LABEL: test_pcmpeqb:
5063 ; ZNVER1:       # BB#0:
5064 ; ZNVER1-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm1 # sched: [1:0.25]
5065 ; ZNVER1-NEXT:    vpcmpeqb (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
5066 ; ZNVER1-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.25]
5067 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
5068   %1 = icmp eq <16 x i8> %a0, %a1
5069   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
5070   %3 = icmp eq <16 x i8> %a0, %2
5071   %4 = or <16 x i1> %1, %3
5072   %5 = sext <16 x i1> %4 to <16 x i8>
5073   ret <16 x i8> %5
5076 define <4 x i32> @test_pcmpeqd(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
5077 ; GENERIC-LABEL: test_pcmpeqd:
5078 ; GENERIC:       # BB#0:
5079 ; GENERIC-NEXT:    pcmpeqd %xmm0, %xmm1 # sched: [1:0.50]
5080 ; GENERIC-NEXT:    pcmpeqd (%rdi), %xmm0 # sched: [7:0.50]
5081 ; GENERIC-NEXT:    por %xmm1, %xmm0 # sched: [1:0.33]
5082 ; GENERIC-NEXT:    retq # sched: [1:1.00]
5084 ; ATOM-LABEL: test_pcmpeqd:
5085 ; ATOM:       # BB#0:
5086 ; ATOM-NEXT:    pcmpeqd %xmm0, %xmm1 # sched: [1:0.50]
5087 ; ATOM-NEXT:    pcmpeqd (%rdi), %xmm0 # sched: [1:1.00]
5088 ; ATOM-NEXT:    por %xmm1, %xmm0 # sched: [1:0.50]
5089 ; ATOM-NEXT:    nop # sched: [1:0.50]
5090 ; ATOM-NEXT:    nop # sched: [1:0.50]
5091 ; ATOM-NEXT:    retq # sched: [79:39.50]
5093 ; SLM-LABEL: test_pcmpeqd:
5094 ; SLM:       # BB#0:
5095 ; SLM-NEXT:    pcmpeqd %xmm0, %xmm1 # sched: [1:0.50]
5096 ; SLM-NEXT:    pcmpeqd (%rdi), %xmm0 # sched: [4:1.00]
5097 ; SLM-NEXT:    por %xmm1, %xmm0 # sched: [1:0.50]
5098 ; SLM-NEXT:    retq # sched: [4:1.00]
5100 ; SANDY-LABEL: test_pcmpeqd:
5101 ; SANDY:       # BB#0:
5102 ; SANDY-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5103 ; SANDY-NEXT:    vpcmpeqd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5104 ; SANDY-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5105 ; SANDY-NEXT:    retq # sched: [1:1.00]
5107 ; HASWELL-LABEL: test_pcmpeqd:
5108 ; HASWELL:       # BB#0:
5109 ; HASWELL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5110 ; HASWELL-NEXT:    vpcmpeqd (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
5111 ; HASWELL-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5112 ; HASWELL-NEXT:    retq # sched: [2:1.00]
5114 ; BROADWELL-LABEL: test_pcmpeqd:
5115 ; BROADWELL:       # BB#0:
5116 ; BROADWELL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5117 ; BROADWELL-NEXT:    vpcmpeqd (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
5118 ; BROADWELL-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5119 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
5121 ; SKYLAKE-LABEL: test_pcmpeqd:
5122 ; SKYLAKE:       # BB#0:
5123 ; SKYLAKE-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5124 ; SKYLAKE-NEXT:    vpcmpeqd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5125 ; SKYLAKE-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5126 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5128 ; SKX-LABEL: test_pcmpeqd:
5129 ; SKX:       # BB#0:
5130 ; SKX-NEXT:    vpcmpeqd %xmm1, %xmm0, %k0 # sched: [3:1.00]
5131 ; SKX-NEXT:    vpcmpeqd (%rdi), %xmm0, %k1 # sched: [9:1.00]
5132 ; SKX-NEXT:    korw %k1, %k0, %k0 # sched: [1:1.00]
5133 ; SKX-NEXT:    vpmovm2d %k0, %xmm0
5134 ; SKX-NEXT:    retq # sched: [7:1.00]
5136 ; BTVER2-LABEL: test_pcmpeqd:
5137 ; BTVER2:       # BB#0:
5138 ; BTVER2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5139 ; BTVER2-NEXT:    vpcmpeqd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
5140 ; BTVER2-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.50]
5141 ; BTVER2-NEXT:    retq # sched: [4:1.00]
5143 ; ZNVER1-LABEL: test_pcmpeqd:
5144 ; ZNVER1:       # BB#0:
5145 ; ZNVER1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm1 # sched: [1:0.25]
5146 ; ZNVER1-NEXT:    vpcmpeqd (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
5147 ; ZNVER1-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.25]
5148 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
5149   %1 = icmp eq <4 x i32> %a0, %a1
5150   %2 = load <4 x i32>, <4 x i32> *%a2, align 16
5151   %3 = icmp eq <4 x i32> %a0, %2
5152   %4 = or <4 x i1> %1, %3
5153   %5 = sext <4 x i1> %4 to <4 x i32>
5154   ret <4 x i32> %5
5157 define <8 x i16> @test_pcmpeqw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
5158 ; GENERIC-LABEL: test_pcmpeqw:
5159 ; GENERIC:       # BB#0:
5160 ; GENERIC-NEXT:    pcmpeqw %xmm0, %xmm1 # sched: [1:0.50]
5161 ; GENERIC-NEXT:    pcmpeqw (%rdi), %xmm0 # sched: [7:0.50]
5162 ; GENERIC-NEXT:    por %xmm1, %xmm0 # sched: [1:0.33]
5163 ; GENERIC-NEXT:    retq # sched: [1:1.00]
5165 ; ATOM-LABEL: test_pcmpeqw:
5166 ; ATOM:       # BB#0:
5167 ; ATOM-NEXT:    pcmpeqw %xmm0, %xmm1 # sched: [1:0.50]
5168 ; ATOM-NEXT:    pcmpeqw (%rdi), %xmm0 # sched: [1:1.00]
5169 ; ATOM-NEXT:    por %xmm1, %xmm0 # sched: [1:0.50]
5170 ; ATOM-NEXT:    nop # sched: [1:0.50]
5171 ; ATOM-NEXT:    nop # sched: [1:0.50]
5172 ; ATOM-NEXT:    retq # sched: [79:39.50]
5174 ; SLM-LABEL: test_pcmpeqw:
5175 ; SLM:       # BB#0:
5176 ; SLM-NEXT:    pcmpeqw %xmm0, %xmm1 # sched: [1:0.50]
5177 ; SLM-NEXT:    pcmpeqw (%rdi), %xmm0 # sched: [4:1.00]
5178 ; SLM-NEXT:    por %xmm1, %xmm0 # sched: [1:0.50]
5179 ; SLM-NEXT:    retq # sched: [4:1.00]
5181 ; SANDY-LABEL: test_pcmpeqw:
5182 ; SANDY:       # BB#0:
5183 ; SANDY-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5184 ; SANDY-NEXT:    vpcmpeqw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5185 ; SANDY-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5186 ; SANDY-NEXT:    retq # sched: [1:1.00]
5188 ; HASWELL-LABEL: test_pcmpeqw:
5189 ; HASWELL:       # BB#0:
5190 ; HASWELL-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5191 ; HASWELL-NEXT:    vpcmpeqw (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
5192 ; HASWELL-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5193 ; HASWELL-NEXT:    retq # sched: [2:1.00]
5195 ; BROADWELL-LABEL: test_pcmpeqw:
5196 ; BROADWELL:       # BB#0:
5197 ; BROADWELL-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5198 ; BROADWELL-NEXT:    vpcmpeqw (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
5199 ; BROADWELL-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5200 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
5202 ; SKYLAKE-LABEL: test_pcmpeqw:
5203 ; SKYLAKE:       # BB#0:
5204 ; SKYLAKE-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5205 ; SKYLAKE-NEXT:    vpcmpeqw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5206 ; SKYLAKE-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5207 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5209 ; SKX-LABEL: test_pcmpeqw:
5210 ; SKX:       # BB#0:
5211 ; SKX-NEXT:    vpcmpeqw %xmm1, %xmm0, %k0 # sched: [3:1.00]
5212 ; SKX-NEXT:    vpcmpeqw (%rdi), %xmm0, %k1 # sched: [9:1.00]
5213 ; SKX-NEXT:    korb %k1, %k0, %k0 # sched: [1:1.00]
5214 ; SKX-NEXT:    vpmovm2w %k0, %xmm0
5215 ; SKX-NEXT:    retq # sched: [7:1.00]
5217 ; BTVER2-LABEL: test_pcmpeqw:
5218 ; BTVER2:       # BB#0:
5219 ; BTVER2-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5220 ; BTVER2-NEXT:    vpcmpeqw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
5221 ; BTVER2-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.50]
5222 ; BTVER2-NEXT:    retq # sched: [4:1.00]
5224 ; ZNVER1-LABEL: test_pcmpeqw:
5225 ; ZNVER1:       # BB#0:
5226 ; ZNVER1-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm1 # sched: [1:0.25]
5227 ; ZNVER1-NEXT:    vpcmpeqw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
5228 ; ZNVER1-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.25]
5229 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
5230   %1 = icmp eq <8 x i16> %a0, %a1
5231   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
5232   %3 = icmp eq <8 x i16> %a0, %2
5233   %4 = or <8 x i1> %1, %3
5234   %5 = sext <8 x i1> %4 to <8 x i16>
5235   ret <8 x i16> %5
5238 define <16 x i8> @test_pcmpgtb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
5239 ; GENERIC-LABEL: test_pcmpgtb:
5240 ; GENERIC:       # BB#0:
5241 ; GENERIC-NEXT:    movdqa %xmm0, %xmm2 # sched: [1:0.33]
5242 ; GENERIC-NEXT:    pcmpgtb %xmm1, %xmm2 # sched: [1:0.50]
5243 ; GENERIC-NEXT:    pcmpgtb (%rdi), %xmm0 # sched: [7:0.50]
5244 ; GENERIC-NEXT:    por %xmm2, %xmm0 # sched: [1:0.33]
5245 ; GENERIC-NEXT:    retq # sched: [1:1.00]
5247 ; ATOM-LABEL: test_pcmpgtb:
5248 ; ATOM:       # BB#0:
5249 ; ATOM-NEXT:    movdqa %xmm0, %xmm2 # sched: [1:0.50]
5250 ; ATOM-NEXT:    pcmpgtb (%rdi), %xmm0 # sched: [1:1.00]
5251 ; ATOM-NEXT:    pcmpgtb %xmm1, %xmm2 # sched: [1:0.50]
5252 ; ATOM-NEXT:    por %xmm2, %xmm0 # sched: [1:0.50]
5253 ; ATOM-NEXT:    retq # sched: [79:39.50]
5255 ; SLM-LABEL: test_pcmpgtb:
5256 ; SLM:       # BB#0:
5257 ; SLM-NEXT:    movdqa %xmm0, %xmm2 # sched: [1:0.50]
5258 ; SLM-NEXT:    pcmpgtb (%rdi), %xmm0 # sched: [4:1.00]
5259 ; SLM-NEXT:    pcmpgtb %xmm1, %xmm2 # sched: [1:0.50]
5260 ; SLM-NEXT:    por %xmm2, %xmm0 # sched: [1:0.50]
5261 ; SLM-NEXT:    retq # sched: [4:1.00]
5263 ; SANDY-LABEL: test_pcmpgtb:
5264 ; SANDY:       # BB#0:
5265 ; SANDY-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5266 ; SANDY-NEXT:    vpcmpgtb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5267 ; SANDY-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5268 ; SANDY-NEXT:    retq # sched: [1:1.00]
5270 ; HASWELL-LABEL: test_pcmpgtb:
5271 ; HASWELL:       # BB#0:
5272 ; HASWELL-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5273 ; HASWELL-NEXT:    vpcmpgtb (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
5274 ; HASWELL-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5275 ; HASWELL-NEXT:    retq # sched: [2:1.00]
5277 ; BROADWELL-LABEL: test_pcmpgtb:
5278 ; BROADWELL:       # BB#0:
5279 ; BROADWELL-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5280 ; BROADWELL-NEXT:    vpcmpgtb (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
5281 ; BROADWELL-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5282 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
5284 ; SKYLAKE-LABEL: test_pcmpgtb:
5285 ; SKYLAKE:       # BB#0:
5286 ; SKYLAKE-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5287 ; SKYLAKE-NEXT:    vpcmpgtb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5288 ; SKYLAKE-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5289 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5291 ; SKX-LABEL: test_pcmpgtb:
5292 ; SKX:       # BB#0:
5293 ; SKX-NEXT:    vpcmpgtb %xmm1, %xmm0, %k0 # sched: [3:1.00]
5294 ; SKX-NEXT:    vpcmpgtb (%rdi), %xmm0, %k1 # sched: [9:1.00]
5295 ; SKX-NEXT:    korw %k1, %k0, %k0 # sched: [1:1.00]
5296 ; SKX-NEXT:    vpmovm2b %k0, %xmm0
5297 ; SKX-NEXT:    retq # sched: [7:1.00]
5299 ; BTVER2-LABEL: test_pcmpgtb:
5300 ; BTVER2:       # BB#0:
5301 ; BTVER2-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5302 ; BTVER2-NEXT:    vpcmpgtb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
5303 ; BTVER2-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.50]
5304 ; BTVER2-NEXT:    retq # sched: [4:1.00]
5306 ; ZNVER1-LABEL: test_pcmpgtb:
5307 ; ZNVER1:       # BB#0:
5308 ; ZNVER1-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm1 # sched: [1:0.25]
5309 ; ZNVER1-NEXT:    vpcmpgtb (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
5310 ; ZNVER1-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.25]
5311 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
5312   %1 = icmp sgt <16 x i8> %a0, %a1
5313   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
5314   %3 = icmp sgt <16 x i8> %a0, %2
5315   %4 = or <16 x i1> %1, %3
5316   %5 = sext <16 x i1> %4 to <16 x i8>
5317   ret <16 x i8> %5
5320 define <4 x i32> @test_pcmpgtd(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
5321 ; GENERIC-LABEL: test_pcmpgtd:
5322 ; GENERIC:       # BB#0:
5323 ; GENERIC-NEXT:    movdqa %xmm0, %xmm2 # sched: [1:0.33]
5324 ; GENERIC-NEXT:    pcmpgtd %xmm1, %xmm2 # sched: [1:0.50]
5325 ; GENERIC-NEXT:    pcmpeqd (%rdi), %xmm0 # sched: [7:0.50]
5326 ; GENERIC-NEXT:    por %xmm2, %xmm0 # sched: [1:0.33]
5327 ; GENERIC-NEXT:    retq # sched: [1:1.00]
5329 ; ATOM-LABEL: test_pcmpgtd:
5330 ; ATOM:       # BB#0:
5331 ; ATOM-NEXT:    movdqa %xmm0, %xmm2 # sched: [1:0.50]
5332 ; ATOM-NEXT:    pcmpeqd (%rdi), %xmm0 # sched: [1:1.00]
5333 ; ATOM-NEXT:    pcmpgtd %xmm1, %xmm2 # sched: [1:0.50]
5334 ; ATOM-NEXT:    por %xmm2, %xmm0 # sched: [1:0.50]
5335 ; ATOM-NEXT:    retq # sched: [79:39.50]
5337 ; SLM-LABEL: test_pcmpgtd:
5338 ; SLM:       # BB#0:
5339 ; SLM-NEXT:    movdqa %xmm0, %xmm2 # sched: [1:0.50]
5340 ; SLM-NEXT:    pcmpeqd (%rdi), %xmm0 # sched: [4:1.00]
5341 ; SLM-NEXT:    pcmpgtd %xmm1, %xmm2 # sched: [1:0.50]
5342 ; SLM-NEXT:    por %xmm2, %xmm0 # sched: [1:0.50]
5343 ; SLM-NEXT:    retq # sched: [4:1.00]
5345 ; SANDY-LABEL: test_pcmpgtd:
5346 ; SANDY:       # BB#0:
5347 ; SANDY-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5348 ; SANDY-NEXT:    vpcmpeqd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5349 ; SANDY-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5350 ; SANDY-NEXT:    retq # sched: [1:1.00]
5352 ; HASWELL-LABEL: test_pcmpgtd:
5353 ; HASWELL:       # BB#0:
5354 ; HASWELL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5355 ; HASWELL-NEXT:    vpcmpeqd (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
5356 ; HASWELL-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5357 ; HASWELL-NEXT:    retq # sched: [2:1.00]
5359 ; BROADWELL-LABEL: test_pcmpgtd:
5360 ; BROADWELL:       # BB#0:
5361 ; BROADWELL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5362 ; BROADWELL-NEXT:    vpcmpeqd (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
5363 ; BROADWELL-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5364 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
5366 ; SKYLAKE-LABEL: test_pcmpgtd:
5367 ; SKYLAKE:       # BB#0:
5368 ; SKYLAKE-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5369 ; SKYLAKE-NEXT:    vpcmpeqd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5370 ; SKYLAKE-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5371 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5373 ; SKX-LABEL: test_pcmpgtd:
5374 ; SKX:       # BB#0:
5375 ; SKX-NEXT:    vpcmpgtd %xmm1, %xmm0, %k0 # sched: [3:1.00]
5376 ; SKX-NEXT:    vpcmpeqd (%rdi), %xmm0, %k1 # sched: [9:1.00]
5377 ; SKX-NEXT:    korw %k1, %k0, %k0 # sched: [1:1.00]
5378 ; SKX-NEXT:    vpmovm2d %k0, %xmm0
5379 ; SKX-NEXT:    retq # sched: [7:1.00]
5381 ; BTVER2-LABEL: test_pcmpgtd:
5382 ; BTVER2:       # BB#0:
5383 ; BTVER2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5384 ; BTVER2-NEXT:    vpcmpeqd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
5385 ; BTVER2-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.50]
5386 ; BTVER2-NEXT:    retq # sched: [4:1.00]
5388 ; ZNVER1-LABEL: test_pcmpgtd:
5389 ; ZNVER1:       # BB#0:
5390 ; ZNVER1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm1 # sched: [1:0.25]
5391 ; ZNVER1-NEXT:    vpcmpeqd (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
5392 ; ZNVER1-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.25]
5393 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
5394   %1 = icmp sgt <4 x i32> %a0, %a1
5395   %2 = load <4 x i32>, <4 x i32> *%a2, align 16
5396   %3 = icmp eq <4 x i32> %a0, %2
5397   %4 = or <4 x i1> %1, %3
5398   %5 = sext <4 x i1> %4 to <4 x i32>
5399   ret <4 x i32> %5
5402 define <8 x i16> @test_pcmpgtw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
5403 ; GENERIC-LABEL: test_pcmpgtw:
5404 ; GENERIC:       # BB#0:
5405 ; GENERIC-NEXT:    movdqa %xmm0, %xmm2 # sched: [1:0.33]
5406 ; GENERIC-NEXT:    pcmpgtw %xmm1, %xmm2 # sched: [1:0.50]
5407 ; GENERIC-NEXT:    pcmpgtw (%rdi), %xmm0 # sched: [7:0.50]
5408 ; GENERIC-NEXT:    por %xmm2, %xmm0 # sched: [1:0.33]
5409 ; GENERIC-NEXT:    retq # sched: [1:1.00]
5411 ; ATOM-LABEL: test_pcmpgtw:
5412 ; ATOM:       # BB#0:
5413 ; ATOM-NEXT:    movdqa %xmm0, %xmm2 # sched: [1:0.50]
5414 ; ATOM-NEXT:    pcmpgtw (%rdi), %xmm0 # sched: [1:1.00]
5415 ; ATOM-NEXT:    pcmpgtw %xmm1, %xmm2 # sched: [1:0.50]
5416 ; ATOM-NEXT:    por %xmm2, %xmm0 # sched: [1:0.50]
5417 ; ATOM-NEXT:    retq # sched: [79:39.50]
5419 ; SLM-LABEL: test_pcmpgtw:
5420 ; SLM:       # BB#0:
5421 ; SLM-NEXT:    movdqa %xmm0, %xmm2 # sched: [1:0.50]
5422 ; SLM-NEXT:    pcmpgtw (%rdi), %xmm0 # sched: [4:1.00]
5423 ; SLM-NEXT:    pcmpgtw %xmm1, %xmm2 # sched: [1:0.50]
5424 ; SLM-NEXT:    por %xmm2, %xmm0 # sched: [1:0.50]
5425 ; SLM-NEXT:    retq # sched: [4:1.00]
5427 ; SANDY-LABEL: test_pcmpgtw:
5428 ; SANDY:       # BB#0:
5429 ; SANDY-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5430 ; SANDY-NEXT:    vpcmpgtw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5431 ; SANDY-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5432 ; SANDY-NEXT:    retq # sched: [1:1.00]
5434 ; HASWELL-LABEL: test_pcmpgtw:
5435 ; HASWELL:       # BB#0:
5436 ; HASWELL-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5437 ; HASWELL-NEXT:    vpcmpgtw (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
5438 ; HASWELL-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5439 ; HASWELL-NEXT:    retq # sched: [2:1.00]
5441 ; BROADWELL-LABEL: test_pcmpgtw:
5442 ; BROADWELL:       # BB#0:
5443 ; BROADWELL-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5444 ; BROADWELL-NEXT:    vpcmpgtw (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
5445 ; BROADWELL-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5446 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
5448 ; SKYLAKE-LABEL: test_pcmpgtw:
5449 ; SKYLAKE:       # BB#0:
5450 ; SKYLAKE-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5451 ; SKYLAKE-NEXT:    vpcmpgtw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5452 ; SKYLAKE-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
5453 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5455 ; SKX-LABEL: test_pcmpgtw:
5456 ; SKX:       # BB#0:
5457 ; SKX-NEXT:    vpcmpgtw %xmm1, %xmm0, %k0 # sched: [3:1.00]
5458 ; SKX-NEXT:    vpcmpgtw (%rdi), %xmm0, %k1 # sched: [9:1.00]
5459 ; SKX-NEXT:    korb %k1, %k0, %k0 # sched: [1:1.00]
5460 ; SKX-NEXT:    vpmovm2w %k0, %xmm0
5461 ; SKX-NEXT:    retq # sched: [7:1.00]
5463 ; BTVER2-LABEL: test_pcmpgtw:
5464 ; BTVER2:       # BB#0:
5465 ; BTVER2-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm1 # sched: [1:0.50]
5466 ; BTVER2-NEXT:    vpcmpgtw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
5467 ; BTVER2-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.50]
5468 ; BTVER2-NEXT:    retq # sched: [4:1.00]
5470 ; ZNVER1-LABEL: test_pcmpgtw:
5471 ; ZNVER1:       # BB#0:
5472 ; ZNVER1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm1 # sched: [1:0.25]
5473 ; ZNVER1-NEXT:    vpcmpgtw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
5474 ; ZNVER1-NEXT:    vpor %xmm0, %xmm1, %xmm0 # sched: [1:0.25]
5475 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
5476   %1 = icmp sgt <8 x i16> %a0, %a1
5477   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
5478   %3 = icmp sgt <8 x i16> %a0, %2
5479   %4 = or <8 x i1> %1, %3
5480   %5 = sext <8 x i1> %4 to <8 x i16>
5481   ret <8 x i16> %5
5484 define i16 @test_pextrw(<8 x i16> %a0) {
5485 ; GENERIC-LABEL: test_pextrw:
5486 ; GENERIC:       # BB#0:
5487 ; GENERIC-NEXT:    pextrw $6, %xmm0, %eax # sched: [3:1.00]
5488 ; GENERIC-NEXT:    # kill: %ax<def> %ax<kill> %eax<kill>
5489 ; GENERIC-NEXT:    retq # sched: [1:1.00]
5491 ; ATOM-LABEL: test_pextrw:
5492 ; ATOM:       # BB#0:
5493 ; ATOM-NEXT:    pextrw $6, %xmm0, %eax # sched: [4:2.00]
5494 ; ATOM-NEXT:    # kill: %ax<def> %ax<kill> %eax<kill>
5495 ; ATOM-NEXT:    retq # sched: [79:39.50]
5497 ; SLM-LABEL: test_pextrw:
5498 ; SLM:       # BB#0:
5499 ; SLM-NEXT:    pextrw $6, %xmm0, %eax # sched: [4:1.00]
5500 ; SLM-NEXT:    # kill: %ax<def> %ax<kill> %eax<kill>
5501 ; SLM-NEXT:    retq # sched: [4:1.00]
5503 ; SANDY-LABEL: test_pextrw:
5504 ; SANDY:       # BB#0:
5505 ; SANDY-NEXT:    vpextrw $6, %xmm0, %eax # sched: [3:1.00]
5506 ; SANDY-NEXT:    # kill: %ax<def> %ax<kill> %eax<kill>
5507 ; SANDY-NEXT:    retq # sched: [1:1.00]
5509 ; HASWELL-LABEL: test_pextrw:
5510 ; HASWELL:       # BB#0:
5511 ; HASWELL-NEXT:    vpextrw $6, %xmm0, %eax # sched: [2:1.00]
5512 ; HASWELL-NEXT:    # kill: %ax<def> %ax<kill> %eax<kill>
5513 ; HASWELL-NEXT:    retq # sched: [2:1.00]
5515 ; BROADWELL-LABEL: test_pextrw:
5516 ; BROADWELL:       # BB#0:
5517 ; BROADWELL-NEXT:    vpextrw $6, %xmm0, %eax # sched: [2:1.00]
5518 ; BROADWELL-NEXT:    # kill: %ax<def> %ax<kill> %eax<kill>
5519 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
5521 ; SKYLAKE-LABEL: test_pextrw:
5522 ; SKYLAKE:       # BB#0:
5523 ; SKYLAKE-NEXT:    vpextrw $6, %xmm0, %eax # sched: [3:1.00]
5524 ; SKYLAKE-NEXT:    # kill: %ax<def> %ax<kill> %eax<kill>
5525 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5527 ; SKX-LABEL: test_pextrw:
5528 ; SKX:       # BB#0:
5529 ; SKX-NEXT:    vpextrw $6, %xmm0, %eax # sched: [3:1.00]
5530 ; SKX-NEXT:    # kill: %ax<def> %ax<kill> %eax<kill>
5531 ; SKX-NEXT:    retq # sched: [7:1.00]
5533 ; BTVER2-LABEL: test_pextrw:
5534 ; BTVER2:       # BB#0:
5535 ; BTVER2-NEXT:    vpextrw $6, %xmm0, %eax # sched: [1:0.50]
5536 ; BTVER2-NEXT:    # kill: %ax<def> %ax<kill> %eax<kill>
5537 ; BTVER2-NEXT:    retq # sched: [4:1.00]
5539 ; ZNVER1-LABEL: test_pextrw:
5540 ; ZNVER1:       # BB#0:
5541 ; ZNVER1-NEXT:    vpextrw $6, %xmm0, %eax # sched: [1:0.25]
5542 ; ZNVER1-NEXT:    # kill: %ax<def> %ax<kill> %eax<kill>
5543 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
5544   %1 = extractelement <8 x i16> %a0, i32 6
5545   ret i16 %1
5548 define <8 x i16> @test_pinsrw(<8 x i16> %a0, i16 %a1, i16 *%a2) {
5549 ; GENERIC-LABEL: test_pinsrw:
5550 ; GENERIC:       # BB#0:
5551 ; GENERIC-NEXT:    pinsrw $1, %edi, %xmm0 # sched: [2:1.00]
5552 ; GENERIC-NEXT:    pinsrw $3, (%rsi), %xmm0 # sched: [7:0.50]
5553 ; GENERIC-NEXT:    retq # sched: [1:1.00]
5555 ; ATOM-LABEL: test_pinsrw:
5556 ; ATOM:       # BB#0:
5557 ; ATOM-NEXT:    pinsrw $1, %edi, %xmm0 # sched: [1:1.00]
5558 ; ATOM-NEXT:    pinsrw $3, (%rsi), %xmm0 # sched: [1:1.00]
5559 ; ATOM-NEXT:    nop # sched: [1:0.50]
5560 ; ATOM-NEXT:    nop # sched: [1:0.50]
5561 ; ATOM-NEXT:    nop # sched: [1:0.50]
5562 ; ATOM-NEXT:    nop # sched: [1:0.50]
5563 ; ATOM-NEXT:    retq # sched: [79:39.50]
5565 ; SLM-LABEL: test_pinsrw:
5566 ; SLM:       # BB#0:
5567 ; SLM-NEXT:    pinsrw $1, %edi, %xmm0 # sched: [1:1.00]
5568 ; SLM-NEXT:    pinsrw $3, (%rsi), %xmm0 # sched: [4:1.00]
5569 ; SLM-NEXT:    retq # sched: [4:1.00]
5571 ; SANDY-LABEL: test_pinsrw:
5572 ; SANDY:       # BB#0:
5573 ; SANDY-NEXT:    vpinsrw $1, %edi, %xmm0, %xmm0 # sched: [2:1.00]
5574 ; SANDY-NEXT:    vpinsrw $3, (%rsi), %xmm0, %xmm0 # sched: [7:0.50]
5575 ; SANDY-NEXT:    retq # sched: [1:1.00]
5577 ; HASWELL-LABEL: test_pinsrw:
5578 ; HASWELL:       # BB#0:
5579 ; HASWELL-NEXT:    vpinsrw $1, %edi, %xmm0, %xmm0 # sched: [2:2.00]
5580 ; HASWELL-NEXT:    vpinsrw $3, (%rsi), %xmm0, %xmm0 # sched: [1:1.00]
5581 ; HASWELL-NEXT:    retq # sched: [2:1.00]
5583 ; BROADWELL-LABEL: test_pinsrw:
5584 ; BROADWELL:       # BB#0:
5585 ; BROADWELL-NEXT:    vpinsrw $1, %edi, %xmm0, %xmm0 # sched: [2:2.00]
5586 ; BROADWELL-NEXT:    vpinsrw $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
5587 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
5589 ; SKYLAKE-LABEL: test_pinsrw:
5590 ; SKYLAKE:       # BB#0:
5591 ; SKYLAKE-NEXT:    vpinsrw $1, %edi, %xmm0, %xmm0 # sched: [2:2.00]
5592 ; SKYLAKE-NEXT:    vpinsrw $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
5593 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5595 ; SKX-LABEL: test_pinsrw:
5596 ; SKX:       # BB#0:
5597 ; SKX-NEXT:    vpinsrw $1, %edi, %xmm0, %xmm0 # sched: [2:2.00]
5598 ; SKX-NEXT:    vpinsrw $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
5599 ; SKX-NEXT:    retq # sched: [7:1.00]
5601 ; BTVER2-LABEL: test_pinsrw:
5602 ; BTVER2:       # BB#0:
5603 ; BTVER2-NEXT:    vpinsrw $1, %edi, %xmm0, %xmm0 # sched: [1:0.50]
5604 ; BTVER2-NEXT:    vpinsrw $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
5605 ; BTVER2-NEXT:    retq # sched: [4:1.00]
5607 ; ZNVER1-LABEL: test_pinsrw:
5608 ; ZNVER1:       # BB#0:
5609 ; ZNVER1-NEXT:    vpinsrw $1, %edi, %xmm0, %xmm0 # sched: [1:0.25]
5610 ; ZNVER1-NEXT:    vpinsrw $3, (%rsi), %xmm0, %xmm0 # sched: [8:0.50]
5611 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
5612   %1 = insertelement <8 x i16> %a0, i16 %a1, i32 1
5613   %2 = load i16, i16 *%a2
5614   %3 = insertelement <8 x i16> %1, i16 %2, i32 3
5615   ret <8 x i16> %3
5618 define <4 x i32> @test_pmaddwd(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
5619 ; GENERIC-LABEL: test_pmaddwd:
5620 ; GENERIC:       # BB#0:
5621 ; GENERIC-NEXT:    pmaddwd %xmm1, %xmm0 # sched: [3:1.00]
5622 ; GENERIC-NEXT:    pmaddwd (%rdi), %xmm0 # sched: [9:1.00]
5623 ; GENERIC-NEXT:    retq # sched: [1:1.00]
5625 ; ATOM-LABEL: test_pmaddwd:
5626 ; ATOM:       # BB#0:
5627 ; ATOM-NEXT:    pmaddwd %xmm1, %xmm0
5628 ; ATOM-NEXT:    pmaddwd (%rdi), %xmm0
5629 ; ATOM-NEXT:    nop # sched: [1:0.50]
5630 ; ATOM-NEXT:    nop # sched: [1:0.50]
5631 ; ATOM-NEXT:    nop # sched: [1:0.50]
5632 ; ATOM-NEXT:    nop # sched: [1:0.50]
5633 ; ATOM-NEXT:    nop # sched: [1:0.50]
5634 ; ATOM-NEXT:    nop # sched: [1:0.50]
5635 ; ATOM-NEXT:    nop # sched: [1:0.50]
5636 ; ATOM-NEXT:    nop # sched: [1:0.50]
5637 ; ATOM-NEXT:    retq # sched: [79:39.50]
5639 ; SLM-LABEL: test_pmaddwd:
5640 ; SLM:       # BB#0:
5641 ; SLM-NEXT:    pmaddwd %xmm1, %xmm0 # sched: [4:1.00]
5642 ; SLM-NEXT:    pmaddwd (%rdi), %xmm0 # sched: [7:1.00]
5643 ; SLM-NEXT:    retq # sched: [4:1.00]
5645 ; SANDY-LABEL: test_pmaddwd:
5646 ; SANDY:       # BB#0:
5647 ; SANDY-NEXT:    vpmaddwd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
5648 ; SANDY-NEXT:    vpmaddwd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
5649 ; SANDY-NEXT:    retq # sched: [1:1.00]
5651 ; HASWELL-LABEL: test_pmaddwd:
5652 ; HASWELL:       # BB#0:
5653 ; HASWELL-NEXT:    vpmaddwd %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
5654 ; HASWELL-NEXT:    vpmaddwd (%rdi), %xmm0, %xmm0 # sched: [5:1.00]
5655 ; HASWELL-NEXT:    retq # sched: [2:1.00]
5657 ; BROADWELL-LABEL: test_pmaddwd:
5658 ; BROADWELL:       # BB#0:
5659 ; BROADWELL-NEXT:    vpmaddwd %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
5660 ; BROADWELL-NEXT:    vpmaddwd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
5661 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
5663 ; SKYLAKE-LABEL: test_pmaddwd:
5664 ; SKYLAKE:       # BB#0:
5665 ; SKYLAKE-NEXT:    vpmaddwd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
5666 ; SKYLAKE-NEXT:    vpmaddwd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
5667 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5669 ; SKX-LABEL: test_pmaddwd:
5670 ; SKX:       # BB#0:
5671 ; SKX-NEXT:    vpmaddwd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
5672 ; SKX-NEXT:    vpmaddwd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
5673 ; SKX-NEXT:    retq # sched: [7:1.00]
5675 ; BTVER2-LABEL: test_pmaddwd:
5676 ; BTVER2:       # BB#0:
5677 ; BTVER2-NEXT:    vpmaddwd %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
5678 ; BTVER2-NEXT:    vpmaddwd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
5679 ; BTVER2-NEXT:    retq # sched: [4:1.00]
5681 ; ZNVER1-LABEL: test_pmaddwd:
5682 ; ZNVER1:       # BB#0:
5683 ; ZNVER1-NEXT:    vpmaddwd %xmm1, %xmm0, %xmm0 # sched: [4:1.00]
5684 ; ZNVER1-NEXT:    vpmaddwd (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
5685 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
5686   %1 = call <4 x i32> @llvm.x86.sse2.pmadd.wd(<8 x i16> %a0, <8 x i16> %a1)
5687   %2 = bitcast <4 x i32> %1 to <8 x i16>
5688   %3 = load <8 x i16>, <8 x i16> *%a2, align 16
5689   %4 = call <4 x i32> @llvm.x86.sse2.pmadd.wd(<8 x i16> %2, <8 x i16> %3)
5690   ret <4 x i32> %4
5692 declare <4 x i32> @llvm.x86.sse2.pmadd.wd(<8 x i16>, <8 x i16>) nounwind readnone
5694 define <8 x i16> @test_pmaxsw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
5695 ; GENERIC-LABEL: test_pmaxsw:
5696 ; GENERIC:       # BB#0:
5697 ; GENERIC-NEXT:    pmaxsw %xmm1, %xmm0 # sched: [1:0.50]
5698 ; GENERIC-NEXT:    pmaxsw (%rdi), %xmm0 # sched: [7:0.50]
5699 ; GENERIC-NEXT:    retq # sched: [1:1.00]
5701 ; ATOM-LABEL: test_pmaxsw:
5702 ; ATOM:       # BB#0:
5703 ; ATOM-NEXT:    pmaxsw %xmm1, %xmm0 # sched: [1:0.50]
5704 ; ATOM-NEXT:    pmaxsw (%rdi), %xmm0 # sched: [1:1.00]
5705 ; ATOM-NEXT:    nop # sched: [1:0.50]
5706 ; ATOM-NEXT:    nop # sched: [1:0.50]
5707 ; ATOM-NEXT:    nop # sched: [1:0.50]
5708 ; ATOM-NEXT:    nop # sched: [1:0.50]
5709 ; ATOM-NEXT:    retq # sched: [79:39.50]
5711 ; SLM-LABEL: test_pmaxsw:
5712 ; SLM:       # BB#0:
5713 ; SLM-NEXT:    pmaxsw %xmm1, %xmm0 # sched: [1:0.50]
5714 ; SLM-NEXT:    pmaxsw (%rdi), %xmm0 # sched: [4:1.00]
5715 ; SLM-NEXT:    retq # sched: [4:1.00]
5717 ; SANDY-LABEL: test_pmaxsw:
5718 ; SANDY:       # BB#0:
5719 ; SANDY-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5720 ; SANDY-NEXT:    vpmaxsw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5721 ; SANDY-NEXT:    retq # sched: [1:1.00]
5723 ; HASWELL-LABEL: test_pmaxsw:
5724 ; HASWELL:       # BB#0:
5725 ; HASWELL-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5726 ; HASWELL-NEXT:    vpmaxsw (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
5727 ; HASWELL-NEXT:    retq # sched: [2:1.00]
5729 ; BROADWELL-LABEL: test_pmaxsw:
5730 ; BROADWELL:       # BB#0:
5731 ; BROADWELL-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5732 ; BROADWELL-NEXT:    vpmaxsw (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
5733 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
5735 ; SKYLAKE-LABEL: test_pmaxsw:
5736 ; SKYLAKE:       # BB#0:
5737 ; SKYLAKE-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5738 ; SKYLAKE-NEXT:    vpmaxsw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5739 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5741 ; SKX-LABEL: test_pmaxsw:
5742 ; SKX:       # BB#0:
5743 ; SKX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5744 ; SKX-NEXT:    vpmaxsw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5745 ; SKX-NEXT:    retq # sched: [7:1.00]
5747 ; BTVER2-LABEL: test_pmaxsw:
5748 ; BTVER2:       # BB#0:
5749 ; BTVER2-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5750 ; BTVER2-NEXT:    vpmaxsw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
5751 ; BTVER2-NEXT:    retq # sched: [4:1.00]
5753 ; ZNVER1-LABEL: test_pmaxsw:
5754 ; ZNVER1:       # BB#0:
5755 ; ZNVER1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
5756 ; ZNVER1-NEXT:    vpmaxsw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
5757 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
5758   %1 = call <8 x i16> @llvm.x86.sse2.pmaxs.w(<8 x i16> %a0, <8 x i16> %a1)
5759   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
5760   %3 = call <8 x i16> @llvm.x86.sse2.pmaxs.w(<8 x i16> %1, <8 x i16> %2)
5761   ret <8 x i16> %3
5763 declare <8 x i16> @llvm.x86.sse2.pmaxs.w(<8 x i16>, <8 x i16>) nounwind readnone
5765 define <16 x i8> @test_pmaxub(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
5766 ; GENERIC-LABEL: test_pmaxub:
5767 ; GENERIC:       # BB#0:
5768 ; GENERIC-NEXT:    pmaxub %xmm1, %xmm0 # sched: [1:0.50]
5769 ; GENERIC-NEXT:    pmaxub (%rdi), %xmm0 # sched: [7:0.50]
5770 ; GENERIC-NEXT:    retq # sched: [1:1.00]
5772 ; ATOM-LABEL: test_pmaxub:
5773 ; ATOM:       # BB#0:
5774 ; ATOM-NEXT:    pmaxub %xmm1, %xmm0 # sched: [1:0.50]
5775 ; ATOM-NEXT:    pmaxub (%rdi), %xmm0 # sched: [1:1.00]
5776 ; ATOM-NEXT:    nop # sched: [1:0.50]
5777 ; ATOM-NEXT:    nop # sched: [1:0.50]
5778 ; ATOM-NEXT:    nop # sched: [1:0.50]
5779 ; ATOM-NEXT:    nop # sched: [1:0.50]
5780 ; ATOM-NEXT:    retq # sched: [79:39.50]
5782 ; SLM-LABEL: test_pmaxub:
5783 ; SLM:       # BB#0:
5784 ; SLM-NEXT:    pmaxub %xmm1, %xmm0 # sched: [1:0.50]
5785 ; SLM-NEXT:    pmaxub (%rdi), %xmm0 # sched: [4:1.00]
5786 ; SLM-NEXT:    retq # sched: [4:1.00]
5788 ; SANDY-LABEL: test_pmaxub:
5789 ; SANDY:       # BB#0:
5790 ; SANDY-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5791 ; SANDY-NEXT:    vpmaxub (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5792 ; SANDY-NEXT:    retq # sched: [1:1.00]
5794 ; HASWELL-LABEL: test_pmaxub:
5795 ; HASWELL:       # BB#0:
5796 ; HASWELL-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5797 ; HASWELL-NEXT:    vpmaxub (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
5798 ; HASWELL-NEXT:    retq # sched: [2:1.00]
5800 ; BROADWELL-LABEL: test_pmaxub:
5801 ; BROADWELL:       # BB#0:
5802 ; BROADWELL-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5803 ; BROADWELL-NEXT:    vpmaxub (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
5804 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
5806 ; SKYLAKE-LABEL: test_pmaxub:
5807 ; SKYLAKE:       # BB#0:
5808 ; SKYLAKE-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5809 ; SKYLAKE-NEXT:    vpmaxub (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5810 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5812 ; SKX-LABEL: test_pmaxub:
5813 ; SKX:       # BB#0:
5814 ; SKX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5815 ; SKX-NEXT:    vpmaxub (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5816 ; SKX-NEXT:    retq # sched: [7:1.00]
5818 ; BTVER2-LABEL: test_pmaxub:
5819 ; BTVER2:       # BB#0:
5820 ; BTVER2-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5821 ; BTVER2-NEXT:    vpmaxub (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
5822 ; BTVER2-NEXT:    retq # sched: [4:1.00]
5824 ; ZNVER1-LABEL: test_pmaxub:
5825 ; ZNVER1:       # BB#0:
5826 ; ZNVER1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
5827 ; ZNVER1-NEXT:    vpmaxub (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
5828 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
5829   %1 = call <16 x i8> @llvm.x86.sse2.pmaxu.b(<16 x i8> %a0, <16 x i8> %a1)
5830   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
5831   %3 = call <16 x i8> @llvm.x86.sse2.pmaxu.b(<16 x i8> %1, <16 x i8> %2)
5832   ret <16 x i8> %3
5834 declare <16 x i8> @llvm.x86.sse2.pmaxu.b(<16 x i8>, <16 x i8>) nounwind readnone
5836 define <8 x i16> @test_pminsw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
5837 ; GENERIC-LABEL: test_pminsw:
5838 ; GENERIC:       # BB#0:
5839 ; GENERIC-NEXT:    pminsw %xmm1, %xmm0 # sched: [1:0.50]
5840 ; GENERIC-NEXT:    pminsw (%rdi), %xmm0 # sched: [7:0.50]
5841 ; GENERIC-NEXT:    retq # sched: [1:1.00]
5843 ; ATOM-LABEL: test_pminsw:
5844 ; ATOM:       # BB#0:
5845 ; ATOM-NEXT:    pminsw %xmm1, %xmm0 # sched: [1:0.50]
5846 ; ATOM-NEXT:    pminsw (%rdi), %xmm0 # sched: [1:1.00]
5847 ; ATOM-NEXT:    nop # sched: [1:0.50]
5848 ; ATOM-NEXT:    nop # sched: [1:0.50]
5849 ; ATOM-NEXT:    nop # sched: [1:0.50]
5850 ; ATOM-NEXT:    nop # sched: [1:0.50]
5851 ; ATOM-NEXT:    retq # sched: [79:39.50]
5853 ; SLM-LABEL: test_pminsw:
5854 ; SLM:       # BB#0:
5855 ; SLM-NEXT:    pminsw %xmm1, %xmm0 # sched: [1:0.50]
5856 ; SLM-NEXT:    pminsw (%rdi), %xmm0 # sched: [4:1.00]
5857 ; SLM-NEXT:    retq # sched: [4:1.00]
5859 ; SANDY-LABEL: test_pminsw:
5860 ; SANDY:       # BB#0:
5861 ; SANDY-NEXT:    vpminsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5862 ; SANDY-NEXT:    vpminsw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5863 ; SANDY-NEXT:    retq # sched: [1:1.00]
5865 ; HASWELL-LABEL: test_pminsw:
5866 ; HASWELL:       # BB#0:
5867 ; HASWELL-NEXT:    vpminsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5868 ; HASWELL-NEXT:    vpminsw (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
5869 ; HASWELL-NEXT:    retq # sched: [2:1.00]
5871 ; BROADWELL-LABEL: test_pminsw:
5872 ; BROADWELL:       # BB#0:
5873 ; BROADWELL-NEXT:    vpminsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5874 ; BROADWELL-NEXT:    vpminsw (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
5875 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
5877 ; SKYLAKE-LABEL: test_pminsw:
5878 ; SKYLAKE:       # BB#0:
5879 ; SKYLAKE-NEXT:    vpminsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5880 ; SKYLAKE-NEXT:    vpminsw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5881 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5883 ; SKX-LABEL: test_pminsw:
5884 ; SKX:       # BB#0:
5885 ; SKX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5886 ; SKX-NEXT:    vpminsw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5887 ; SKX-NEXT:    retq # sched: [7:1.00]
5889 ; BTVER2-LABEL: test_pminsw:
5890 ; BTVER2:       # BB#0:
5891 ; BTVER2-NEXT:    vpminsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5892 ; BTVER2-NEXT:    vpminsw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
5893 ; BTVER2-NEXT:    retq # sched: [4:1.00]
5895 ; ZNVER1-LABEL: test_pminsw:
5896 ; ZNVER1:       # BB#0:
5897 ; ZNVER1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
5898 ; ZNVER1-NEXT:    vpminsw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
5899 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
5900   %1 = call <8 x i16> @llvm.x86.sse2.pmins.w(<8 x i16> %a0, <8 x i16> %a1)
5901   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
5902   %3 = call <8 x i16> @llvm.x86.sse2.pmins.w(<8 x i16> %1, <8 x i16> %2)
5903   ret <8 x i16> %3
5905 declare <8 x i16> @llvm.x86.sse2.pmins.w(<8 x i16>, <8 x i16>) nounwind readnone
5907 define <16 x i8> @test_pminub(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
5908 ; GENERIC-LABEL: test_pminub:
5909 ; GENERIC:       # BB#0:
5910 ; GENERIC-NEXT:    pminub %xmm1, %xmm0 # sched: [1:0.50]
5911 ; GENERIC-NEXT:    pminub (%rdi), %xmm0 # sched: [7:0.50]
5912 ; GENERIC-NEXT:    retq # sched: [1:1.00]
5914 ; ATOM-LABEL: test_pminub:
5915 ; ATOM:       # BB#0:
5916 ; ATOM-NEXT:    pminub %xmm1, %xmm0 # sched: [1:0.50]
5917 ; ATOM-NEXT:    pminub (%rdi), %xmm0 # sched: [1:1.00]
5918 ; ATOM-NEXT:    nop # sched: [1:0.50]
5919 ; ATOM-NEXT:    nop # sched: [1:0.50]
5920 ; ATOM-NEXT:    nop # sched: [1:0.50]
5921 ; ATOM-NEXT:    nop # sched: [1:0.50]
5922 ; ATOM-NEXT:    retq # sched: [79:39.50]
5924 ; SLM-LABEL: test_pminub:
5925 ; SLM:       # BB#0:
5926 ; SLM-NEXT:    pminub %xmm1, %xmm0 # sched: [1:0.50]
5927 ; SLM-NEXT:    pminub (%rdi), %xmm0 # sched: [4:1.00]
5928 ; SLM-NEXT:    retq # sched: [4:1.00]
5930 ; SANDY-LABEL: test_pminub:
5931 ; SANDY:       # BB#0:
5932 ; SANDY-NEXT:    vpminub %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5933 ; SANDY-NEXT:    vpminub (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5934 ; SANDY-NEXT:    retq # sched: [1:1.00]
5936 ; HASWELL-LABEL: test_pminub:
5937 ; HASWELL:       # BB#0:
5938 ; HASWELL-NEXT:    vpminub %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5939 ; HASWELL-NEXT:    vpminub (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
5940 ; HASWELL-NEXT:    retq # sched: [2:1.00]
5942 ; BROADWELL-LABEL: test_pminub:
5943 ; BROADWELL:       # BB#0:
5944 ; BROADWELL-NEXT:    vpminub %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5945 ; BROADWELL-NEXT:    vpminub (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
5946 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
5948 ; SKYLAKE-LABEL: test_pminub:
5949 ; SKYLAKE:       # BB#0:
5950 ; SKYLAKE-NEXT:    vpminub %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5951 ; SKYLAKE-NEXT:    vpminub (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5952 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
5954 ; SKX-LABEL: test_pminub:
5955 ; SKX:       # BB#0:
5956 ; SKX-NEXT:    vpminub %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5957 ; SKX-NEXT:    vpminub (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
5958 ; SKX-NEXT:    retq # sched: [7:1.00]
5960 ; BTVER2-LABEL: test_pminub:
5961 ; BTVER2:       # BB#0:
5962 ; BTVER2-NEXT:    vpminub %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
5963 ; BTVER2-NEXT:    vpminub (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
5964 ; BTVER2-NEXT:    retq # sched: [4:1.00]
5966 ; ZNVER1-LABEL: test_pminub:
5967 ; ZNVER1:       # BB#0:
5968 ; ZNVER1-NEXT:    vpminub %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
5969 ; ZNVER1-NEXT:    vpminub (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
5970 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
5971   %1 = call <16 x i8> @llvm.x86.sse2.pminu.b(<16 x i8> %a0, <16 x i8> %a1)
5972   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
5973   %3 = call <16 x i8> @llvm.x86.sse2.pminu.b(<16 x i8> %1, <16 x i8> %2)
5974   ret <16 x i8> %3
5976 declare <16 x i8> @llvm.x86.sse2.pminu.b(<16 x i8>, <16 x i8>) nounwind readnone
5978 define i32 @test_pmovmskb(<16 x i8> %a0) {
5979 ; GENERIC-LABEL: test_pmovmskb:
5980 ; GENERIC:       # BB#0:
5981 ; GENERIC-NEXT:    pmovmskb %xmm0, %eax # sched: [2:1.00]
5982 ; GENERIC-NEXT:    retq # sched: [1:1.00]
5984 ; ATOM-LABEL: test_pmovmskb:
5985 ; ATOM:       # BB#0:
5986 ; ATOM-NEXT:    pmovmskb %xmm0, %eax # sched: [3:3.00]
5987 ; ATOM-NEXT:    nop # sched: [1:0.50]
5988 ; ATOM-NEXT:    nop # sched: [1:0.50]
5989 ; ATOM-NEXT:    retq # sched: [79:39.50]
5991 ; SLM-LABEL: test_pmovmskb:
5992 ; SLM:       # BB#0:
5993 ; SLM-NEXT:    pmovmskb %xmm0, %eax # sched: [1:0.50]
5994 ; SLM-NEXT:    retq # sched: [4:1.00]
5996 ; SANDY-LABEL: test_pmovmskb:
5997 ; SANDY:       # BB#0:
5998 ; SANDY-NEXT:    vpmovmskb %xmm0, %eax # sched: [1:1.00]
5999 ; SANDY-NEXT:    retq # sched: [1:1.00]
6001 ; HASWELL-LABEL: test_pmovmskb:
6002 ; HASWELL:       # BB#0:
6003 ; HASWELL-NEXT:    vpmovmskb %xmm0, %eax # sched: [3:1.00]
6004 ; HASWELL-NEXT:    retq # sched: [2:1.00]
6006 ; BROADWELL-LABEL: test_pmovmskb:
6007 ; BROADWELL:       # BB#0:
6008 ; BROADWELL-NEXT:    vpmovmskb %xmm0, %eax # sched: [3:1.00]
6009 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
6011 ; SKYLAKE-LABEL: test_pmovmskb:
6012 ; SKYLAKE:       # BB#0:
6013 ; SKYLAKE-NEXT:    vpmovmskb %xmm0, %eax # sched: [2:1.00]
6014 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6016 ; SKX-LABEL: test_pmovmskb:
6017 ; SKX:       # BB#0:
6018 ; SKX-NEXT:    vpmovmskb %xmm0, %eax # sched: [2:1.00]
6019 ; SKX-NEXT:    retq # sched: [7:1.00]
6021 ; BTVER2-LABEL: test_pmovmskb:
6022 ; BTVER2:       # BB#0:
6023 ; BTVER2-NEXT:    vpmovmskb %xmm0, %eax # sched: [1:0.50]
6024 ; BTVER2-NEXT:    retq # sched: [4:1.00]
6026 ; ZNVER1-LABEL: test_pmovmskb:
6027 ; ZNVER1:       # BB#0:
6028 ; ZNVER1-NEXT:    vpmovmskb %xmm0, %eax # sched: [1:1.00]
6029 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
6030   %1 = call i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8> %a0)
6031   ret i32 %1
6033 declare i32 @llvm.x86.sse2.pmovmskb.128(<16 x i8>) nounwind readnone
6035 define <8 x i16> @test_pmulhuw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
6036 ; GENERIC-LABEL: test_pmulhuw:
6037 ; GENERIC:       # BB#0:
6038 ; GENERIC-NEXT:    pmulhuw %xmm1, %xmm0 # sched: [3:1.00]
6039 ; GENERIC-NEXT:    pmulhuw (%rdi), %xmm0 # sched: [9:1.00]
6040 ; GENERIC-NEXT:    retq # sched: [1:1.00]
6042 ; ATOM-LABEL: test_pmulhuw:
6043 ; ATOM:       # BB#0:
6044 ; ATOM-NEXT:    pmulhuw %xmm1, %xmm0 # sched: [5:5.00]
6045 ; ATOM-NEXT:    pmulhuw (%rdi), %xmm0 # sched: [5:5.00]
6046 ; ATOM-NEXT:    retq # sched: [79:39.50]
6048 ; SLM-LABEL: test_pmulhuw:
6049 ; SLM:       # BB#0:
6050 ; SLM-NEXT:    pmulhuw %xmm1, %xmm0 # sched: [4:1.00]
6051 ; SLM-NEXT:    pmulhuw (%rdi), %xmm0 # sched: [7:1.00]
6052 ; SLM-NEXT:    retq # sched: [4:1.00]
6054 ; SANDY-LABEL: test_pmulhuw:
6055 ; SANDY:       # BB#0:
6056 ; SANDY-NEXT:    vpmulhuw %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
6057 ; SANDY-NEXT:    vpmulhuw (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
6058 ; SANDY-NEXT:    retq # sched: [1:1.00]
6060 ; HASWELL-LABEL: test_pmulhuw:
6061 ; HASWELL:       # BB#0:
6062 ; HASWELL-NEXT:    vpmulhuw %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
6063 ; HASWELL-NEXT:    vpmulhuw (%rdi), %xmm0, %xmm0 # sched: [5:1.00]
6064 ; HASWELL-NEXT:    retq # sched: [2:1.00]
6066 ; BROADWELL-LABEL: test_pmulhuw:
6067 ; BROADWELL:       # BB#0:
6068 ; BROADWELL-NEXT:    vpmulhuw %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
6069 ; BROADWELL-NEXT:    vpmulhuw (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
6070 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
6072 ; SKYLAKE-LABEL: test_pmulhuw:
6073 ; SKYLAKE:       # BB#0:
6074 ; SKYLAKE-NEXT:    vpmulhuw %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
6075 ; SKYLAKE-NEXT:    vpmulhuw (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
6076 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6078 ; SKX-LABEL: test_pmulhuw:
6079 ; SKX:       # BB#0:
6080 ; SKX-NEXT:    vpmulhuw %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
6081 ; SKX-NEXT:    vpmulhuw (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
6082 ; SKX-NEXT:    retq # sched: [7:1.00]
6084 ; BTVER2-LABEL: test_pmulhuw:
6085 ; BTVER2:       # BB#0:
6086 ; BTVER2-NEXT:    vpmulhuw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6087 ; BTVER2-NEXT:    vpmulhuw (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
6088 ; BTVER2-NEXT:    retq # sched: [4:1.00]
6090 ; ZNVER1-LABEL: test_pmulhuw:
6091 ; ZNVER1:       # BB#0:
6092 ; ZNVER1-NEXT:    vpmulhuw %xmm1, %xmm0, %xmm0 # sched: [4:1.00]
6093 ; ZNVER1-NEXT:    vpmulhuw (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
6094 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
6095   %1 = call <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16> %a0, <8 x i16> %a1)
6096   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
6097   %3 = call <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16> %1, <8 x i16> %2)
6098   ret <8 x i16> %3
6100 declare <8 x i16> @llvm.x86.sse2.pmulhu.w(<8 x i16>, <8 x i16>) nounwind readnone
6102 define <8 x i16> @test_pmulhw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
6103 ; GENERIC-LABEL: test_pmulhw:
6104 ; GENERIC:       # BB#0:
6105 ; GENERIC-NEXT:    pmulhw %xmm1, %xmm0 # sched: [3:1.00]
6106 ; GENERIC-NEXT:    pmulhw (%rdi), %xmm0 # sched: [9:1.00]
6107 ; GENERIC-NEXT:    retq # sched: [1:1.00]
6109 ; ATOM-LABEL: test_pmulhw:
6110 ; ATOM:       # BB#0:
6111 ; ATOM-NEXT:    pmulhw %xmm1, %xmm0 # sched: [5:5.00]
6112 ; ATOM-NEXT:    pmulhw (%rdi), %xmm0 # sched: [5:5.00]
6113 ; ATOM-NEXT:    retq # sched: [79:39.50]
6115 ; SLM-LABEL: test_pmulhw:
6116 ; SLM:       # BB#0:
6117 ; SLM-NEXT:    pmulhw %xmm1, %xmm0 # sched: [4:1.00]
6118 ; SLM-NEXT:    pmulhw (%rdi), %xmm0 # sched: [7:1.00]
6119 ; SLM-NEXT:    retq # sched: [4:1.00]
6121 ; SANDY-LABEL: test_pmulhw:
6122 ; SANDY:       # BB#0:
6123 ; SANDY-NEXT:    vpmulhw %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
6124 ; SANDY-NEXT:    vpmulhw (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
6125 ; SANDY-NEXT:    retq # sched: [1:1.00]
6127 ; HASWELL-LABEL: test_pmulhw:
6128 ; HASWELL:       # BB#0:
6129 ; HASWELL-NEXT:    vpmulhw %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
6130 ; HASWELL-NEXT:    vpmulhw (%rdi), %xmm0, %xmm0 # sched: [5:1.00]
6131 ; HASWELL-NEXT:    retq # sched: [2:1.00]
6133 ; BROADWELL-LABEL: test_pmulhw:
6134 ; BROADWELL:       # BB#0:
6135 ; BROADWELL-NEXT:    vpmulhw %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
6136 ; BROADWELL-NEXT:    vpmulhw (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
6137 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
6139 ; SKYLAKE-LABEL: test_pmulhw:
6140 ; SKYLAKE:       # BB#0:
6141 ; SKYLAKE-NEXT:    vpmulhw %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
6142 ; SKYLAKE-NEXT:    vpmulhw (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
6143 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6145 ; SKX-LABEL: test_pmulhw:
6146 ; SKX:       # BB#0:
6147 ; SKX-NEXT:    vpmulhw %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
6148 ; SKX-NEXT:    vpmulhw (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
6149 ; SKX-NEXT:    retq # sched: [7:1.00]
6151 ; BTVER2-LABEL: test_pmulhw:
6152 ; BTVER2:       # BB#0:
6153 ; BTVER2-NEXT:    vpmulhw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6154 ; BTVER2-NEXT:    vpmulhw (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
6155 ; BTVER2-NEXT:    retq # sched: [4:1.00]
6157 ; ZNVER1-LABEL: test_pmulhw:
6158 ; ZNVER1:       # BB#0:
6159 ; ZNVER1-NEXT:    vpmulhw %xmm1, %xmm0, %xmm0 # sched: [4:1.00]
6160 ; ZNVER1-NEXT:    vpmulhw (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
6161 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
6162   %1 = call <8 x i16> @llvm.x86.sse2.pmulh.w(<8 x i16> %a0, <8 x i16> %a1)
6163   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
6164   %3 = call <8 x i16> @llvm.x86.sse2.pmulh.w(<8 x i16> %1, <8 x i16> %2)
6165   ret <8 x i16> %3
6167 declare <8 x i16> @llvm.x86.sse2.pmulh.w(<8 x i16>, <8 x i16>) nounwind readnone
6169 define <8 x i16> @test_pmullw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
6170 ; GENERIC-LABEL: test_pmullw:
6171 ; GENERIC:       # BB#0:
6172 ; GENERIC-NEXT:    pmullw %xmm1, %xmm0 # sched: [3:1.00]
6173 ; GENERIC-NEXT:    pmullw (%rdi), %xmm0 # sched: [9:1.00]
6174 ; GENERIC-NEXT:    retq # sched: [1:1.00]
6176 ; ATOM-LABEL: test_pmullw:
6177 ; ATOM:       # BB#0:
6178 ; ATOM-NEXT:    pmullw %xmm1, %xmm0 # sched: [5:5.00]
6179 ; ATOM-NEXT:    pmullw (%rdi), %xmm0 # sched: [5:5.00]
6180 ; ATOM-NEXT:    retq # sched: [79:39.50]
6182 ; SLM-LABEL: test_pmullw:
6183 ; SLM:       # BB#0:
6184 ; SLM-NEXT:    pmullw %xmm1, %xmm0 # sched: [4:1.00]
6185 ; SLM-NEXT:    pmullw (%rdi), %xmm0 # sched: [7:1.00]
6186 ; SLM-NEXT:    retq # sched: [4:1.00]
6188 ; SANDY-LABEL: test_pmullw:
6189 ; SANDY:       # BB#0:
6190 ; SANDY-NEXT:    vpmullw %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
6191 ; SANDY-NEXT:    vpmullw (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
6192 ; SANDY-NEXT:    retq # sched: [1:1.00]
6194 ; HASWELL-LABEL: test_pmullw:
6195 ; HASWELL:       # BB#0:
6196 ; HASWELL-NEXT:    vpmullw %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
6197 ; HASWELL-NEXT:    vpmullw (%rdi), %xmm0, %xmm0 # sched: [5:1.00]
6198 ; HASWELL-NEXT:    retq # sched: [2:1.00]
6200 ; BROADWELL-LABEL: test_pmullw:
6201 ; BROADWELL:       # BB#0:
6202 ; BROADWELL-NEXT:    vpmullw %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
6203 ; BROADWELL-NEXT:    vpmullw (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
6204 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
6206 ; SKYLAKE-LABEL: test_pmullw:
6207 ; SKYLAKE:       # BB#0:
6208 ; SKYLAKE-NEXT:    vpmullw %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
6209 ; SKYLAKE-NEXT:    vpmullw (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
6210 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6212 ; SKX-LABEL: test_pmullw:
6213 ; SKX:       # BB#0:
6214 ; SKX-NEXT:    vpmullw %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
6215 ; SKX-NEXT:    vpmullw (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
6216 ; SKX-NEXT:    retq # sched: [7:1.00]
6218 ; BTVER2-LABEL: test_pmullw:
6219 ; BTVER2:       # BB#0:
6220 ; BTVER2-NEXT:    vpmullw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6221 ; BTVER2-NEXT:    vpmullw (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
6222 ; BTVER2-NEXT:    retq # sched: [4:1.00]
6224 ; ZNVER1-LABEL: test_pmullw:
6225 ; ZNVER1:       # BB#0:
6226 ; ZNVER1-NEXT:    vpmullw %xmm1, %xmm0, %xmm0 # sched: [4:1.00]
6227 ; ZNVER1-NEXT:    vpmullw (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
6228 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
6229   %1 = mul <8 x i16> %a0, %a1
6230   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
6231   %3 = mul <8 x i16> %1, %2
6232   ret <8 x i16> %3
6235 define <2 x i64> @test_pmuludq(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
6236 ; GENERIC-LABEL: test_pmuludq:
6237 ; GENERIC:       # BB#0:
6238 ; GENERIC-NEXT:    pmuludq %xmm1, %xmm0 # sched: [3:1.00]
6239 ; GENERIC-NEXT:    pmuludq (%rdi), %xmm0 # sched: [9:1.00]
6240 ; GENERIC-NEXT:    retq # sched: [1:1.00]
6242 ; ATOM-LABEL: test_pmuludq:
6243 ; ATOM:       # BB#0:
6244 ; ATOM-NEXT:    pmuludq %xmm1, %xmm0
6245 ; ATOM-NEXT:    pmuludq (%rdi), %xmm0
6246 ; ATOM-NEXT:    nop # sched: [1:0.50]
6247 ; ATOM-NEXT:    nop # sched: [1:0.50]
6248 ; ATOM-NEXT:    nop # sched: [1:0.50]
6249 ; ATOM-NEXT:    nop # sched: [1:0.50]
6250 ; ATOM-NEXT:    nop # sched: [1:0.50]
6251 ; ATOM-NEXT:    nop # sched: [1:0.50]
6252 ; ATOM-NEXT:    nop # sched: [1:0.50]
6253 ; ATOM-NEXT:    nop # sched: [1:0.50]
6254 ; ATOM-NEXT:    retq # sched: [79:39.50]
6256 ; SLM-LABEL: test_pmuludq:
6257 ; SLM:       # BB#0:
6258 ; SLM-NEXT:    pmuludq %xmm1, %xmm0 # sched: [4:1.00]
6259 ; SLM-NEXT:    pmuludq (%rdi), %xmm0 # sched: [7:1.00]
6260 ; SLM-NEXT:    retq # sched: [4:1.00]
6262 ; SANDY-LABEL: test_pmuludq:
6263 ; SANDY:       # BB#0:
6264 ; SANDY-NEXT:    vpmuludq %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
6265 ; SANDY-NEXT:    vpmuludq (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
6266 ; SANDY-NEXT:    retq # sched: [1:1.00]
6268 ; HASWELL-LABEL: test_pmuludq:
6269 ; HASWELL:       # BB#0:
6270 ; HASWELL-NEXT:    vpmuludq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
6271 ; HASWELL-NEXT:    vpmuludq (%rdi), %xmm0, %xmm0 # sched: [5:1.00]
6272 ; HASWELL-NEXT:    retq # sched: [2:1.00]
6274 ; BROADWELL-LABEL: test_pmuludq:
6275 ; BROADWELL:       # BB#0:
6276 ; BROADWELL-NEXT:    vpmuludq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
6277 ; BROADWELL-NEXT:    vpmuludq (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
6278 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
6280 ; SKYLAKE-LABEL: test_pmuludq:
6281 ; SKYLAKE:       # BB#0:
6282 ; SKYLAKE-NEXT:    vpmuludq %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
6283 ; SKYLAKE-NEXT:    vpmuludq (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
6284 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6286 ; SKX-LABEL: test_pmuludq:
6287 ; SKX:       # BB#0:
6288 ; SKX-NEXT:    vpmuludq %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
6289 ; SKX-NEXT:    vpmuludq (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
6290 ; SKX-NEXT:    retq # sched: [7:1.00]
6292 ; BTVER2-LABEL: test_pmuludq:
6293 ; BTVER2:       # BB#0:
6294 ; BTVER2-NEXT:    vpmuludq %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6295 ; BTVER2-NEXT:    vpmuludq (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
6296 ; BTVER2-NEXT:    retq # sched: [4:1.00]
6298 ; ZNVER1-LABEL: test_pmuludq:
6299 ; ZNVER1:       # BB#0:
6300 ; ZNVER1-NEXT:    vpmuludq %xmm1, %xmm0, %xmm0 # sched: [4:1.00]
6301 ; ZNVER1-NEXT:    vpmuludq (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
6302 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
6303   %1 = call <2 x i64> @llvm.x86.sse2.pmulu.dq(<4 x i32> %a0, <4 x i32> %a1)
6304   %2 = bitcast <2 x i64> %1 to <4 x i32>
6305   %3 = load <4 x i32>, <4 x i32> *%a2, align 16
6306   %4 = call <2 x i64> @llvm.x86.sse2.pmulu.dq(<4 x i32> %2, <4 x i32> %3)
6307   ret <2 x i64> %4
6309 declare <2 x i64> @llvm.x86.sse2.pmulu.dq(<4 x i32>, <4 x i32>) nounwind readnone
6311 define <2 x i64> @test_por(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
6312 ; GENERIC-LABEL: test_por:
6313 ; GENERIC:       # BB#0:
6314 ; GENERIC-NEXT:    por %xmm1, %xmm0 # sched: [1:0.33]
6315 ; GENERIC-NEXT:    por (%rdi), %xmm0 # sched: [7:0.50]
6316 ; GENERIC-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
6317 ; GENERIC-NEXT:    retq # sched: [1:1.00]
6319 ; ATOM-LABEL: test_por:
6320 ; ATOM:       # BB#0:
6321 ; ATOM-NEXT:    por %xmm1, %xmm0 # sched: [1:0.50]
6322 ; ATOM-NEXT:    por (%rdi), %xmm0 # sched: [1:1.00]
6323 ; ATOM-NEXT:    paddq %xmm1, %xmm0 # sched: [2:1.00]
6324 ; ATOM-NEXT:    retq # sched: [79:39.50]
6326 ; SLM-LABEL: test_por:
6327 ; SLM:       # BB#0:
6328 ; SLM-NEXT:    por %xmm1, %xmm0 # sched: [1:0.50]
6329 ; SLM-NEXT:    por (%rdi), %xmm0 # sched: [4:1.00]
6330 ; SLM-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
6331 ; SLM-NEXT:    retq # sched: [4:1.00]
6333 ; SANDY-LABEL: test_por:
6334 ; SANDY:       # BB#0:
6335 ; SANDY-NEXT:    vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
6336 ; SANDY-NEXT:    vpor (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
6337 ; SANDY-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6338 ; SANDY-NEXT:    retq # sched: [1:1.00]
6340 ; HASWELL-LABEL: test_por:
6341 ; HASWELL:       # BB#0:
6342 ; HASWELL-NEXT:    vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
6343 ; HASWELL-NEXT:    vpor (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
6344 ; HASWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6345 ; HASWELL-NEXT:    retq # sched: [2:1.00]
6347 ; BROADWELL-LABEL: test_por:
6348 ; BROADWELL:       # BB#0:
6349 ; BROADWELL-NEXT:    vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
6350 ; BROADWELL-NEXT:    vpor (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
6351 ; BROADWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6352 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
6354 ; SKYLAKE-LABEL: test_por:
6355 ; SKYLAKE:       # BB#0:
6356 ; SKYLAKE-NEXT:    vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
6357 ; SKYLAKE-NEXT:    vpor (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
6358 ; SKYLAKE-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
6359 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6361 ; SKX-LABEL: test_por:
6362 ; SKX:       # BB#0:
6363 ; SKX-NEXT:    vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
6364 ; SKX-NEXT:    vpor (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
6365 ; SKX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
6366 ; SKX-NEXT:    retq # sched: [7:1.00]
6368 ; BTVER2-LABEL: test_por:
6369 ; BTVER2:       # BB#0:
6370 ; BTVER2-NEXT:    vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6371 ; BTVER2-NEXT:    vpor (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
6372 ; BTVER2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6373 ; BTVER2-NEXT:    retq # sched: [4:1.00]
6375 ; ZNVER1-LABEL: test_por:
6376 ; ZNVER1:       # BB#0:
6377 ; ZNVER1-NEXT:    vpor %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
6378 ; ZNVER1-NEXT:    vpor (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
6379 ; ZNVER1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
6380 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
6381   %1 = or <2 x i64> %a0, %a1
6382   %2 = load <2 x i64>, <2 x i64> *%a2, align 16
6383   %3 = or <2 x i64> %1, %2
6384   %4 = add <2 x i64> %3, %a1
6385   ret <2 x i64> %4
6388 define <2 x i64> @test_psadbw(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
6389 ; GENERIC-LABEL: test_psadbw:
6390 ; GENERIC:       # BB#0:
6391 ; GENERIC-NEXT:    psadbw %xmm1, %xmm0 # sched: [3:1.00]
6392 ; GENERIC-NEXT:    psadbw (%rdi), %xmm0 # sched: [9:1.00]
6393 ; GENERIC-NEXT:    retq # sched: [1:1.00]
6395 ; ATOM-LABEL: test_psadbw:
6396 ; ATOM:       # BB#0:
6397 ; ATOM-NEXT:    psadbw %xmm1, %xmm0
6398 ; ATOM-NEXT:    psadbw (%rdi), %xmm0
6399 ; ATOM-NEXT:    nop # sched: [1:0.50]
6400 ; ATOM-NEXT:    nop # sched: [1:0.50]
6401 ; ATOM-NEXT:    nop # sched: [1:0.50]
6402 ; ATOM-NEXT:    nop # sched: [1:0.50]
6403 ; ATOM-NEXT:    nop # sched: [1:0.50]
6404 ; ATOM-NEXT:    nop # sched: [1:0.50]
6405 ; ATOM-NEXT:    nop # sched: [1:0.50]
6406 ; ATOM-NEXT:    nop # sched: [1:0.50]
6407 ; ATOM-NEXT:    retq # sched: [79:39.50]
6409 ; SLM-LABEL: test_psadbw:
6410 ; SLM:       # BB#0:
6411 ; SLM-NEXT:    psadbw %xmm1, %xmm0 # sched: [1:0.50]
6412 ; SLM-NEXT:    psadbw (%rdi), %xmm0 # sched: [4:1.00]
6413 ; SLM-NEXT:    retq # sched: [4:1.00]
6415 ; SANDY-LABEL: test_psadbw:
6416 ; SANDY:       # BB#0:
6417 ; SANDY-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
6418 ; SANDY-NEXT:    vpsadbw (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
6419 ; SANDY-NEXT:    retq # sched: [1:1.00]
6421 ; HASWELL-LABEL: test_psadbw:
6422 ; HASWELL:       # BB#0:
6423 ; HASWELL-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
6424 ; HASWELL-NEXT:    vpsadbw (%rdi), %xmm0, %xmm0 # sched: [5:1.00]
6425 ; HASWELL-NEXT:    retq # sched: [2:1.00]
6427 ; BROADWELL-LABEL: test_psadbw:
6428 ; BROADWELL:       # BB#0:
6429 ; BROADWELL-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
6430 ; BROADWELL-NEXT:    vpsadbw (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
6431 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
6433 ; SKYLAKE-LABEL: test_psadbw:
6434 ; SKYLAKE:       # BB#0:
6435 ; SKYLAKE-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
6436 ; SKYLAKE-NEXT:    vpsadbw (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
6437 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6439 ; SKX-LABEL: test_psadbw:
6440 ; SKX:       # BB#0:
6441 ; SKX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
6442 ; SKX-NEXT:    vpsadbw (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
6443 ; SKX-NEXT:    retq # sched: [7:1.00]
6445 ; BTVER2-LABEL: test_psadbw:
6446 ; BTVER2:       # BB#0:
6447 ; BTVER2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6448 ; BTVER2-NEXT:    vpsadbw (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
6449 ; BTVER2-NEXT:    retq # sched: [4:1.00]
6451 ; ZNVER1-LABEL: test_psadbw:
6452 ; ZNVER1:       # BB#0:
6453 ; ZNVER1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0 # sched: [4:1.00]
6454 ; ZNVER1-NEXT:    vpsadbw (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
6455 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
6456   %1 = call <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8> %a0, <16 x i8> %a1)
6457   %2 = bitcast <2 x i64> %1 to <16 x i8>
6458   %3 = load <16 x i8>, <16 x i8> *%a2, align 16
6459   %4 = call <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8> %2, <16 x i8> %3)
6460   ret <2 x i64> %4
6462 declare <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8>, <16 x i8>) nounwind readnone
6464 define <4 x i32> @test_pshufd(<4 x i32> %a0, <4 x i32> *%a1) {
6465 ; GENERIC-LABEL: test_pshufd:
6466 ; GENERIC:       # BB#0:
6467 ; GENERIC-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2] sched: [1:0.50]
6468 ; GENERIC-NEXT:    pshufd {{.*#+}} xmm0 = mem[3,2,1,0] sched: [7:0.50]
6469 ; GENERIC-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
6470 ; GENERIC-NEXT:    retq # sched: [1:1.00]
6472 ; ATOM-LABEL: test_pshufd:
6473 ; ATOM:       # BB#0:
6474 ; ATOM-NEXT:    pshufd {{.*#+}} xmm1 = mem[3,2,1,0] sched: [1:1.00]
6475 ; ATOM-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2] sched: [1:1.00]
6476 ; ATOM-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
6477 ; ATOM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
6478 ; ATOM-NEXT:    retq # sched: [79:39.50]
6480 ; SLM-LABEL: test_pshufd:
6481 ; SLM:       # BB#0:
6482 ; SLM-NEXT:    pshufd {{.*#+}} xmm1 = mem[3,2,1,0] sched: [4:1.00]
6483 ; SLM-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,3,2] sched: [1:1.00]
6484 ; SLM-NEXT:    paddd %xmm0, %xmm1 # sched: [1:0.50]
6485 ; SLM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
6486 ; SLM-NEXT:    retq # sched: [4:1.00]
6488 ; SANDY-LABEL: test_pshufd:
6489 ; SANDY:       # BB#0:
6490 ; SANDY-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,0,3,2] sched: [1:0.50]
6491 ; SANDY-NEXT:    vpshufd {{.*#+}} xmm1 = mem[3,2,1,0] sched: [7:0.50]
6492 ; SANDY-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6493 ; SANDY-NEXT:    retq # sched: [1:1.00]
6495 ; HASWELL-LABEL: test_pshufd:
6496 ; HASWELL:       # BB#0:
6497 ; HASWELL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,0,3,2] sched: [1:1.00]
6498 ; HASWELL-NEXT:    vpshufd {{.*#+}} xmm1 = mem[3,2,1,0] sched: [1:1.00]
6499 ; HASWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6500 ; HASWELL-NEXT:    retq # sched: [2:1.00]
6502 ; BROADWELL-LABEL: test_pshufd:
6503 ; BROADWELL:       # BB#0:
6504 ; BROADWELL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,0,3,2] sched: [1:1.00]
6505 ; BROADWELL-NEXT:    vpshufd {{.*#+}} xmm1 = mem[3,2,1,0] sched: [6:1.00]
6506 ; BROADWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6507 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
6509 ; SKYLAKE-LABEL: test_pshufd:
6510 ; SKYLAKE:       # BB#0:
6511 ; SKYLAKE-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,0,3,2] sched: [1:1.00]
6512 ; SKYLAKE-NEXT:    vpshufd {{.*#+}} xmm1 = mem[3,2,1,0] sched: [7:1.00]
6513 ; SKYLAKE-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
6514 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6516 ; SKX-LABEL: test_pshufd:
6517 ; SKX:       # BB#0:
6518 ; SKX-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,0,3,2] sched: [1:1.00]
6519 ; SKX-NEXT:    vpshufd {{.*#+}} xmm1 = mem[3,2,1,0] sched: [7:1.00]
6520 ; SKX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
6521 ; SKX-NEXT:    retq # sched: [7:1.00]
6523 ; BTVER2-LABEL: test_pshufd:
6524 ; BTVER2:       # BB#0:
6525 ; BTVER2-NEXT:    vpshufd {{.*#+}} xmm1 = mem[3,2,1,0] sched: [6:1.00]
6526 ; BTVER2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,0,3,2] sched: [1:0.50]
6527 ; BTVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6528 ; BTVER2-NEXT:    retq # sched: [4:1.00]
6530 ; ZNVER1-LABEL: test_pshufd:
6531 ; ZNVER1:       # BB#0:
6532 ; ZNVER1-NEXT:    vpshufd {{.*#+}} xmm1 = mem[3,2,1,0] sched: [8:0.50]
6533 ; ZNVER1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,0,3,2] sched: [1:0.25]
6534 ; ZNVER1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
6535 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
6536   %1 = shufflevector <4 x i32> %a0, <4 x i32> undef, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
6537   %2 = load <4 x i32>, <4 x i32> *%a1, align 16
6538   %3 = shufflevector <4 x i32> %2, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
6539   %4 = add <4 x i32> %1, %3
6540   ret <4 x i32> %4
6543 define <8 x i16> @test_pshufhw(<8 x i16> %a0, <8 x i16> *%a1) {
6544 ; GENERIC-LABEL: test_pshufhw:
6545 ; GENERIC:       # BB#0:
6546 ; GENERIC-NEXT:    pshufhw {{.*#+}} xmm1 = xmm0[0,1,2,3,5,4,7,6] sched: [1:0.50]
6547 ; GENERIC-NEXT:    pshufhw {{.*#+}} xmm0 = mem[0,1,2,3,7,6,5,4] sched: [7:0.50]
6548 ; GENERIC-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
6549 ; GENERIC-NEXT:    retq # sched: [1:1.00]
6551 ; ATOM-LABEL: test_pshufhw:
6552 ; ATOM:       # BB#0:
6553 ; ATOM-NEXT:    pshufhw {{.*#+}} xmm1 = mem[0,1,2,3,7,6,5,4] sched: [1:1.00]
6554 ; ATOM-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6] sched: [1:1.00]
6555 ; ATOM-NEXT:    paddw %xmm0, %xmm1 # sched: [1:0.50]
6556 ; ATOM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
6557 ; ATOM-NEXT:    retq # sched: [79:39.50]
6559 ; SLM-LABEL: test_pshufhw:
6560 ; SLM:       # BB#0:
6561 ; SLM-NEXT:    pshufhw {{.*#+}} xmm1 = mem[0,1,2,3,7,6,5,4] sched: [4:1.00]
6562 ; SLM-NEXT:    pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6] sched: [1:1.00]
6563 ; SLM-NEXT:    paddw %xmm0, %xmm1 # sched: [1:0.50]
6564 ; SLM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
6565 ; SLM-NEXT:    retq # sched: [4:1.00]
6567 ; SANDY-LABEL: test_pshufhw:
6568 ; SANDY:       # BB#0:
6569 ; SANDY-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6] sched: [1:0.50]
6570 ; SANDY-NEXT:    vpshufhw {{.*#+}} xmm1 = mem[0,1,2,3,7,6,5,4] sched: [7:0.50]
6571 ; SANDY-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6572 ; SANDY-NEXT:    retq # sched: [1:1.00]
6574 ; HASWELL-LABEL: test_pshufhw:
6575 ; HASWELL:       # BB#0:
6576 ; HASWELL-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6] sched: [1:1.00]
6577 ; HASWELL-NEXT:    vpshufhw {{.*#+}} xmm1 = mem[0,1,2,3,7,6,5,4] sched: [1:1.00]
6578 ; HASWELL-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6579 ; HASWELL-NEXT:    retq # sched: [2:1.00]
6581 ; BROADWELL-LABEL: test_pshufhw:
6582 ; BROADWELL:       # BB#0:
6583 ; BROADWELL-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6] sched: [1:1.00]
6584 ; BROADWELL-NEXT:    vpshufhw {{.*#+}} xmm1 = mem[0,1,2,3,7,6,5,4] sched: [6:1.00]
6585 ; BROADWELL-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6586 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
6588 ; SKYLAKE-LABEL: test_pshufhw:
6589 ; SKYLAKE:       # BB#0:
6590 ; SKYLAKE-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6] sched: [1:1.00]
6591 ; SKYLAKE-NEXT:    vpshufhw {{.*#+}} xmm1 = mem[0,1,2,3,7,6,5,4] sched: [7:1.00]
6592 ; SKYLAKE-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
6593 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6595 ; SKX-LABEL: test_pshufhw:
6596 ; SKX:       # BB#0:
6597 ; SKX-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6] sched: [1:1.00]
6598 ; SKX-NEXT:    vpshufhw {{.*#+}} xmm1 = mem[0,1,2,3,7,6,5,4] sched: [7:1.00]
6599 ; SKX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
6600 ; SKX-NEXT:    retq # sched: [7:1.00]
6602 ; BTVER2-LABEL: test_pshufhw:
6603 ; BTVER2:       # BB#0:
6604 ; BTVER2-NEXT:    vpshufhw {{.*#+}} xmm1 = mem[0,1,2,3,7,6,5,4] sched: [6:1.00]
6605 ; BTVER2-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6] sched: [1:0.50]
6606 ; BTVER2-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6607 ; BTVER2-NEXT:    retq # sched: [4:1.00]
6609 ; ZNVER1-LABEL: test_pshufhw:
6610 ; ZNVER1:       # BB#0:
6611 ; ZNVER1-NEXT:    vpshufhw {{.*#+}} xmm1 = mem[0,1,2,3,7,6,5,4] sched: [8:0.50]
6612 ; ZNVER1-NEXT:    vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6] sched: [1:0.25]
6613 ; ZNVER1-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
6614 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
6615   %1 = shufflevector <8 x i16> %a0, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 7, i32 6>
6616   %2 = load <8 x i16>, <8 x i16> *%a1, align 16
6617   %3 = shufflevector <8 x i16> %2, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 6, i32 5, i32 4>
6618   %4 = add <8 x i16> %1, %3
6619   ret <8 x i16> %4
6622 define <8 x i16> @test_pshuflw(<8 x i16> %a0, <8 x i16> *%a1) {
6623 ; GENERIC-LABEL: test_pshuflw:
6624 ; GENERIC:       # BB#0:
6625 ; GENERIC-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[1,0,3,2,4,5,6,7] sched: [1:0.50]
6626 ; GENERIC-NEXT:    pshuflw {{.*#+}} xmm0 = mem[3,2,1,0,4,5,6,7] sched: [7:0.50]
6627 ; GENERIC-NEXT:    paddw %xmm1, %xmm0 # sched: [1:0.50]
6628 ; GENERIC-NEXT:    retq # sched: [1:1.00]
6630 ; ATOM-LABEL: test_pshuflw:
6631 ; ATOM:       # BB#0:
6632 ; ATOM-NEXT:    pshuflw {{.*#+}} xmm1 = mem[3,2,1,0,4,5,6,7] sched: [1:1.00]
6633 ; ATOM-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7] sched: [1:1.00]
6634 ; ATOM-NEXT:    paddw %xmm0, %xmm1 # sched: [1:0.50]
6635 ; ATOM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
6636 ; ATOM-NEXT:    retq # sched: [79:39.50]
6638 ; SLM-LABEL: test_pshuflw:
6639 ; SLM:       # BB#0:
6640 ; SLM-NEXT:    pshuflw {{.*#+}} xmm1 = mem[3,2,1,0,4,5,6,7] sched: [4:1.00]
6641 ; SLM-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7] sched: [1:1.00]
6642 ; SLM-NEXT:    paddw %xmm0, %xmm1 # sched: [1:0.50]
6643 ; SLM-NEXT:    movdqa %xmm1, %xmm0 # sched: [1:0.50]
6644 ; SLM-NEXT:    retq # sched: [4:1.00]
6646 ; SANDY-LABEL: test_pshuflw:
6647 ; SANDY:       # BB#0:
6648 ; SANDY-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7] sched: [1:0.50]
6649 ; SANDY-NEXT:    vpshuflw {{.*#+}} xmm1 = mem[3,2,1,0,4,5,6,7] sched: [7:0.50]
6650 ; SANDY-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6651 ; SANDY-NEXT:    retq # sched: [1:1.00]
6653 ; HASWELL-LABEL: test_pshuflw:
6654 ; HASWELL:       # BB#0:
6655 ; HASWELL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7] sched: [1:1.00]
6656 ; HASWELL-NEXT:    vpshuflw {{.*#+}} xmm1 = mem[3,2,1,0,4,5,6,7] sched: [1:1.00]
6657 ; HASWELL-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6658 ; HASWELL-NEXT:    retq # sched: [2:1.00]
6660 ; BROADWELL-LABEL: test_pshuflw:
6661 ; BROADWELL:       # BB#0:
6662 ; BROADWELL-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7] sched: [1:1.00]
6663 ; BROADWELL-NEXT:    vpshuflw {{.*#+}} xmm1 = mem[3,2,1,0,4,5,6,7] sched: [6:1.00]
6664 ; BROADWELL-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6665 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
6667 ; SKYLAKE-LABEL: test_pshuflw:
6668 ; SKYLAKE:       # BB#0:
6669 ; SKYLAKE-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7] sched: [1:1.00]
6670 ; SKYLAKE-NEXT:    vpshuflw {{.*#+}} xmm1 = mem[3,2,1,0,4,5,6,7] sched: [7:1.00]
6671 ; SKYLAKE-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
6672 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6674 ; SKX-LABEL: test_pshuflw:
6675 ; SKX:       # BB#0:
6676 ; SKX-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7] sched: [1:1.00]
6677 ; SKX-NEXT:    vpshuflw {{.*#+}} xmm1 = mem[3,2,1,0,4,5,6,7] sched: [7:1.00]
6678 ; SKX-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
6679 ; SKX-NEXT:    retq # sched: [7:1.00]
6681 ; BTVER2-LABEL: test_pshuflw:
6682 ; BTVER2:       # BB#0:
6683 ; BTVER2-NEXT:    vpshuflw {{.*#+}} xmm1 = mem[3,2,1,0,4,5,6,7] sched: [6:1.00]
6684 ; BTVER2-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7] sched: [1:0.50]
6685 ; BTVER2-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6686 ; BTVER2-NEXT:    retq # sched: [4:1.00]
6688 ; ZNVER1-LABEL: test_pshuflw:
6689 ; ZNVER1:       # BB#0:
6690 ; ZNVER1-NEXT:    vpshuflw {{.*#+}} xmm1 = mem[3,2,1,0,4,5,6,7] sched: [8:0.50]
6691 ; ZNVER1-NEXT:    vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7] sched: [1:0.25]
6692 ; ZNVER1-NEXT:    vpaddw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
6693 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
6694   %1 = shufflevector <8 x i16> %a0, <8 x i16> undef, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>
6695   %2 = load <8 x i16>, <8 x i16> *%a1, align 16
6696   %3 = shufflevector <8 x i16> %2, <8 x i16> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>
6697   %4 = add <8 x i16> %1, %3
6698   ret <8 x i16> %4
6701 define <4 x i32> @test_pslld(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
6702 ; GENERIC-LABEL: test_pslld:
6703 ; GENERIC:       # BB#0:
6704 ; GENERIC-NEXT:    pslld %xmm1, %xmm0 # sched: [2:1.00]
6705 ; GENERIC-NEXT:    pslld (%rdi), %xmm0 # sched: [8:1.00]
6706 ; GENERIC-NEXT:    pslld $2, %xmm0 # sched: [1:1.00]
6707 ; GENERIC-NEXT:    retq # sched: [1:1.00]
6709 ; ATOM-LABEL: test_pslld:
6710 ; ATOM:       # BB#0:
6711 ; ATOM-NEXT:    pslld %xmm1, %xmm0 # sched: [2:1.00]
6712 ; ATOM-NEXT:    pslld (%rdi), %xmm0 # sched: [3:1.50]
6713 ; ATOM-NEXT:    pslld $2, %xmm0 # sched: [1:0.50]
6714 ; ATOM-NEXT:    retq # sched: [79:39.50]
6716 ; SLM-LABEL: test_pslld:
6717 ; SLM:       # BB#0:
6718 ; SLM-NEXT:    pslld %xmm1, %xmm0 # sched: [1:1.00]
6719 ; SLM-NEXT:    pslld (%rdi), %xmm0 # sched: [4:1.00]
6720 ; SLM-NEXT:    pslld $2, %xmm0 # sched: [1:1.00]
6721 ; SLM-NEXT:    retq # sched: [4:1.00]
6723 ; SANDY-LABEL: test_pslld:
6724 ; SANDY:       # BB#0:
6725 ; SANDY-NEXT:    vpslld %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6726 ; SANDY-NEXT:    vpslld (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
6727 ; SANDY-NEXT:    vpslld $2, %xmm0, %xmm0 # sched: [1:1.00]
6728 ; SANDY-NEXT:    retq # sched: [1:1.00]
6730 ; HASWELL-LABEL: test_pslld:
6731 ; HASWELL:       # BB#0:
6732 ; HASWELL-NEXT:    vpslld %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6733 ; HASWELL-NEXT:    vpslld (%rdi), %xmm0, %xmm0 # sched: [2:1.00]
6734 ; HASWELL-NEXT:    vpslld $2, %xmm0, %xmm0 # sched: [1:1.00]
6735 ; HASWELL-NEXT:    retq # sched: [2:1.00]
6737 ; BROADWELL-LABEL: test_pslld:
6738 ; BROADWELL:       # BB#0:
6739 ; BROADWELL-NEXT:    vpslld %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6740 ; BROADWELL-NEXT:    vpslld (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
6741 ; BROADWELL-NEXT:    vpslld $2, %xmm0, %xmm0 # sched: [1:1.00]
6742 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
6744 ; SKYLAKE-LABEL: test_pslld:
6745 ; SKYLAKE:       # BB#0:
6746 ; SKYLAKE-NEXT:    vpslld %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6747 ; SKYLAKE-NEXT:    vpslld (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
6748 ; SKYLAKE-NEXT:    vpslld $2, %xmm0, %xmm0 # sched: [1:0.50]
6749 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6751 ; SKX-LABEL: test_pslld:
6752 ; SKX:       # BB#0:
6753 ; SKX-NEXT:    vpslld %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6754 ; SKX-NEXT:    vpslld (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
6755 ; SKX-NEXT:    vpslld $2, %xmm0, %xmm0 # sched: [1:0.50]
6756 ; SKX-NEXT:    retq # sched: [7:1.00]
6758 ; BTVER2-LABEL: test_pslld:
6759 ; BTVER2:       # BB#0:
6760 ; BTVER2-NEXT:    vpslld %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6761 ; BTVER2-NEXT:    vpslld (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
6762 ; BTVER2-NEXT:    vpslld $2, %xmm0, %xmm0 # sched: [1:0.50]
6763 ; BTVER2-NEXT:    retq # sched: [4:1.00]
6765 ; ZNVER1-LABEL: test_pslld:
6766 ; ZNVER1:       # BB#0:
6767 ; ZNVER1-NEXT:    vpslld %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
6768 ; ZNVER1-NEXT:    vpslld (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
6769 ; ZNVER1-NEXT:    vpslld $2, %xmm0, %xmm0 # sched: [1:0.25]
6770 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
6771   %1 = call <4 x i32> @llvm.x86.sse2.psll.d(<4 x i32> %a0, <4 x i32> %a1)
6772   %2 = load <4 x i32>, <4 x i32> *%a2, align 16
6773   %3 = call <4 x i32> @llvm.x86.sse2.psll.d(<4 x i32> %1, <4 x i32> %2)
6774   %4 = call <4 x i32> @llvm.x86.sse2.pslli.d(<4 x i32> %3, i32 2)
6775   ret <4 x i32> %4
6777 declare <4 x i32> @llvm.x86.sse2.psll.d(<4 x i32>, <4 x i32>) nounwind readnone
6778 declare <4 x i32> @llvm.x86.sse2.pslli.d(<4 x i32>, i32) nounwind readnone
6780 define <4 x i32> @test_pslldq(<4 x i32> %a0) {
6781 ; GENERIC-LABEL: test_pslldq:
6782 ; GENERIC:       # BB#0:
6783 ; GENERIC-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11] sched: [1:0.50]
6784 ; GENERIC-NEXT:    retq # sched: [1:1.00]
6786 ; ATOM-LABEL: test_pslldq:
6787 ; ATOM:       # BB#0:
6788 ; ATOM-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11] sched: [1:0.50]
6789 ; ATOM-NEXT:    nop # sched: [1:0.50]
6790 ; ATOM-NEXT:    nop # sched: [1:0.50]
6791 ; ATOM-NEXT:    nop # sched: [1:0.50]
6792 ; ATOM-NEXT:    nop # sched: [1:0.50]
6793 ; ATOM-NEXT:    nop # sched: [1:0.50]
6794 ; ATOM-NEXT:    nop # sched: [1:0.50]
6795 ; ATOM-NEXT:    retq # sched: [79:39.50]
6797 ; SLM-LABEL: test_pslldq:
6798 ; SLM:       # BB#0:
6799 ; SLM-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11] sched: [1:1.00]
6800 ; SLM-NEXT:    retq # sched: [4:1.00]
6802 ; SANDY-LABEL: test_pslldq:
6803 ; SANDY:       # BB#0:
6804 ; SANDY-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11] sched: [1:0.50]
6805 ; SANDY-NEXT:    retq # sched: [1:1.00]
6807 ; HASWELL-LABEL: test_pslldq:
6808 ; HASWELL:       # BB#0:
6809 ; HASWELL-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11] sched: [1:1.00]
6810 ; HASWELL-NEXT:    retq # sched: [2:1.00]
6812 ; BROADWELL-LABEL: test_pslldq:
6813 ; BROADWELL:       # BB#0:
6814 ; BROADWELL-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11] sched: [1:1.00]
6815 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
6817 ; SKYLAKE-LABEL: test_pslldq:
6818 ; SKYLAKE:       # BB#0:
6819 ; SKYLAKE-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11] sched: [1:1.00]
6820 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6822 ; SKX-LABEL: test_pslldq:
6823 ; SKX:       # BB#0:
6824 ; SKX-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11] sched: [1:1.00]
6825 ; SKX-NEXT:    retq # sched: [7:1.00]
6827 ; BTVER2-LABEL: test_pslldq:
6828 ; BTVER2:       # BB#0:
6829 ; BTVER2-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11] sched: [1:0.50]
6830 ; BTVER2-NEXT:    retq # sched: [4:1.00]
6832 ; ZNVER1-LABEL: test_pslldq:
6833 ; ZNVER1:       # BB#0:
6834 ; ZNVER1-NEXT:    vpslldq {{.*#+}} xmm0 = zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7,8,9,10,11] sched: [1:1.00]
6835 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
6836   %1 = shufflevector <4 x i32> %a0, <4 x i32> zeroinitializer, <4 x i32> <i32 4, i32 0, i32 1, i32 2>
6837   ret <4 x i32> %1
6840 define <2 x i64> @test_psllq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
6841 ; GENERIC-LABEL: test_psllq:
6842 ; GENERIC:       # BB#0:
6843 ; GENERIC-NEXT:    psllq %xmm1, %xmm0 # sched: [2:1.00]
6844 ; GENERIC-NEXT:    psllq (%rdi), %xmm0 # sched: [8:1.00]
6845 ; GENERIC-NEXT:    psllq $2, %xmm0 # sched: [1:1.00]
6846 ; GENERIC-NEXT:    retq # sched: [1:1.00]
6848 ; ATOM-LABEL: test_psllq:
6849 ; ATOM:       # BB#0:
6850 ; ATOM-NEXT:    psllq %xmm1, %xmm0 # sched: [2:1.00]
6851 ; ATOM-NEXT:    psllq (%rdi), %xmm0 # sched: [3:1.50]
6852 ; ATOM-NEXT:    psllq $2, %xmm0 # sched: [1:0.50]
6853 ; ATOM-NEXT:    retq # sched: [79:39.50]
6855 ; SLM-LABEL: test_psllq:
6856 ; SLM:       # BB#0:
6857 ; SLM-NEXT:    psllq %xmm1, %xmm0 # sched: [1:1.00]
6858 ; SLM-NEXT:    psllq (%rdi), %xmm0 # sched: [4:1.00]
6859 ; SLM-NEXT:    psllq $2, %xmm0 # sched: [1:1.00]
6860 ; SLM-NEXT:    retq # sched: [4:1.00]
6862 ; SANDY-LABEL: test_psllq:
6863 ; SANDY:       # BB#0:
6864 ; SANDY-NEXT:    vpsllq %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6865 ; SANDY-NEXT:    vpsllq (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
6866 ; SANDY-NEXT:    vpsllq $2, %xmm0, %xmm0 # sched: [1:1.00]
6867 ; SANDY-NEXT:    retq # sched: [1:1.00]
6869 ; HASWELL-LABEL: test_psllq:
6870 ; HASWELL:       # BB#0:
6871 ; HASWELL-NEXT:    vpsllq %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6872 ; HASWELL-NEXT:    vpsllq (%rdi), %xmm0, %xmm0 # sched: [2:1.00]
6873 ; HASWELL-NEXT:    vpsllq $2, %xmm0, %xmm0 # sched: [1:1.00]
6874 ; HASWELL-NEXT:    retq # sched: [2:1.00]
6876 ; BROADWELL-LABEL: test_psllq:
6877 ; BROADWELL:       # BB#0:
6878 ; BROADWELL-NEXT:    vpsllq %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6879 ; BROADWELL-NEXT:    vpsllq (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
6880 ; BROADWELL-NEXT:    vpsllq $2, %xmm0, %xmm0 # sched: [1:1.00]
6881 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
6883 ; SKYLAKE-LABEL: test_psllq:
6884 ; SKYLAKE:       # BB#0:
6885 ; SKYLAKE-NEXT:    vpsllq %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6886 ; SKYLAKE-NEXT:    vpsllq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
6887 ; SKYLAKE-NEXT:    vpsllq $2, %xmm0, %xmm0 # sched: [1:0.50]
6888 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6890 ; SKX-LABEL: test_psllq:
6891 ; SKX:       # BB#0:
6892 ; SKX-NEXT:    vpsllq %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6893 ; SKX-NEXT:    vpsllq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
6894 ; SKX-NEXT:    vpsllq $2, %xmm0, %xmm0 # sched: [1:0.50]
6895 ; SKX-NEXT:    retq # sched: [7:1.00]
6897 ; BTVER2-LABEL: test_psllq:
6898 ; BTVER2:       # BB#0:
6899 ; BTVER2-NEXT:    vpsllq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6900 ; BTVER2-NEXT:    vpsllq (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
6901 ; BTVER2-NEXT:    vpsllq $2, %xmm0, %xmm0 # sched: [1:0.50]
6902 ; BTVER2-NEXT:    retq # sched: [4:1.00]
6904 ; ZNVER1-LABEL: test_psllq:
6905 ; ZNVER1:       # BB#0:
6906 ; ZNVER1-NEXT:    vpsllq %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
6907 ; ZNVER1-NEXT:    vpsllq (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
6908 ; ZNVER1-NEXT:    vpsllq $2, %xmm0, %xmm0 # sched: [1:0.25]
6909 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
6910   %1 = call <2 x i64> @llvm.x86.sse2.psll.q(<2 x i64> %a0, <2 x i64> %a1)
6911   %2 = load <2 x i64>, <2 x i64> *%a2, align 16
6912   %3 = call <2 x i64> @llvm.x86.sse2.psll.q(<2 x i64> %1, <2 x i64> %2)
6913   %4 = call <2 x i64> @llvm.x86.sse2.pslli.q(<2 x i64> %3, i32 2)
6914   ret <2 x i64> %4
6916 declare <2 x i64> @llvm.x86.sse2.psll.q(<2 x i64>, <2 x i64>) nounwind readnone
6917 declare <2 x i64> @llvm.x86.sse2.pslli.q(<2 x i64>, i32) nounwind readnone
6919 define <8 x i16> @test_psllw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
6920 ; GENERIC-LABEL: test_psllw:
6921 ; GENERIC:       # BB#0:
6922 ; GENERIC-NEXT:    psllw %xmm1, %xmm0 # sched: [2:1.00]
6923 ; GENERIC-NEXT:    psllw (%rdi), %xmm0 # sched: [8:1.00]
6924 ; GENERIC-NEXT:    psllw $2, %xmm0 # sched: [1:1.00]
6925 ; GENERIC-NEXT:    retq # sched: [1:1.00]
6927 ; ATOM-LABEL: test_psllw:
6928 ; ATOM:       # BB#0:
6929 ; ATOM-NEXT:    psllw %xmm1, %xmm0 # sched: [2:1.00]
6930 ; ATOM-NEXT:    psllw (%rdi), %xmm0 # sched: [3:1.50]
6931 ; ATOM-NEXT:    psllw $2, %xmm0 # sched: [1:0.50]
6932 ; ATOM-NEXT:    retq # sched: [79:39.50]
6934 ; SLM-LABEL: test_psllw:
6935 ; SLM:       # BB#0:
6936 ; SLM-NEXT:    psllw %xmm1, %xmm0 # sched: [1:1.00]
6937 ; SLM-NEXT:    psllw (%rdi), %xmm0 # sched: [4:1.00]
6938 ; SLM-NEXT:    psllw $2, %xmm0 # sched: [1:1.00]
6939 ; SLM-NEXT:    retq # sched: [4:1.00]
6941 ; SANDY-LABEL: test_psllw:
6942 ; SANDY:       # BB#0:
6943 ; SANDY-NEXT:    vpsllw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6944 ; SANDY-NEXT:    vpsllw (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
6945 ; SANDY-NEXT:    vpsllw $2, %xmm0, %xmm0 # sched: [1:1.00]
6946 ; SANDY-NEXT:    retq # sched: [1:1.00]
6948 ; HASWELL-LABEL: test_psllw:
6949 ; HASWELL:       # BB#0:
6950 ; HASWELL-NEXT:    vpsllw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6951 ; HASWELL-NEXT:    vpsllw (%rdi), %xmm0, %xmm0 # sched: [2:1.00]
6952 ; HASWELL-NEXT:    vpsllw $2, %xmm0, %xmm0 # sched: [1:1.00]
6953 ; HASWELL-NEXT:    retq # sched: [2:1.00]
6955 ; BROADWELL-LABEL: test_psllw:
6956 ; BROADWELL:       # BB#0:
6957 ; BROADWELL-NEXT:    vpsllw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6958 ; BROADWELL-NEXT:    vpsllw (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
6959 ; BROADWELL-NEXT:    vpsllw $2, %xmm0, %xmm0 # sched: [1:1.00]
6960 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
6962 ; SKYLAKE-LABEL: test_psllw:
6963 ; SKYLAKE:       # BB#0:
6964 ; SKYLAKE-NEXT:    vpsllw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6965 ; SKYLAKE-NEXT:    vpsllw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
6966 ; SKYLAKE-NEXT:    vpsllw $2, %xmm0, %xmm0 # sched: [1:0.50]
6967 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
6969 ; SKX-LABEL: test_psllw:
6970 ; SKX:       # BB#0:
6971 ; SKX-NEXT:    vpsllw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
6972 ; SKX-NEXT:    vpsllw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
6973 ; SKX-NEXT:    vpsllw $2, %xmm0, %xmm0 # sched: [1:0.50]
6974 ; SKX-NEXT:    retq # sched: [7:1.00]
6976 ; BTVER2-LABEL: test_psllw:
6977 ; BTVER2:       # BB#0:
6978 ; BTVER2-NEXT:    vpsllw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
6979 ; BTVER2-NEXT:    vpsllw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
6980 ; BTVER2-NEXT:    vpsllw $2, %xmm0, %xmm0 # sched: [1:0.50]
6981 ; BTVER2-NEXT:    retq # sched: [4:1.00]
6983 ; ZNVER1-LABEL: test_psllw:
6984 ; ZNVER1:       # BB#0:
6985 ; ZNVER1-NEXT:    vpsllw %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
6986 ; ZNVER1-NEXT:    vpsllw (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
6987 ; ZNVER1-NEXT:    vpsllw $2, %xmm0, %xmm0 # sched: [1:0.25]
6988 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
6989   %1 = call <8 x i16> @llvm.x86.sse2.psll.w(<8 x i16> %a0, <8 x i16> %a1)
6990   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
6991   %3 = call <8 x i16> @llvm.x86.sse2.psll.w(<8 x i16> %1, <8 x i16> %2)
6992   %4 = call <8 x i16> @llvm.x86.sse2.pslli.w(<8 x i16> %3, i32 2)
6993   ret <8 x i16> %4
6995 declare <8 x i16> @llvm.x86.sse2.psll.w(<8 x i16>, <8 x i16>) nounwind readnone
6996 declare <8 x i16> @llvm.x86.sse2.pslli.w(<8 x i16>, i32) nounwind readnone
6998 define <4 x i32> @test_psrad(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
6999 ; GENERIC-LABEL: test_psrad:
7000 ; GENERIC:       # BB#0:
7001 ; GENERIC-NEXT:    psrad %xmm1, %xmm0 # sched: [2:1.00]
7002 ; GENERIC-NEXT:    psrad (%rdi), %xmm0 # sched: [8:1.00]
7003 ; GENERIC-NEXT:    psrad $2, %xmm0 # sched: [1:1.00]
7004 ; GENERIC-NEXT:    retq # sched: [1:1.00]
7006 ; ATOM-LABEL: test_psrad:
7007 ; ATOM:       # BB#0:
7008 ; ATOM-NEXT:    psrad %xmm1, %xmm0 # sched: [2:1.00]
7009 ; ATOM-NEXT:    psrad (%rdi), %xmm0 # sched: [3:1.50]
7010 ; ATOM-NEXT:    psrad $2, %xmm0 # sched: [1:0.50]
7011 ; ATOM-NEXT:    retq # sched: [79:39.50]
7013 ; SLM-LABEL: test_psrad:
7014 ; SLM:       # BB#0:
7015 ; SLM-NEXT:    psrad %xmm1, %xmm0 # sched: [1:1.00]
7016 ; SLM-NEXT:    psrad (%rdi), %xmm0 # sched: [4:1.00]
7017 ; SLM-NEXT:    psrad $2, %xmm0 # sched: [1:1.00]
7018 ; SLM-NEXT:    retq # sched: [4:1.00]
7020 ; SANDY-LABEL: test_psrad:
7021 ; SANDY:       # BB#0:
7022 ; SANDY-NEXT:    vpsrad %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7023 ; SANDY-NEXT:    vpsrad (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
7024 ; SANDY-NEXT:    vpsrad $2, %xmm0, %xmm0 # sched: [1:1.00]
7025 ; SANDY-NEXT:    retq # sched: [1:1.00]
7027 ; HASWELL-LABEL: test_psrad:
7028 ; HASWELL:       # BB#0:
7029 ; HASWELL-NEXT:    vpsrad %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7030 ; HASWELL-NEXT:    vpsrad (%rdi), %xmm0, %xmm0 # sched: [2:1.00]
7031 ; HASWELL-NEXT:    vpsrad $2, %xmm0, %xmm0 # sched: [1:1.00]
7032 ; HASWELL-NEXT:    retq # sched: [2:1.00]
7034 ; BROADWELL-LABEL: test_psrad:
7035 ; BROADWELL:       # BB#0:
7036 ; BROADWELL-NEXT:    vpsrad %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7037 ; BROADWELL-NEXT:    vpsrad (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
7038 ; BROADWELL-NEXT:    vpsrad $2, %xmm0, %xmm0 # sched: [1:1.00]
7039 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
7041 ; SKYLAKE-LABEL: test_psrad:
7042 ; SKYLAKE:       # BB#0:
7043 ; SKYLAKE-NEXT:    vpsrad %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7044 ; SKYLAKE-NEXT:    vpsrad (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7045 ; SKYLAKE-NEXT:    vpsrad $2, %xmm0, %xmm0 # sched: [1:0.50]
7046 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7048 ; SKX-LABEL: test_psrad:
7049 ; SKX:       # BB#0:
7050 ; SKX-NEXT:    vpsrad %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7051 ; SKX-NEXT:    vpsrad (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7052 ; SKX-NEXT:    vpsrad $2, %xmm0, %xmm0 # sched: [1:0.50]
7053 ; SKX-NEXT:    retq # sched: [7:1.00]
7055 ; BTVER2-LABEL: test_psrad:
7056 ; BTVER2:       # BB#0:
7057 ; BTVER2-NEXT:    vpsrad %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7058 ; BTVER2-NEXT:    vpsrad (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
7059 ; BTVER2-NEXT:    vpsrad $2, %xmm0, %xmm0 # sched: [1:0.50]
7060 ; BTVER2-NEXT:    retq # sched: [4:1.00]
7062 ; ZNVER1-LABEL: test_psrad:
7063 ; ZNVER1:       # BB#0:
7064 ; ZNVER1-NEXT:    vpsrad %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
7065 ; ZNVER1-NEXT:    vpsrad (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
7066 ; ZNVER1-NEXT:    vpsrad $2, %xmm0, %xmm0 # sched: [1:0.25]
7067 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
7068   %1 = call <4 x i32> @llvm.x86.sse2.psra.d(<4 x i32> %a0, <4 x i32> %a1)
7069   %2 = load <4 x i32>, <4 x i32> *%a2, align 16
7070   %3 = call <4 x i32> @llvm.x86.sse2.psra.d(<4 x i32> %1, <4 x i32> %2)
7071   %4 = call <4 x i32> @llvm.x86.sse2.psrai.d(<4 x i32> %3, i32 2)
7072   ret <4 x i32> %4
7074 declare <4 x i32> @llvm.x86.sse2.psra.d(<4 x i32>, <4 x i32>) nounwind readnone
7075 declare <4 x i32> @llvm.x86.sse2.psrai.d(<4 x i32>, i32) nounwind readnone
7077 define <8 x i16> @test_psraw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
7078 ; GENERIC-LABEL: test_psraw:
7079 ; GENERIC:       # BB#0:
7080 ; GENERIC-NEXT:    psraw %xmm1, %xmm0 # sched: [2:1.00]
7081 ; GENERIC-NEXT:    psraw (%rdi), %xmm0 # sched: [8:1.00]
7082 ; GENERIC-NEXT:    psraw $2, %xmm0 # sched: [1:1.00]
7083 ; GENERIC-NEXT:    retq # sched: [1:1.00]
7085 ; ATOM-LABEL: test_psraw:
7086 ; ATOM:       # BB#0:
7087 ; ATOM-NEXT:    psraw %xmm1, %xmm0 # sched: [2:1.00]
7088 ; ATOM-NEXT:    psraw (%rdi), %xmm0 # sched: [3:1.50]
7089 ; ATOM-NEXT:    psraw $2, %xmm0 # sched: [1:0.50]
7090 ; ATOM-NEXT:    retq # sched: [79:39.50]
7092 ; SLM-LABEL: test_psraw:
7093 ; SLM:       # BB#0:
7094 ; SLM-NEXT:    psraw %xmm1, %xmm0 # sched: [1:1.00]
7095 ; SLM-NEXT:    psraw (%rdi), %xmm0 # sched: [4:1.00]
7096 ; SLM-NEXT:    psraw $2, %xmm0 # sched: [1:1.00]
7097 ; SLM-NEXT:    retq # sched: [4:1.00]
7099 ; SANDY-LABEL: test_psraw:
7100 ; SANDY:       # BB#0:
7101 ; SANDY-NEXT:    vpsraw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7102 ; SANDY-NEXT:    vpsraw (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
7103 ; SANDY-NEXT:    vpsraw $2, %xmm0, %xmm0 # sched: [1:1.00]
7104 ; SANDY-NEXT:    retq # sched: [1:1.00]
7106 ; HASWELL-LABEL: test_psraw:
7107 ; HASWELL:       # BB#0:
7108 ; HASWELL-NEXT:    vpsraw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7109 ; HASWELL-NEXT:    vpsraw (%rdi), %xmm0, %xmm0 # sched: [2:1.00]
7110 ; HASWELL-NEXT:    vpsraw $2, %xmm0, %xmm0 # sched: [1:1.00]
7111 ; HASWELL-NEXT:    retq # sched: [2:1.00]
7113 ; BROADWELL-LABEL: test_psraw:
7114 ; BROADWELL:       # BB#0:
7115 ; BROADWELL-NEXT:    vpsraw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7116 ; BROADWELL-NEXT:    vpsraw (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
7117 ; BROADWELL-NEXT:    vpsraw $2, %xmm0, %xmm0 # sched: [1:1.00]
7118 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
7120 ; SKYLAKE-LABEL: test_psraw:
7121 ; SKYLAKE:       # BB#0:
7122 ; SKYLAKE-NEXT:    vpsraw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7123 ; SKYLAKE-NEXT:    vpsraw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7124 ; SKYLAKE-NEXT:    vpsraw $2, %xmm0, %xmm0 # sched: [1:0.50]
7125 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7127 ; SKX-LABEL: test_psraw:
7128 ; SKX:       # BB#0:
7129 ; SKX-NEXT:    vpsraw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7130 ; SKX-NEXT:    vpsraw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7131 ; SKX-NEXT:    vpsraw $2, %xmm0, %xmm0 # sched: [1:0.50]
7132 ; SKX-NEXT:    retq # sched: [7:1.00]
7134 ; BTVER2-LABEL: test_psraw:
7135 ; BTVER2:       # BB#0:
7136 ; BTVER2-NEXT:    vpsraw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7137 ; BTVER2-NEXT:    vpsraw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
7138 ; BTVER2-NEXT:    vpsraw $2, %xmm0, %xmm0 # sched: [1:0.50]
7139 ; BTVER2-NEXT:    retq # sched: [4:1.00]
7141 ; ZNVER1-LABEL: test_psraw:
7142 ; ZNVER1:       # BB#0:
7143 ; ZNVER1-NEXT:    vpsraw %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
7144 ; ZNVER1-NEXT:    vpsraw (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
7145 ; ZNVER1-NEXT:    vpsraw $2, %xmm0, %xmm0 # sched: [1:0.25]
7146 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
7147   %1 = call <8 x i16> @llvm.x86.sse2.psra.w(<8 x i16> %a0, <8 x i16> %a1)
7148   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
7149   %3 = call <8 x i16> @llvm.x86.sse2.psra.w(<8 x i16> %1, <8 x i16> %2)
7150   %4 = call <8 x i16> @llvm.x86.sse2.psrai.w(<8 x i16> %3, i32 2)
7151   ret <8 x i16> %4
7153 declare <8 x i16> @llvm.x86.sse2.psra.w(<8 x i16>, <8 x i16>) nounwind readnone
7154 declare <8 x i16> @llvm.x86.sse2.psrai.w(<8 x i16>, i32) nounwind readnone
7156 define <4 x i32> @test_psrld(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
7157 ; GENERIC-LABEL: test_psrld:
7158 ; GENERIC:       # BB#0:
7159 ; GENERIC-NEXT:    psrld %xmm1, %xmm0 # sched: [2:1.00]
7160 ; GENERIC-NEXT:    psrld (%rdi), %xmm0 # sched: [8:1.00]
7161 ; GENERIC-NEXT:    psrld $2, %xmm0 # sched: [1:1.00]
7162 ; GENERIC-NEXT:    retq # sched: [1:1.00]
7164 ; ATOM-LABEL: test_psrld:
7165 ; ATOM:       # BB#0:
7166 ; ATOM-NEXT:    psrld %xmm1, %xmm0 # sched: [2:1.00]
7167 ; ATOM-NEXT:    psrld (%rdi), %xmm0 # sched: [3:1.50]
7168 ; ATOM-NEXT:    psrld $2, %xmm0 # sched: [1:0.50]
7169 ; ATOM-NEXT:    retq # sched: [79:39.50]
7171 ; SLM-LABEL: test_psrld:
7172 ; SLM:       # BB#0:
7173 ; SLM-NEXT:    psrld %xmm1, %xmm0 # sched: [1:1.00]
7174 ; SLM-NEXT:    psrld (%rdi), %xmm0 # sched: [4:1.00]
7175 ; SLM-NEXT:    psrld $2, %xmm0 # sched: [1:1.00]
7176 ; SLM-NEXT:    retq # sched: [4:1.00]
7178 ; SANDY-LABEL: test_psrld:
7179 ; SANDY:       # BB#0:
7180 ; SANDY-NEXT:    vpsrld %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7181 ; SANDY-NEXT:    vpsrld (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
7182 ; SANDY-NEXT:    vpsrld $2, %xmm0, %xmm0 # sched: [1:1.00]
7183 ; SANDY-NEXT:    retq # sched: [1:1.00]
7185 ; HASWELL-LABEL: test_psrld:
7186 ; HASWELL:       # BB#0:
7187 ; HASWELL-NEXT:    vpsrld %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7188 ; HASWELL-NEXT:    vpsrld (%rdi), %xmm0, %xmm0 # sched: [2:1.00]
7189 ; HASWELL-NEXT:    vpsrld $2, %xmm0, %xmm0 # sched: [1:1.00]
7190 ; HASWELL-NEXT:    retq # sched: [2:1.00]
7192 ; BROADWELL-LABEL: test_psrld:
7193 ; BROADWELL:       # BB#0:
7194 ; BROADWELL-NEXT:    vpsrld %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7195 ; BROADWELL-NEXT:    vpsrld (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
7196 ; BROADWELL-NEXT:    vpsrld $2, %xmm0, %xmm0 # sched: [1:1.00]
7197 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
7199 ; SKYLAKE-LABEL: test_psrld:
7200 ; SKYLAKE:       # BB#0:
7201 ; SKYLAKE-NEXT:    vpsrld %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7202 ; SKYLAKE-NEXT:    vpsrld (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7203 ; SKYLAKE-NEXT:    vpsrld $2, %xmm0, %xmm0 # sched: [1:0.50]
7204 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7206 ; SKX-LABEL: test_psrld:
7207 ; SKX:       # BB#0:
7208 ; SKX-NEXT:    vpsrld %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7209 ; SKX-NEXT:    vpsrld (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7210 ; SKX-NEXT:    vpsrld $2, %xmm0, %xmm0 # sched: [1:0.50]
7211 ; SKX-NEXT:    retq # sched: [7:1.00]
7213 ; BTVER2-LABEL: test_psrld:
7214 ; BTVER2:       # BB#0:
7215 ; BTVER2-NEXT:    vpsrld %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7216 ; BTVER2-NEXT:    vpsrld (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
7217 ; BTVER2-NEXT:    vpsrld $2, %xmm0, %xmm0 # sched: [1:0.50]
7218 ; BTVER2-NEXT:    retq # sched: [4:1.00]
7220 ; ZNVER1-LABEL: test_psrld:
7221 ; ZNVER1:       # BB#0:
7222 ; ZNVER1-NEXT:    vpsrld %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
7223 ; ZNVER1-NEXT:    vpsrld (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
7224 ; ZNVER1-NEXT:    vpsrld $2, %xmm0, %xmm0 # sched: [1:0.25]
7225 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
7226   %1 = call <4 x i32> @llvm.x86.sse2.psrl.d(<4 x i32> %a0, <4 x i32> %a1)
7227   %2 = load <4 x i32>, <4 x i32> *%a2, align 16
7228   %3 = call <4 x i32> @llvm.x86.sse2.psrl.d(<4 x i32> %1, <4 x i32> %2)
7229   %4 = call <4 x i32> @llvm.x86.sse2.psrli.d(<4 x i32> %3, i32 2)
7230   ret <4 x i32> %4
7232 declare <4 x i32> @llvm.x86.sse2.psrl.d(<4 x i32>, <4 x i32>) nounwind readnone
7233 declare <4 x i32> @llvm.x86.sse2.psrli.d(<4 x i32>, i32) nounwind readnone
7235 define <4 x i32> @test_psrldq(<4 x i32> %a0) {
7236 ; GENERIC-LABEL: test_psrldq:
7237 ; GENERIC:       # BB#0:
7238 ; GENERIC-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero sched: [1:0.50]
7239 ; GENERIC-NEXT:    retq # sched: [1:1.00]
7241 ; ATOM-LABEL: test_psrldq:
7242 ; ATOM:       # BB#0:
7243 ; ATOM-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero sched: [1:0.50]
7244 ; ATOM-NEXT:    nop # sched: [1:0.50]
7245 ; ATOM-NEXT:    nop # sched: [1:0.50]
7246 ; ATOM-NEXT:    nop # sched: [1:0.50]
7247 ; ATOM-NEXT:    nop # sched: [1:0.50]
7248 ; ATOM-NEXT:    nop # sched: [1:0.50]
7249 ; ATOM-NEXT:    nop # sched: [1:0.50]
7250 ; ATOM-NEXT:    retq # sched: [79:39.50]
7252 ; SLM-LABEL: test_psrldq:
7253 ; SLM:       # BB#0:
7254 ; SLM-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero sched: [1:1.00]
7255 ; SLM-NEXT:    retq # sched: [4:1.00]
7257 ; SANDY-LABEL: test_psrldq:
7258 ; SANDY:       # BB#0:
7259 ; SANDY-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero sched: [1:0.50]
7260 ; SANDY-NEXT:    retq # sched: [1:1.00]
7262 ; HASWELL-LABEL: test_psrldq:
7263 ; HASWELL:       # BB#0:
7264 ; HASWELL-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero sched: [1:1.00]
7265 ; HASWELL-NEXT:    retq # sched: [2:1.00]
7267 ; BROADWELL-LABEL: test_psrldq:
7268 ; BROADWELL:       # BB#0:
7269 ; BROADWELL-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero sched: [1:1.00]
7270 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
7272 ; SKYLAKE-LABEL: test_psrldq:
7273 ; SKYLAKE:       # BB#0:
7274 ; SKYLAKE-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero sched: [1:1.00]
7275 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7277 ; SKX-LABEL: test_psrldq:
7278 ; SKX:       # BB#0:
7279 ; SKX-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero sched: [1:1.00]
7280 ; SKX-NEXT:    retq # sched: [7:1.00]
7282 ; BTVER2-LABEL: test_psrldq:
7283 ; BTVER2:       # BB#0:
7284 ; BTVER2-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero sched: [1:0.50]
7285 ; BTVER2-NEXT:    retq # sched: [4:1.00]
7287 ; ZNVER1-LABEL: test_psrldq:
7288 ; ZNVER1:       # BB#0:
7289 ; ZNVER1-NEXT:    vpsrldq {{.*#+}} xmm0 = xmm0[4,5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero sched: [1:1.00]
7290 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
7291   %1 = shufflevector <4 x i32> %a0, <4 x i32> zeroinitializer, <4 x i32> <i32 1, i32 2, i32 3, i32 4>
7292   ret <4 x i32> %1
7295 define <2 x i64> @test_psrlq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
7296 ; GENERIC-LABEL: test_psrlq:
7297 ; GENERIC:       # BB#0:
7298 ; GENERIC-NEXT:    psrlq %xmm1, %xmm0 # sched: [2:1.00]
7299 ; GENERIC-NEXT:    psrlq (%rdi), %xmm0 # sched: [8:1.00]
7300 ; GENERIC-NEXT:    psrlq $2, %xmm0 # sched: [1:1.00]
7301 ; GENERIC-NEXT:    retq # sched: [1:1.00]
7303 ; ATOM-LABEL: test_psrlq:
7304 ; ATOM:       # BB#0:
7305 ; ATOM-NEXT:    psrlq %xmm1, %xmm0 # sched: [2:1.00]
7306 ; ATOM-NEXT:    psrlq (%rdi), %xmm0 # sched: [3:1.50]
7307 ; ATOM-NEXT:    psrlq $2, %xmm0 # sched: [1:0.50]
7308 ; ATOM-NEXT:    retq # sched: [79:39.50]
7310 ; SLM-LABEL: test_psrlq:
7311 ; SLM:       # BB#0:
7312 ; SLM-NEXT:    psrlq %xmm1, %xmm0 # sched: [1:1.00]
7313 ; SLM-NEXT:    psrlq (%rdi), %xmm0 # sched: [4:1.00]
7314 ; SLM-NEXT:    psrlq $2, %xmm0 # sched: [1:1.00]
7315 ; SLM-NEXT:    retq # sched: [4:1.00]
7317 ; SANDY-LABEL: test_psrlq:
7318 ; SANDY:       # BB#0:
7319 ; SANDY-NEXT:    vpsrlq %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7320 ; SANDY-NEXT:    vpsrlq (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
7321 ; SANDY-NEXT:    vpsrlq $2, %xmm0, %xmm0 # sched: [1:1.00]
7322 ; SANDY-NEXT:    retq # sched: [1:1.00]
7324 ; HASWELL-LABEL: test_psrlq:
7325 ; HASWELL:       # BB#0:
7326 ; HASWELL-NEXT:    vpsrlq %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7327 ; HASWELL-NEXT:    vpsrlq (%rdi), %xmm0, %xmm0 # sched: [2:1.00]
7328 ; HASWELL-NEXT:    vpsrlq $2, %xmm0, %xmm0 # sched: [1:1.00]
7329 ; HASWELL-NEXT:    retq # sched: [2:1.00]
7331 ; BROADWELL-LABEL: test_psrlq:
7332 ; BROADWELL:       # BB#0:
7333 ; BROADWELL-NEXT:    vpsrlq %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7334 ; BROADWELL-NEXT:    vpsrlq (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
7335 ; BROADWELL-NEXT:    vpsrlq $2, %xmm0, %xmm0 # sched: [1:1.00]
7336 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
7338 ; SKYLAKE-LABEL: test_psrlq:
7339 ; SKYLAKE:       # BB#0:
7340 ; SKYLAKE-NEXT:    vpsrlq %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7341 ; SKYLAKE-NEXT:    vpsrlq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7342 ; SKYLAKE-NEXT:    vpsrlq $2, %xmm0, %xmm0 # sched: [1:0.50]
7343 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7345 ; SKX-LABEL: test_psrlq:
7346 ; SKX:       # BB#0:
7347 ; SKX-NEXT:    vpsrlq %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7348 ; SKX-NEXT:    vpsrlq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7349 ; SKX-NEXT:    vpsrlq $2, %xmm0, %xmm0 # sched: [1:0.50]
7350 ; SKX-NEXT:    retq # sched: [7:1.00]
7352 ; BTVER2-LABEL: test_psrlq:
7353 ; BTVER2:       # BB#0:
7354 ; BTVER2-NEXT:    vpsrlq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7355 ; BTVER2-NEXT:    vpsrlq (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
7356 ; BTVER2-NEXT:    vpsrlq $2, %xmm0, %xmm0 # sched: [1:0.50]
7357 ; BTVER2-NEXT:    retq # sched: [4:1.00]
7359 ; ZNVER1-LABEL: test_psrlq:
7360 ; ZNVER1:       # BB#0:
7361 ; ZNVER1-NEXT:    vpsrlq %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
7362 ; ZNVER1-NEXT:    vpsrlq (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
7363 ; ZNVER1-NEXT:    vpsrlq $2, %xmm0, %xmm0 # sched: [1:0.25]
7364 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
7365   %1 = call <2 x i64> @llvm.x86.sse2.psrl.q(<2 x i64> %a0, <2 x i64> %a1)
7366   %2 = load <2 x i64>, <2 x i64> *%a2, align 16
7367   %3 = call <2 x i64> @llvm.x86.sse2.psrl.q(<2 x i64> %1, <2 x i64> %2)
7368   %4 = call <2 x i64> @llvm.x86.sse2.psrli.q(<2 x i64> %3, i32 2)
7369   ret <2 x i64> %4
7371 declare <2 x i64> @llvm.x86.sse2.psrl.q(<2 x i64>, <2 x i64>) nounwind readnone
7372 declare <2 x i64> @llvm.x86.sse2.psrli.q(<2 x i64>, i32) nounwind readnone
7374 define <8 x i16> @test_psrlw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
7375 ; GENERIC-LABEL: test_psrlw:
7376 ; GENERIC:       # BB#0:
7377 ; GENERIC-NEXT:    psrlw %xmm1, %xmm0 # sched: [2:1.00]
7378 ; GENERIC-NEXT:    psrlw (%rdi), %xmm0 # sched: [8:1.00]
7379 ; GENERIC-NEXT:    psrlw $2, %xmm0 # sched: [1:1.00]
7380 ; GENERIC-NEXT:    retq # sched: [1:1.00]
7382 ; ATOM-LABEL: test_psrlw:
7383 ; ATOM:       # BB#0:
7384 ; ATOM-NEXT:    psrlw %xmm1, %xmm0 # sched: [2:1.00]
7385 ; ATOM-NEXT:    psrlw (%rdi), %xmm0 # sched: [3:1.50]
7386 ; ATOM-NEXT:    psrlw $2, %xmm0 # sched: [1:0.50]
7387 ; ATOM-NEXT:    retq # sched: [79:39.50]
7389 ; SLM-LABEL: test_psrlw:
7390 ; SLM:       # BB#0:
7391 ; SLM-NEXT:    psrlw %xmm1, %xmm0 # sched: [1:1.00]
7392 ; SLM-NEXT:    psrlw (%rdi), %xmm0 # sched: [4:1.00]
7393 ; SLM-NEXT:    psrlw $2, %xmm0 # sched: [1:1.00]
7394 ; SLM-NEXT:    retq # sched: [4:1.00]
7396 ; SANDY-LABEL: test_psrlw:
7397 ; SANDY:       # BB#0:
7398 ; SANDY-NEXT:    vpsrlw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7399 ; SANDY-NEXT:    vpsrlw (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
7400 ; SANDY-NEXT:    vpsrlw $2, %xmm0, %xmm0 # sched: [1:1.00]
7401 ; SANDY-NEXT:    retq # sched: [1:1.00]
7403 ; HASWELL-LABEL: test_psrlw:
7404 ; HASWELL:       # BB#0:
7405 ; HASWELL-NEXT:    vpsrlw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7406 ; HASWELL-NEXT:    vpsrlw (%rdi), %xmm0, %xmm0 # sched: [2:1.00]
7407 ; HASWELL-NEXT:    vpsrlw $2, %xmm0, %xmm0 # sched: [1:1.00]
7408 ; HASWELL-NEXT:    retq # sched: [2:1.00]
7410 ; BROADWELL-LABEL: test_psrlw:
7411 ; BROADWELL:       # BB#0:
7412 ; BROADWELL-NEXT:    vpsrlw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7413 ; BROADWELL-NEXT:    vpsrlw (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
7414 ; BROADWELL-NEXT:    vpsrlw $2, %xmm0, %xmm0 # sched: [1:1.00]
7415 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
7417 ; SKYLAKE-LABEL: test_psrlw:
7418 ; SKYLAKE:       # BB#0:
7419 ; SKYLAKE-NEXT:    vpsrlw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7420 ; SKYLAKE-NEXT:    vpsrlw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7421 ; SKYLAKE-NEXT:    vpsrlw $2, %xmm0, %xmm0 # sched: [1:0.50]
7422 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7424 ; SKX-LABEL: test_psrlw:
7425 ; SKX:       # BB#0:
7426 ; SKX-NEXT:    vpsrlw %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
7427 ; SKX-NEXT:    vpsrlw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7428 ; SKX-NEXT:    vpsrlw $2, %xmm0, %xmm0 # sched: [1:0.50]
7429 ; SKX-NEXT:    retq # sched: [7:1.00]
7431 ; BTVER2-LABEL: test_psrlw:
7432 ; BTVER2:       # BB#0:
7433 ; BTVER2-NEXT:    vpsrlw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7434 ; BTVER2-NEXT:    vpsrlw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
7435 ; BTVER2-NEXT:    vpsrlw $2, %xmm0, %xmm0 # sched: [1:0.50]
7436 ; BTVER2-NEXT:    retq # sched: [4:1.00]
7438 ; ZNVER1-LABEL: test_psrlw:
7439 ; ZNVER1:       # BB#0:
7440 ; ZNVER1-NEXT:    vpsrlw %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
7441 ; ZNVER1-NEXT:    vpsrlw (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
7442 ; ZNVER1-NEXT:    vpsrlw $2, %xmm0, %xmm0 # sched: [1:0.25]
7443 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
7444   %1 = call <8 x i16> @llvm.x86.sse2.psrl.w(<8 x i16> %a0, <8 x i16> %a1)
7445   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
7446   %3 = call <8 x i16> @llvm.x86.sse2.psrl.w(<8 x i16> %1, <8 x i16> %2)
7447   %4 = call <8 x i16> @llvm.x86.sse2.psrli.w(<8 x i16> %3, i32 2)
7448   ret <8 x i16> %4
7450 declare <8 x i16> @llvm.x86.sse2.psrl.w(<8 x i16>, <8 x i16>) nounwind readnone
7451 declare <8 x i16> @llvm.x86.sse2.psrli.w(<8 x i16>, i32) nounwind readnone
7453 define <16 x i8> @test_psubb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
7454 ; GENERIC-LABEL: test_psubb:
7455 ; GENERIC:       # BB#0:
7456 ; GENERIC-NEXT:    psubb %xmm1, %xmm0 # sched: [1:0.50]
7457 ; GENERIC-NEXT:    psubb (%rdi), %xmm0 # sched: [7:0.50]
7458 ; GENERIC-NEXT:    retq # sched: [1:1.00]
7460 ; ATOM-LABEL: test_psubb:
7461 ; ATOM:       # BB#0:
7462 ; ATOM-NEXT:    psubb %xmm1, %xmm0 # sched: [1:0.50]
7463 ; ATOM-NEXT:    psubb (%rdi), %xmm0 # sched: [1:1.00]
7464 ; ATOM-NEXT:    nop # sched: [1:0.50]
7465 ; ATOM-NEXT:    nop # sched: [1:0.50]
7466 ; ATOM-NEXT:    nop # sched: [1:0.50]
7467 ; ATOM-NEXT:    nop # sched: [1:0.50]
7468 ; ATOM-NEXT:    retq # sched: [79:39.50]
7470 ; SLM-LABEL: test_psubb:
7471 ; SLM:       # BB#0:
7472 ; SLM-NEXT:    psubb %xmm1, %xmm0 # sched: [1:0.50]
7473 ; SLM-NEXT:    psubb (%rdi), %xmm0 # sched: [4:1.00]
7474 ; SLM-NEXT:    retq # sched: [4:1.00]
7476 ; SANDY-LABEL: test_psubb:
7477 ; SANDY:       # BB#0:
7478 ; SANDY-NEXT:    vpsubb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7479 ; SANDY-NEXT:    vpsubb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7480 ; SANDY-NEXT:    retq # sched: [1:1.00]
7482 ; HASWELL-LABEL: test_psubb:
7483 ; HASWELL:       # BB#0:
7484 ; HASWELL-NEXT:    vpsubb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7485 ; HASWELL-NEXT:    vpsubb (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
7486 ; HASWELL-NEXT:    retq # sched: [2:1.00]
7488 ; BROADWELL-LABEL: test_psubb:
7489 ; BROADWELL:       # BB#0:
7490 ; BROADWELL-NEXT:    vpsubb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7491 ; BROADWELL-NEXT:    vpsubb (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
7492 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
7494 ; SKYLAKE-LABEL: test_psubb:
7495 ; SKYLAKE:       # BB#0:
7496 ; SKYLAKE-NEXT:    vpsubb %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
7497 ; SKYLAKE-NEXT:    vpsubb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7498 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7500 ; SKX-LABEL: test_psubb:
7501 ; SKX:       # BB#0:
7502 ; SKX-NEXT:    vpsubb %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
7503 ; SKX-NEXT:    vpsubb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7504 ; SKX-NEXT:    retq # sched: [7:1.00]
7506 ; BTVER2-LABEL: test_psubb:
7507 ; BTVER2:       # BB#0:
7508 ; BTVER2-NEXT:    vpsubb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7509 ; BTVER2-NEXT:    vpsubb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
7510 ; BTVER2-NEXT:    retq # sched: [4:1.00]
7512 ; ZNVER1-LABEL: test_psubb:
7513 ; ZNVER1:       # BB#0:
7514 ; ZNVER1-NEXT:    vpsubb %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
7515 ; ZNVER1-NEXT:    vpsubb (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
7516 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
7517   %1 = sub <16 x i8> %a0, %a1
7518   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
7519   %3 = sub <16 x i8> %1, %2
7520   ret <16 x i8> %3
7523 define <4 x i32> @test_psubd(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
7524 ; GENERIC-LABEL: test_psubd:
7525 ; GENERIC:       # BB#0:
7526 ; GENERIC-NEXT:    psubd %xmm1, %xmm0 # sched: [1:0.50]
7527 ; GENERIC-NEXT:    psubd (%rdi), %xmm0 # sched: [7:0.50]
7528 ; GENERIC-NEXT:    retq # sched: [1:1.00]
7530 ; ATOM-LABEL: test_psubd:
7531 ; ATOM:       # BB#0:
7532 ; ATOM-NEXT:    psubd %xmm1, %xmm0 # sched: [1:0.50]
7533 ; ATOM-NEXT:    psubd (%rdi), %xmm0 # sched: [1:1.00]
7534 ; ATOM-NEXT:    nop # sched: [1:0.50]
7535 ; ATOM-NEXT:    nop # sched: [1:0.50]
7536 ; ATOM-NEXT:    nop # sched: [1:0.50]
7537 ; ATOM-NEXT:    nop # sched: [1:0.50]
7538 ; ATOM-NEXT:    retq # sched: [79:39.50]
7540 ; SLM-LABEL: test_psubd:
7541 ; SLM:       # BB#0:
7542 ; SLM-NEXT:    psubd %xmm1, %xmm0 # sched: [1:0.50]
7543 ; SLM-NEXT:    psubd (%rdi), %xmm0 # sched: [4:1.00]
7544 ; SLM-NEXT:    retq # sched: [4:1.00]
7546 ; SANDY-LABEL: test_psubd:
7547 ; SANDY:       # BB#0:
7548 ; SANDY-NEXT:    vpsubd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7549 ; SANDY-NEXT:    vpsubd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7550 ; SANDY-NEXT:    retq # sched: [1:1.00]
7552 ; HASWELL-LABEL: test_psubd:
7553 ; HASWELL:       # BB#0:
7554 ; HASWELL-NEXT:    vpsubd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7555 ; HASWELL-NEXT:    vpsubd (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
7556 ; HASWELL-NEXT:    retq # sched: [2:1.00]
7558 ; BROADWELL-LABEL: test_psubd:
7559 ; BROADWELL:       # BB#0:
7560 ; BROADWELL-NEXT:    vpsubd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7561 ; BROADWELL-NEXT:    vpsubd (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
7562 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
7564 ; SKYLAKE-LABEL: test_psubd:
7565 ; SKYLAKE:       # BB#0:
7566 ; SKYLAKE-NEXT:    vpsubd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
7567 ; SKYLAKE-NEXT:    vpsubd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7568 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7570 ; SKX-LABEL: test_psubd:
7571 ; SKX:       # BB#0:
7572 ; SKX-NEXT:    vpsubd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
7573 ; SKX-NEXT:    vpsubd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7574 ; SKX-NEXT:    retq # sched: [7:1.00]
7576 ; BTVER2-LABEL: test_psubd:
7577 ; BTVER2:       # BB#0:
7578 ; BTVER2-NEXT:    vpsubd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7579 ; BTVER2-NEXT:    vpsubd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
7580 ; BTVER2-NEXT:    retq # sched: [4:1.00]
7582 ; ZNVER1-LABEL: test_psubd:
7583 ; ZNVER1:       # BB#0:
7584 ; ZNVER1-NEXT:    vpsubd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
7585 ; ZNVER1-NEXT:    vpsubd (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
7586 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
7587   %1 = sub <4 x i32> %a0, %a1
7588   %2 = load <4 x i32>, <4 x i32> *%a2, align 16
7589   %3 = sub <4 x i32> %1, %2
7590   ret <4 x i32> %3
7593 define <2 x i64> @test_psubq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
7594 ; GENERIC-LABEL: test_psubq:
7595 ; GENERIC:       # BB#0:
7596 ; GENERIC-NEXT:    psubq %xmm1, %xmm0 # sched: [1:0.50]
7597 ; GENERIC-NEXT:    psubq (%rdi), %xmm0 # sched: [7:0.50]
7598 ; GENERIC-NEXT:    retq # sched: [1:1.00]
7600 ; ATOM-LABEL: test_psubq:
7601 ; ATOM:       # BB#0:
7602 ; ATOM-NEXT:    psubq %xmm1, %xmm0 # sched: [2:1.00]
7603 ; ATOM-NEXT:    psubq (%rdi), %xmm0 # sched: [3:1.50]
7604 ; ATOM-NEXT:    retq # sched: [79:39.50]
7606 ; SLM-LABEL: test_psubq:
7607 ; SLM:       # BB#0:
7608 ; SLM-NEXT:    psubq %xmm1, %xmm0 # sched: [1:0.50]
7609 ; SLM-NEXT:    psubq (%rdi), %xmm0 # sched: [4:1.00]
7610 ; SLM-NEXT:    retq # sched: [4:1.00]
7612 ; SANDY-LABEL: test_psubq:
7613 ; SANDY:       # BB#0:
7614 ; SANDY-NEXT:    vpsubq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7615 ; SANDY-NEXT:    vpsubq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7616 ; SANDY-NEXT:    retq # sched: [1:1.00]
7618 ; HASWELL-LABEL: test_psubq:
7619 ; HASWELL:       # BB#0:
7620 ; HASWELL-NEXT:    vpsubq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7621 ; HASWELL-NEXT:    vpsubq (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
7622 ; HASWELL-NEXT:    retq # sched: [2:1.00]
7624 ; BROADWELL-LABEL: test_psubq:
7625 ; BROADWELL:       # BB#0:
7626 ; BROADWELL-NEXT:    vpsubq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7627 ; BROADWELL-NEXT:    vpsubq (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
7628 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
7630 ; SKYLAKE-LABEL: test_psubq:
7631 ; SKYLAKE:       # BB#0:
7632 ; SKYLAKE-NEXT:    vpsubq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
7633 ; SKYLAKE-NEXT:    vpsubq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7634 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7636 ; SKX-LABEL: test_psubq:
7637 ; SKX:       # BB#0:
7638 ; SKX-NEXT:    vpsubq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
7639 ; SKX-NEXT:    vpsubq (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7640 ; SKX-NEXT:    retq # sched: [7:1.00]
7642 ; BTVER2-LABEL: test_psubq:
7643 ; BTVER2:       # BB#0:
7644 ; BTVER2-NEXT:    vpsubq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7645 ; BTVER2-NEXT:    vpsubq (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
7646 ; BTVER2-NEXT:    retq # sched: [4:1.00]
7648 ; ZNVER1-LABEL: test_psubq:
7649 ; ZNVER1:       # BB#0:
7650 ; ZNVER1-NEXT:    vpsubq %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
7651 ; ZNVER1-NEXT:    vpsubq (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
7652 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
7653   %1 = sub <2 x i64> %a0, %a1
7654   %2 = load <2 x i64>, <2 x i64> *%a2, align 16
7655   %3 = sub <2 x i64> %1, %2
7656   ret <2 x i64> %3
7659 define <16 x i8> @test_psubsb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
7660 ; GENERIC-LABEL: test_psubsb:
7661 ; GENERIC:       # BB#0:
7662 ; GENERIC-NEXT:    psubsb %xmm1, %xmm0 # sched: [1:0.50]
7663 ; GENERIC-NEXT:    psubsb (%rdi), %xmm0 # sched: [7:0.50]
7664 ; GENERIC-NEXT:    retq # sched: [1:1.00]
7666 ; ATOM-LABEL: test_psubsb:
7667 ; ATOM:       # BB#0:
7668 ; ATOM-NEXT:    psubsb %xmm1, %xmm0 # sched: [1:0.50]
7669 ; ATOM-NEXT:    psubsb (%rdi), %xmm0 # sched: [1:1.00]
7670 ; ATOM-NEXT:    nop # sched: [1:0.50]
7671 ; ATOM-NEXT:    nop # sched: [1:0.50]
7672 ; ATOM-NEXT:    nop # sched: [1:0.50]
7673 ; ATOM-NEXT:    nop # sched: [1:0.50]
7674 ; ATOM-NEXT:    retq # sched: [79:39.50]
7676 ; SLM-LABEL: test_psubsb:
7677 ; SLM:       # BB#0:
7678 ; SLM-NEXT:    psubsb %xmm1, %xmm0 # sched: [1:0.50]
7679 ; SLM-NEXT:    psubsb (%rdi), %xmm0 # sched: [4:1.00]
7680 ; SLM-NEXT:    retq # sched: [4:1.00]
7682 ; SANDY-LABEL: test_psubsb:
7683 ; SANDY:       # BB#0:
7684 ; SANDY-NEXT:    vpsubsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7685 ; SANDY-NEXT:    vpsubsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7686 ; SANDY-NEXT:    retq # sched: [1:1.00]
7688 ; HASWELL-LABEL: test_psubsb:
7689 ; HASWELL:       # BB#0:
7690 ; HASWELL-NEXT:    vpsubsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7691 ; HASWELL-NEXT:    vpsubsb (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
7692 ; HASWELL-NEXT:    retq # sched: [2:1.00]
7694 ; BROADWELL-LABEL: test_psubsb:
7695 ; BROADWELL:       # BB#0:
7696 ; BROADWELL-NEXT:    vpsubsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7697 ; BROADWELL-NEXT:    vpsubsb (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
7698 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
7700 ; SKYLAKE-LABEL: test_psubsb:
7701 ; SKYLAKE:       # BB#0:
7702 ; SKYLAKE-NEXT:    vpsubsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7703 ; SKYLAKE-NEXT:    vpsubsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7704 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7706 ; SKX-LABEL: test_psubsb:
7707 ; SKX:       # BB#0:
7708 ; SKX-NEXT:    vpsubsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7709 ; SKX-NEXT:    vpsubsb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7710 ; SKX-NEXT:    retq # sched: [7:1.00]
7712 ; BTVER2-LABEL: test_psubsb:
7713 ; BTVER2:       # BB#0:
7714 ; BTVER2-NEXT:    vpsubsb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7715 ; BTVER2-NEXT:    vpsubsb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
7716 ; BTVER2-NEXT:    retq # sched: [4:1.00]
7718 ; ZNVER1-LABEL: test_psubsb:
7719 ; ZNVER1:       # BB#0:
7720 ; ZNVER1-NEXT:    vpsubsb %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
7721 ; ZNVER1-NEXT:    vpsubsb (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
7722 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
7723   %1 = call <16 x i8> @llvm.x86.sse2.psubs.b(<16 x i8> %a0, <16 x i8> %a1)
7724   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
7725   %3 = call <16 x i8> @llvm.x86.sse2.psubs.b(<16 x i8> %1, <16 x i8> %2)
7726   ret <16 x i8> %3
7728 declare <16 x i8> @llvm.x86.sse2.psubs.b(<16 x i8>, <16 x i8>) nounwind readnone
7730 define <8 x i16> @test_psubsw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
7731 ; GENERIC-LABEL: test_psubsw:
7732 ; GENERIC:       # BB#0:
7733 ; GENERIC-NEXT:    psubsw %xmm1, %xmm0 # sched: [1:0.50]
7734 ; GENERIC-NEXT:    psubsw (%rdi), %xmm0 # sched: [7:0.50]
7735 ; GENERIC-NEXT:    retq # sched: [1:1.00]
7737 ; ATOM-LABEL: test_psubsw:
7738 ; ATOM:       # BB#0:
7739 ; ATOM-NEXT:    psubsw %xmm1, %xmm0 # sched: [1:0.50]
7740 ; ATOM-NEXT:    psubsw (%rdi), %xmm0 # sched: [1:1.00]
7741 ; ATOM-NEXT:    nop # sched: [1:0.50]
7742 ; ATOM-NEXT:    nop # sched: [1:0.50]
7743 ; ATOM-NEXT:    nop # sched: [1:0.50]
7744 ; ATOM-NEXT:    nop # sched: [1:0.50]
7745 ; ATOM-NEXT:    retq # sched: [79:39.50]
7747 ; SLM-LABEL: test_psubsw:
7748 ; SLM:       # BB#0:
7749 ; SLM-NEXT:    psubsw %xmm1, %xmm0 # sched: [1:0.50]
7750 ; SLM-NEXT:    psubsw (%rdi), %xmm0 # sched: [4:1.00]
7751 ; SLM-NEXT:    retq # sched: [4:1.00]
7753 ; SANDY-LABEL: test_psubsw:
7754 ; SANDY:       # BB#0:
7755 ; SANDY-NEXT:    vpsubsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7756 ; SANDY-NEXT:    vpsubsw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7757 ; SANDY-NEXT:    retq # sched: [1:1.00]
7759 ; HASWELL-LABEL: test_psubsw:
7760 ; HASWELL:       # BB#0:
7761 ; HASWELL-NEXT:    vpsubsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7762 ; HASWELL-NEXT:    vpsubsw (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
7763 ; HASWELL-NEXT:    retq # sched: [2:1.00]
7765 ; BROADWELL-LABEL: test_psubsw:
7766 ; BROADWELL:       # BB#0:
7767 ; BROADWELL-NEXT:    vpsubsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7768 ; BROADWELL-NEXT:    vpsubsw (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
7769 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
7771 ; SKYLAKE-LABEL: test_psubsw:
7772 ; SKYLAKE:       # BB#0:
7773 ; SKYLAKE-NEXT:    vpsubsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7774 ; SKYLAKE-NEXT:    vpsubsw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7775 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7777 ; SKX-LABEL: test_psubsw:
7778 ; SKX:       # BB#0:
7779 ; SKX-NEXT:    vpsubsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7780 ; SKX-NEXT:    vpsubsw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7781 ; SKX-NEXT:    retq # sched: [7:1.00]
7783 ; BTVER2-LABEL: test_psubsw:
7784 ; BTVER2:       # BB#0:
7785 ; BTVER2-NEXT:    vpsubsw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7786 ; BTVER2-NEXT:    vpsubsw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
7787 ; BTVER2-NEXT:    retq # sched: [4:1.00]
7789 ; ZNVER1-LABEL: test_psubsw:
7790 ; ZNVER1:       # BB#0:
7791 ; ZNVER1-NEXT:    vpsubsw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
7792 ; ZNVER1-NEXT:    vpsubsw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
7793 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
7794   %1 = call <8 x i16> @llvm.x86.sse2.psubs.w(<8 x i16> %a0, <8 x i16> %a1)
7795   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
7796   %3 = call <8 x i16> @llvm.x86.sse2.psubs.w(<8 x i16> %1, <8 x i16> %2)
7797   ret <8 x i16> %3
7799 declare <8 x i16> @llvm.x86.sse2.psubs.w(<8 x i16>, <8 x i16>) nounwind readnone
7801 define <16 x i8> @test_psubusb(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
7802 ; GENERIC-LABEL: test_psubusb:
7803 ; GENERIC:       # BB#0:
7804 ; GENERIC-NEXT:    psubusb %xmm1, %xmm0 # sched: [1:0.50]
7805 ; GENERIC-NEXT:    psubusb (%rdi), %xmm0 # sched: [7:0.50]
7806 ; GENERIC-NEXT:    retq # sched: [1:1.00]
7808 ; ATOM-LABEL: test_psubusb:
7809 ; ATOM:       # BB#0:
7810 ; ATOM-NEXT:    psubusb %xmm1, %xmm0 # sched: [1:0.50]
7811 ; ATOM-NEXT:    psubusb (%rdi), %xmm0 # sched: [1:1.00]
7812 ; ATOM-NEXT:    nop # sched: [1:0.50]
7813 ; ATOM-NEXT:    nop # sched: [1:0.50]
7814 ; ATOM-NEXT:    nop # sched: [1:0.50]
7815 ; ATOM-NEXT:    nop # sched: [1:0.50]
7816 ; ATOM-NEXT:    retq # sched: [79:39.50]
7818 ; SLM-LABEL: test_psubusb:
7819 ; SLM:       # BB#0:
7820 ; SLM-NEXT:    psubusb %xmm1, %xmm0 # sched: [1:0.50]
7821 ; SLM-NEXT:    psubusb (%rdi), %xmm0 # sched: [4:1.00]
7822 ; SLM-NEXT:    retq # sched: [4:1.00]
7824 ; SANDY-LABEL: test_psubusb:
7825 ; SANDY:       # BB#0:
7826 ; SANDY-NEXT:    vpsubusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7827 ; SANDY-NEXT:    vpsubusb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7828 ; SANDY-NEXT:    retq # sched: [1:1.00]
7830 ; HASWELL-LABEL: test_psubusb:
7831 ; HASWELL:       # BB#0:
7832 ; HASWELL-NEXT:    vpsubusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7833 ; HASWELL-NEXT:    vpsubusb (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
7834 ; HASWELL-NEXT:    retq # sched: [2:1.00]
7836 ; BROADWELL-LABEL: test_psubusb:
7837 ; BROADWELL:       # BB#0:
7838 ; BROADWELL-NEXT:    vpsubusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7839 ; BROADWELL-NEXT:    vpsubusb (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
7840 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
7842 ; SKYLAKE-LABEL: test_psubusb:
7843 ; SKYLAKE:       # BB#0:
7844 ; SKYLAKE-NEXT:    vpsubusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7845 ; SKYLAKE-NEXT:    vpsubusb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7846 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7848 ; SKX-LABEL: test_psubusb:
7849 ; SKX:       # BB#0:
7850 ; SKX-NEXT:    vpsubusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7851 ; SKX-NEXT:    vpsubusb (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7852 ; SKX-NEXT:    retq # sched: [7:1.00]
7854 ; BTVER2-LABEL: test_psubusb:
7855 ; BTVER2:       # BB#0:
7856 ; BTVER2-NEXT:    vpsubusb %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7857 ; BTVER2-NEXT:    vpsubusb (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
7858 ; BTVER2-NEXT:    retq # sched: [4:1.00]
7860 ; ZNVER1-LABEL: test_psubusb:
7861 ; ZNVER1:       # BB#0:
7862 ; ZNVER1-NEXT:    vpsubusb %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
7863 ; ZNVER1-NEXT:    vpsubusb (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
7864 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
7865   %1 = call <16 x i8> @llvm.x86.sse2.psubus.b(<16 x i8> %a0, <16 x i8> %a1)
7866   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
7867   %3 = call <16 x i8> @llvm.x86.sse2.psubus.b(<16 x i8> %1, <16 x i8> %2)
7868   ret <16 x i8> %3
7870 declare <16 x i8> @llvm.x86.sse2.psubus.b(<16 x i8>, <16 x i8>) nounwind readnone
7872 define <8 x i16> @test_psubusw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
7873 ; GENERIC-LABEL: test_psubusw:
7874 ; GENERIC:       # BB#0:
7875 ; GENERIC-NEXT:    psubusw %xmm1, %xmm0 # sched: [1:0.50]
7876 ; GENERIC-NEXT:    psubusw (%rdi), %xmm0 # sched: [7:0.50]
7877 ; GENERIC-NEXT:    retq # sched: [1:1.00]
7879 ; ATOM-LABEL: test_psubusw:
7880 ; ATOM:       # BB#0:
7881 ; ATOM-NEXT:    psubusw %xmm1, %xmm0 # sched: [1:0.50]
7882 ; ATOM-NEXT:    psubusw (%rdi), %xmm0 # sched: [1:1.00]
7883 ; ATOM-NEXT:    nop # sched: [1:0.50]
7884 ; ATOM-NEXT:    nop # sched: [1:0.50]
7885 ; ATOM-NEXT:    nop # sched: [1:0.50]
7886 ; ATOM-NEXT:    nop # sched: [1:0.50]
7887 ; ATOM-NEXT:    retq # sched: [79:39.50]
7889 ; SLM-LABEL: test_psubusw:
7890 ; SLM:       # BB#0:
7891 ; SLM-NEXT:    psubusw %xmm1, %xmm0 # sched: [1:0.50]
7892 ; SLM-NEXT:    psubusw (%rdi), %xmm0 # sched: [4:1.00]
7893 ; SLM-NEXT:    retq # sched: [4:1.00]
7895 ; SANDY-LABEL: test_psubusw:
7896 ; SANDY:       # BB#0:
7897 ; SANDY-NEXT:    vpsubusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7898 ; SANDY-NEXT:    vpsubusw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7899 ; SANDY-NEXT:    retq # sched: [1:1.00]
7901 ; HASWELL-LABEL: test_psubusw:
7902 ; HASWELL:       # BB#0:
7903 ; HASWELL-NEXT:    vpsubusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7904 ; HASWELL-NEXT:    vpsubusw (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
7905 ; HASWELL-NEXT:    retq # sched: [2:1.00]
7907 ; BROADWELL-LABEL: test_psubusw:
7908 ; BROADWELL:       # BB#0:
7909 ; BROADWELL-NEXT:    vpsubusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7910 ; BROADWELL-NEXT:    vpsubusw (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
7911 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
7913 ; SKYLAKE-LABEL: test_psubusw:
7914 ; SKYLAKE:       # BB#0:
7915 ; SKYLAKE-NEXT:    vpsubusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7916 ; SKYLAKE-NEXT:    vpsubusw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7917 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7919 ; SKX-LABEL: test_psubusw:
7920 ; SKX:       # BB#0:
7921 ; SKX-NEXT:    vpsubusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7922 ; SKX-NEXT:    vpsubusw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7923 ; SKX-NEXT:    retq # sched: [7:1.00]
7925 ; BTVER2-LABEL: test_psubusw:
7926 ; BTVER2:       # BB#0:
7927 ; BTVER2-NEXT:    vpsubusw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7928 ; BTVER2-NEXT:    vpsubusw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
7929 ; BTVER2-NEXT:    retq # sched: [4:1.00]
7931 ; ZNVER1-LABEL: test_psubusw:
7932 ; ZNVER1:       # BB#0:
7933 ; ZNVER1-NEXT:    vpsubusw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
7934 ; ZNVER1-NEXT:    vpsubusw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
7935 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
7936   %1 = call <8 x i16> @llvm.x86.sse2.psubus.w(<8 x i16> %a0, <8 x i16> %a1)
7937   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
7938   %3 = call <8 x i16> @llvm.x86.sse2.psubus.w(<8 x i16> %1, <8 x i16> %2)
7939   ret <8 x i16> %3
7941 declare <8 x i16> @llvm.x86.sse2.psubus.w(<8 x i16>, <8 x i16>) nounwind readnone
7943 define <8 x i16> @test_psubw(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
7944 ; GENERIC-LABEL: test_psubw:
7945 ; GENERIC:       # BB#0:
7946 ; GENERIC-NEXT:    psubw %xmm1, %xmm0 # sched: [1:0.50]
7947 ; GENERIC-NEXT:    psubw (%rdi), %xmm0 # sched: [7:0.50]
7948 ; GENERIC-NEXT:    retq # sched: [1:1.00]
7950 ; ATOM-LABEL: test_psubw:
7951 ; ATOM:       # BB#0:
7952 ; ATOM-NEXT:    psubw %xmm1, %xmm0 # sched: [1:0.50]
7953 ; ATOM-NEXT:    psubw (%rdi), %xmm0 # sched: [1:1.00]
7954 ; ATOM-NEXT:    nop # sched: [1:0.50]
7955 ; ATOM-NEXT:    nop # sched: [1:0.50]
7956 ; ATOM-NEXT:    nop # sched: [1:0.50]
7957 ; ATOM-NEXT:    nop # sched: [1:0.50]
7958 ; ATOM-NEXT:    retq # sched: [79:39.50]
7960 ; SLM-LABEL: test_psubw:
7961 ; SLM:       # BB#0:
7962 ; SLM-NEXT:    psubw %xmm1, %xmm0 # sched: [1:0.50]
7963 ; SLM-NEXT:    psubw (%rdi), %xmm0 # sched: [4:1.00]
7964 ; SLM-NEXT:    retq # sched: [4:1.00]
7966 ; SANDY-LABEL: test_psubw:
7967 ; SANDY:       # BB#0:
7968 ; SANDY-NEXT:    vpsubw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7969 ; SANDY-NEXT:    vpsubw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7970 ; SANDY-NEXT:    retq # sched: [1:1.00]
7972 ; HASWELL-LABEL: test_psubw:
7973 ; HASWELL:       # BB#0:
7974 ; HASWELL-NEXT:    vpsubw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7975 ; HASWELL-NEXT:    vpsubw (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
7976 ; HASWELL-NEXT:    retq # sched: [2:1.00]
7978 ; BROADWELL-LABEL: test_psubw:
7979 ; BROADWELL:       # BB#0:
7980 ; BROADWELL-NEXT:    vpsubw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7981 ; BROADWELL-NEXT:    vpsubw (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
7982 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
7984 ; SKYLAKE-LABEL: test_psubw:
7985 ; SKYLAKE:       # BB#0:
7986 ; SKYLAKE-NEXT:    vpsubw %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
7987 ; SKYLAKE-NEXT:    vpsubw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7988 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
7990 ; SKX-LABEL: test_psubw:
7991 ; SKX:       # BB#0:
7992 ; SKX-NEXT:    vpsubw %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
7993 ; SKX-NEXT:    vpsubw (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
7994 ; SKX-NEXT:    retq # sched: [7:1.00]
7996 ; BTVER2-LABEL: test_psubw:
7997 ; BTVER2:       # BB#0:
7998 ; BTVER2-NEXT:    vpsubw %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
7999 ; BTVER2-NEXT:    vpsubw (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
8000 ; BTVER2-NEXT:    retq # sched: [4:1.00]
8002 ; ZNVER1-LABEL: test_psubw:
8003 ; ZNVER1:       # BB#0:
8004 ; ZNVER1-NEXT:    vpsubw %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
8005 ; ZNVER1-NEXT:    vpsubw (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
8006 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
8007   %1 = sub <8 x i16> %a0, %a1
8008   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
8009   %3 = sub <8 x i16> %1, %2
8010   ret <8 x i16> %3
8013 define <16 x i8> @test_punpckhbw(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
8014 ; GENERIC-LABEL: test_punpckhbw:
8015 ; GENERIC:       # BB#0:
8016 ; GENERIC-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] sched: [1:0.50]
8017 ; GENERIC-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],mem[8],xmm0[9],mem[9],xmm0[10],mem[10],xmm0[11],mem[11],xmm0[12],mem[12],xmm0[13],mem[13],xmm0[14],mem[14],xmm0[15],mem[15] sched: [7:0.50]
8018 ; GENERIC-NEXT:    retq # sched: [1:1.00]
8020 ; ATOM-LABEL: test_punpckhbw:
8021 ; ATOM:       # BB#0:
8022 ; ATOM-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] sched: [1:1.00]
8023 ; ATOM-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],mem[8],xmm0[9],mem[9],xmm0[10],mem[10],xmm0[11],mem[11],xmm0[12],mem[12],xmm0[13],mem[13],xmm0[14],mem[14],xmm0[15],mem[15] sched: [1:1.00]
8024 ; ATOM-NEXT:    nop # sched: [1:0.50]
8025 ; ATOM-NEXT:    nop # sched: [1:0.50]
8026 ; ATOM-NEXT:    nop # sched: [1:0.50]
8027 ; ATOM-NEXT:    nop # sched: [1:0.50]
8028 ; ATOM-NEXT:    retq # sched: [79:39.50]
8030 ; SLM-LABEL: test_punpckhbw:
8031 ; SLM:       # BB#0:
8032 ; SLM-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] sched: [1:1.00]
8033 ; SLM-NEXT:    punpckhbw {{.*#+}} xmm0 = xmm0[8],mem[8],xmm0[9],mem[9],xmm0[10],mem[10],xmm0[11],mem[11],xmm0[12],mem[12],xmm0[13],mem[13],xmm0[14],mem[14],xmm0[15],mem[15] sched: [4:1.00]
8034 ; SLM-NEXT:    retq # sched: [4:1.00]
8036 ; SANDY-LABEL: test_punpckhbw:
8037 ; SANDY:       # BB#0:
8038 ; SANDY-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] sched: [1:0.50]
8039 ; SANDY-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],mem[8],xmm0[9],mem[9],xmm0[10],mem[10],xmm0[11],mem[11],xmm0[12],mem[12],xmm0[13],mem[13],xmm0[14],mem[14],xmm0[15],mem[15] sched: [7:0.50]
8040 ; SANDY-NEXT:    retq # sched: [1:1.00]
8042 ; HASWELL-LABEL: test_punpckhbw:
8043 ; HASWELL:       # BB#0:
8044 ; HASWELL-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] sched: [1:1.00]
8045 ; HASWELL-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],mem[8],xmm0[9],mem[9],xmm0[10],mem[10],xmm0[11],mem[11],xmm0[12],mem[12],xmm0[13],mem[13],xmm0[14],mem[14],xmm0[15],mem[15] sched: [1:1.00]
8046 ; HASWELL-NEXT:    retq # sched: [2:1.00]
8048 ; BROADWELL-LABEL: test_punpckhbw:
8049 ; BROADWELL:       # BB#0:
8050 ; BROADWELL-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] sched: [1:1.00]
8051 ; BROADWELL-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],mem[8],xmm0[9],mem[9],xmm0[10],mem[10],xmm0[11],mem[11],xmm0[12],mem[12],xmm0[13],mem[13],xmm0[14],mem[14],xmm0[15],mem[15] sched: [6:1.00]
8052 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
8054 ; SKYLAKE-LABEL: test_punpckhbw:
8055 ; SKYLAKE:       # BB#0:
8056 ; SKYLAKE-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] sched: [1:1.00]
8057 ; SKYLAKE-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],mem[8],xmm0[9],mem[9],xmm0[10],mem[10],xmm0[11],mem[11],xmm0[12],mem[12],xmm0[13],mem[13],xmm0[14],mem[14],xmm0[15],mem[15] sched: [7:1.00]
8058 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8060 ; SKX-LABEL: test_punpckhbw:
8061 ; SKX:       # BB#0:
8062 ; SKX-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] sched: [1:1.00]
8063 ; SKX-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],mem[8],xmm0[9],mem[9],xmm0[10],mem[10],xmm0[11],mem[11],xmm0[12],mem[12],xmm0[13],mem[13],xmm0[14],mem[14],xmm0[15],mem[15] sched: [7:1.00]
8064 ; SKX-NEXT:    retq # sched: [7:1.00]
8066 ; BTVER2-LABEL: test_punpckhbw:
8067 ; BTVER2:       # BB#0:
8068 ; BTVER2-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] sched: [1:0.50]
8069 ; BTVER2-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],mem[8],xmm0[9],mem[9],xmm0[10],mem[10],xmm0[11],mem[11],xmm0[12],mem[12],xmm0[13],mem[13],xmm0[14],mem[14],xmm0[15],mem[15] sched: [6:1.00]
8070 ; BTVER2-NEXT:    retq # sched: [4:1.00]
8072 ; ZNVER1-LABEL: test_punpckhbw:
8073 ; ZNVER1:       # BB#0:
8074 ; ZNVER1-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15] sched: [1:0.25]
8075 ; ZNVER1-NEXT:    vpunpckhbw {{.*#+}} xmm0 = xmm0[8],mem[8],xmm0[9],mem[9],xmm0[10],mem[10],xmm0[11],mem[11],xmm0[12],mem[12],xmm0[13],mem[13],xmm0[14],mem[14],xmm0[15],mem[15] sched: [8:0.50]
8076 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
8077   %1 = shufflevector <16 x i8> %a0, <16 x i8> %a1, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
8078   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
8079   %3 = shufflevector <16 x i8> %1, <16 x i8> %2, <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
8080   ret <16 x i8> %3
8083 define <4 x i32> @test_punpckhdq(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
8084 ; GENERIC-LABEL: test_punpckhdq:
8085 ; GENERIC:       # BB#0:
8086 ; GENERIC-NEXT:    punpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50]
8087 ; GENERIC-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [7:0.50]
8088 ; GENERIC-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
8089 ; GENERIC-NEXT:    retq # sched: [1:1.00]
8091 ; ATOM-LABEL: test_punpckhdq:
8092 ; ATOM:       # BB#0:
8093 ; ATOM-NEXT:    punpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
8094 ; ATOM-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [1:1.00]
8095 ; ATOM-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
8096 ; ATOM-NEXT:    nop # sched: [1:0.50]
8097 ; ATOM-NEXT:    nop # sched: [1:0.50]
8098 ; ATOM-NEXT:    retq # sched: [79:39.50]
8100 ; SLM-LABEL: test_punpckhdq:
8101 ; SLM:       # BB#0:
8102 ; SLM-NEXT:    punpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
8103 ; SLM-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [4:1.00]
8104 ; SLM-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
8105 ; SLM-NEXT:    retq # sched: [4:1.00]
8107 ; SANDY-LABEL: test_punpckhdq:
8108 ; SANDY:       # BB#0:
8109 ; SANDY-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50]
8110 ; SANDY-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [7:0.50]
8111 ; SANDY-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8112 ; SANDY-NEXT:    retq # sched: [1:1.00]
8114 ; HASWELL-LABEL: test_punpckhdq:
8115 ; HASWELL:       # BB#0:
8116 ; HASWELL-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
8117 ; HASWELL-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [1:1.00]
8118 ; HASWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8119 ; HASWELL-NEXT:    retq # sched: [2:1.00]
8121 ; BROADWELL-LABEL: test_punpckhdq:
8122 ; BROADWELL:       # BB#0:
8123 ; BROADWELL-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
8124 ; BROADWELL-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [6:1.00]
8125 ; BROADWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8126 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
8128 ; SKYLAKE-LABEL: test_punpckhdq:
8129 ; SKYLAKE:       # BB#0:
8130 ; SKYLAKE-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
8131 ; SKYLAKE-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [7:1.00]
8132 ; SKYLAKE-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8133 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8135 ; SKX-LABEL: test_punpckhdq:
8136 ; SKX:       # BB#0:
8137 ; SKX-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
8138 ; SKX-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [7:1.00]
8139 ; SKX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8140 ; SKX-NEXT:    retq # sched: [7:1.00]
8142 ; BTVER2-LABEL: test_punpckhdq:
8143 ; BTVER2:       # BB#0:
8144 ; BTVER2-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50]
8145 ; BTVER2-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [6:1.00]
8146 ; BTVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8147 ; BTVER2-NEXT:    retq # sched: [4:1.00]
8149 ; ZNVER1-LABEL: test_punpckhdq:
8150 ; ZNVER1:       # BB#0:
8151 ; ZNVER1-NEXT:    vpunpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.25]
8152 ; ZNVER1-NEXT:    vpunpckhdq {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [8:0.50]
8153 ; ZNVER1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
8154 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
8155   %1 = shufflevector <4 x i32> %a0, <4 x i32> %a1, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
8156   %2 = load <4 x i32>, <4 x i32> *%a2, align 16
8157   %3 = shufflevector <4 x i32> %a1, <4 x i32> %2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
8158   %4 = add <4 x i32> %1, %3
8159   ret <4 x i32> %4
8162 define <2 x i64> @test_punpckhqdq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
8163 ; GENERIC-LABEL: test_punpckhqdq:
8164 ; GENERIC:       # BB#0:
8165 ; GENERIC-NEXT:    punpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:0.50]
8166 ; GENERIC-NEXT:    punpckhqdq {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [7:0.50]
8167 ; GENERIC-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
8168 ; GENERIC-NEXT:    retq # sched: [1:1.00]
8170 ; ATOM-LABEL: test_punpckhqdq:
8171 ; ATOM:       # BB#0:
8172 ; ATOM-NEXT:    punpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00]
8173 ; ATOM-NEXT:    punpckhqdq {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [1:1.00]
8174 ; ATOM-NEXT:    paddq %xmm1, %xmm0 # sched: [2:1.00]
8175 ; ATOM-NEXT:    retq # sched: [79:39.50]
8177 ; SLM-LABEL: test_punpckhqdq:
8178 ; SLM:       # BB#0:
8179 ; SLM-NEXT:    punpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00]
8180 ; SLM-NEXT:    punpckhqdq {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [4:1.00]
8181 ; SLM-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
8182 ; SLM-NEXT:    retq # sched: [4:1.00]
8184 ; SANDY-LABEL: test_punpckhqdq:
8185 ; SANDY:       # BB#0:
8186 ; SANDY-NEXT:    vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:0.50]
8187 ; SANDY-NEXT:    vpunpckhqdq {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [7:0.50]
8188 ; SANDY-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8189 ; SANDY-NEXT:    retq # sched: [1:1.00]
8191 ; HASWELL-LABEL: test_punpckhqdq:
8192 ; HASWELL:       # BB#0:
8193 ; HASWELL-NEXT:    vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00]
8194 ; HASWELL-NEXT:    vpunpckhqdq {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [1:1.00]
8195 ; HASWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8196 ; HASWELL-NEXT:    retq # sched: [2:1.00]
8198 ; BROADWELL-LABEL: test_punpckhqdq:
8199 ; BROADWELL:       # BB#0:
8200 ; BROADWELL-NEXT:    vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00]
8201 ; BROADWELL-NEXT:    vpunpckhqdq {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [6:1.00]
8202 ; BROADWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8203 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
8205 ; SKYLAKE-LABEL: test_punpckhqdq:
8206 ; SKYLAKE:       # BB#0:
8207 ; SKYLAKE-NEXT:    vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00]
8208 ; SKYLAKE-NEXT:    vpunpckhqdq {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [7:1.00]
8209 ; SKYLAKE-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8210 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8212 ; SKX-LABEL: test_punpckhqdq:
8213 ; SKX:       # BB#0:
8214 ; SKX-NEXT:    vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00]
8215 ; SKX-NEXT:    vpunpckhqdq {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [7:1.00]
8216 ; SKX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8217 ; SKX-NEXT:    retq # sched: [7:1.00]
8219 ; BTVER2-LABEL: test_punpckhqdq:
8220 ; BTVER2:       # BB#0:
8221 ; BTVER2-NEXT:    vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:0.50]
8222 ; BTVER2-NEXT:    vpunpckhqdq {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [6:1.00]
8223 ; BTVER2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8224 ; BTVER2-NEXT:    retq # sched: [4:1.00]
8226 ; ZNVER1-LABEL: test_punpckhqdq:
8227 ; ZNVER1:       # BB#0:
8228 ; ZNVER1-NEXT:    vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:0.25]
8229 ; ZNVER1-NEXT:    vpunpckhqdq {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [8:0.50]
8230 ; ZNVER1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
8231 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
8232   %1 = shufflevector <2 x i64> %a0, <2 x i64> %a1, <2 x i32> <i32 1, i32 3>
8233   %2 = load <2 x i64>, <2 x i64> *%a2, align 16
8234   %3 = shufflevector <2 x i64> %a1, <2 x i64> %2, <2x i32> <i32 1, i32 3>
8235   %4 = add <2 x i64> %1, %3
8236   ret <2 x i64> %4
8239 define <8 x i16> @test_punpckhwd(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
8240 ; GENERIC-LABEL: test_punpckhwd:
8241 ; GENERIC:       # BB#0:
8242 ; GENERIC-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:0.50]
8243 ; GENERIC-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [7:0.50]
8244 ; GENERIC-NEXT:    retq # sched: [1:1.00]
8246 ; ATOM-LABEL: test_punpckhwd:
8247 ; ATOM:       # BB#0:
8248 ; ATOM-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:1.00]
8249 ; ATOM-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [1:1.00]
8250 ; ATOM-NEXT:    nop # sched: [1:0.50]
8251 ; ATOM-NEXT:    nop # sched: [1:0.50]
8252 ; ATOM-NEXT:    nop # sched: [1:0.50]
8253 ; ATOM-NEXT:    nop # sched: [1:0.50]
8254 ; ATOM-NEXT:    retq # sched: [79:39.50]
8256 ; SLM-LABEL: test_punpckhwd:
8257 ; SLM:       # BB#0:
8258 ; SLM-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:1.00]
8259 ; SLM-NEXT:    punpckhwd {{.*#+}} xmm0 = xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [4:1.00]
8260 ; SLM-NEXT:    retq # sched: [4:1.00]
8262 ; SANDY-LABEL: test_punpckhwd:
8263 ; SANDY:       # BB#0:
8264 ; SANDY-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:0.50]
8265 ; SANDY-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [7:0.50]
8266 ; SANDY-NEXT:    retq # sched: [1:1.00]
8268 ; HASWELL-LABEL: test_punpckhwd:
8269 ; HASWELL:       # BB#0:
8270 ; HASWELL-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:1.00]
8271 ; HASWELL-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [1:1.00]
8272 ; HASWELL-NEXT:    retq # sched: [2:1.00]
8274 ; BROADWELL-LABEL: test_punpckhwd:
8275 ; BROADWELL:       # BB#0:
8276 ; BROADWELL-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:1.00]
8277 ; BROADWELL-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [6:1.00]
8278 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
8280 ; SKYLAKE-LABEL: test_punpckhwd:
8281 ; SKYLAKE:       # BB#0:
8282 ; SKYLAKE-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:1.00]
8283 ; SKYLAKE-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [7:1.00]
8284 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8286 ; SKX-LABEL: test_punpckhwd:
8287 ; SKX:       # BB#0:
8288 ; SKX-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:1.00]
8289 ; SKX-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [7:1.00]
8290 ; SKX-NEXT:    retq # sched: [7:1.00]
8292 ; BTVER2-LABEL: test_punpckhwd:
8293 ; BTVER2:       # BB#0:
8294 ; BTVER2-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:0.50]
8295 ; BTVER2-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [6:1.00]
8296 ; BTVER2-NEXT:    retq # sched: [4:1.00]
8298 ; ZNVER1-LABEL: test_punpckhwd:
8299 ; ZNVER1:       # BB#0:
8300 ; ZNVER1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:0.25]
8301 ; ZNVER1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [8:0.50]
8302 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
8303   %1 = shufflevector <8 x i16> %a0, <8 x i16> %a1, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
8304   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
8305   %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
8306   ret <8 x i16> %3
8309 define <16 x i8> @test_punpcklbw(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
8310 ; GENERIC-LABEL: test_punpcklbw:
8311 ; GENERIC:       # BB#0:
8312 ; GENERIC-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:0.50]
8313 ; GENERIC-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [7:0.50]
8314 ; GENERIC-NEXT:    retq # sched: [1:1.00]
8316 ; ATOM-LABEL: test_punpcklbw:
8317 ; ATOM:       # BB#0:
8318 ; ATOM-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:1.00]
8319 ; ATOM-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [1:1.00]
8320 ; ATOM-NEXT:    nop # sched: [1:0.50]
8321 ; ATOM-NEXT:    nop # sched: [1:0.50]
8322 ; ATOM-NEXT:    nop # sched: [1:0.50]
8323 ; ATOM-NEXT:    nop # sched: [1:0.50]
8324 ; ATOM-NEXT:    retq # sched: [79:39.50]
8326 ; SLM-LABEL: test_punpcklbw:
8327 ; SLM:       # BB#0:
8328 ; SLM-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:1.00]
8329 ; SLM-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [4:1.00]
8330 ; SLM-NEXT:    retq # sched: [4:1.00]
8332 ; SANDY-LABEL: test_punpcklbw:
8333 ; SANDY:       # BB#0:
8334 ; SANDY-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:0.50]
8335 ; SANDY-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [7:0.50]
8336 ; SANDY-NEXT:    retq # sched: [1:1.00]
8338 ; HASWELL-LABEL: test_punpcklbw:
8339 ; HASWELL:       # BB#0:
8340 ; HASWELL-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:1.00]
8341 ; HASWELL-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [1:1.00]
8342 ; HASWELL-NEXT:    retq # sched: [2:1.00]
8344 ; BROADWELL-LABEL: test_punpcklbw:
8345 ; BROADWELL:       # BB#0:
8346 ; BROADWELL-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:1.00]
8347 ; BROADWELL-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [6:1.00]
8348 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
8350 ; SKYLAKE-LABEL: test_punpcklbw:
8351 ; SKYLAKE:       # BB#0:
8352 ; SKYLAKE-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:1.00]
8353 ; SKYLAKE-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [7:1.00]
8354 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8356 ; SKX-LABEL: test_punpcklbw:
8357 ; SKX:       # BB#0:
8358 ; SKX-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:1.00]
8359 ; SKX-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [7:1.00]
8360 ; SKX-NEXT:    retq # sched: [7:1.00]
8362 ; BTVER2-LABEL: test_punpcklbw:
8363 ; BTVER2:       # BB#0:
8364 ; BTVER2-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:0.50]
8365 ; BTVER2-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [6:1.00]
8366 ; BTVER2-NEXT:    retq # sched: [4:1.00]
8368 ; ZNVER1-LABEL: test_punpcklbw:
8369 ; ZNVER1:       # BB#0:
8370 ; ZNVER1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] sched: [1:0.25]
8371 ; ZNVER1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3],xmm0[4],mem[4],xmm0[5],mem[5],xmm0[6],mem[6],xmm0[7],mem[7] sched: [8:0.50]
8372 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
8373   %1 = shufflevector <16 x i8> %a0, <16 x i8> %a1, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
8374   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
8375   %3 = shufflevector <16 x i8> %1, <16 x i8> %2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>
8376   ret <16 x i8> %3
8379 define <4 x i32> @test_punpckldq(<4 x i32> %a0, <4 x i32> %a1, <4 x i32> *%a2) {
8380 ; GENERIC-LABEL: test_punpckldq:
8381 ; GENERIC:       # BB#0:
8382 ; GENERIC-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:0.50]
8383 ; GENERIC-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [7:0.50]
8384 ; GENERIC-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
8385 ; GENERIC-NEXT:    retq # sched: [1:1.00]
8387 ; ATOM-LABEL: test_punpckldq:
8388 ; ATOM:       # BB#0:
8389 ; ATOM-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
8390 ; ATOM-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [1:1.00]
8391 ; ATOM-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
8392 ; ATOM-NEXT:    nop # sched: [1:0.50]
8393 ; ATOM-NEXT:    nop # sched: [1:0.50]
8394 ; ATOM-NEXT:    retq # sched: [79:39.50]
8396 ; SLM-LABEL: test_punpckldq:
8397 ; SLM:       # BB#0:
8398 ; SLM-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
8399 ; SLM-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [4:1.00]
8400 ; SLM-NEXT:    paddd %xmm1, %xmm0 # sched: [1:0.50]
8401 ; SLM-NEXT:    retq # sched: [4:1.00]
8403 ; SANDY-LABEL: test_punpckldq:
8404 ; SANDY:       # BB#0:
8405 ; SANDY-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:0.50]
8406 ; SANDY-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [7:0.50]
8407 ; SANDY-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8408 ; SANDY-NEXT:    retq # sched: [1:1.00]
8410 ; HASWELL-LABEL: test_punpckldq:
8411 ; HASWELL:       # BB#0:
8412 ; HASWELL-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
8413 ; HASWELL-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [1:1.00]
8414 ; HASWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8415 ; HASWELL-NEXT:    retq # sched: [2:1.00]
8417 ; BROADWELL-LABEL: test_punpckldq:
8418 ; BROADWELL:       # BB#0:
8419 ; BROADWELL-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
8420 ; BROADWELL-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [6:1.00]
8421 ; BROADWELL-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8422 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
8424 ; SKYLAKE-LABEL: test_punpckldq:
8425 ; SKYLAKE:       # BB#0:
8426 ; SKYLAKE-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
8427 ; SKYLAKE-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [7:1.00]
8428 ; SKYLAKE-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8429 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8431 ; SKX-LABEL: test_punpckldq:
8432 ; SKX:       # BB#0:
8433 ; SKX-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
8434 ; SKX-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [7:1.00]
8435 ; SKX-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8436 ; SKX-NEXT:    retq # sched: [7:1.00]
8438 ; BTVER2-LABEL: test_punpckldq:
8439 ; BTVER2:       # BB#0:
8440 ; BTVER2-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:0.50]
8441 ; BTVER2-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [6:1.00]
8442 ; BTVER2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8443 ; BTVER2-NEXT:    retq # sched: [4:1.00]
8445 ; ZNVER1-LABEL: test_punpckldq:
8446 ; ZNVER1:       # BB#0:
8447 ; ZNVER1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:0.25]
8448 ; ZNVER1-NEXT:    vpunpckldq {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [8:0.50]
8449 ; ZNVER1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
8450 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
8451   %1 = shufflevector <4 x i32> %a0, <4 x i32> %a1, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
8452   %2 = load <4 x i32>, <4 x i32> *%a2, align 16
8453   %3 = shufflevector <4 x i32> %a1, <4 x i32> %2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
8454   %4 = add <4 x i32> %1, %3
8455   ret <4 x i32> %4
8458 define <2 x i64> @test_punpcklqdq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
8459 ; GENERIC-LABEL: test_punpcklqdq:
8460 ; GENERIC:       # BB#0:
8461 ; GENERIC-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:0.50]
8462 ; GENERIC-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [7:0.50]
8463 ; GENERIC-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
8464 ; GENERIC-NEXT:    retq # sched: [1:1.00]
8466 ; ATOM-LABEL: test_punpcklqdq:
8467 ; ATOM:       # BB#0:
8468 ; ATOM-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
8469 ; ATOM-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [1:1.00]
8470 ; ATOM-NEXT:    paddq %xmm1, %xmm0 # sched: [2:1.00]
8471 ; ATOM-NEXT:    retq # sched: [79:39.50]
8473 ; SLM-LABEL: test_punpcklqdq:
8474 ; SLM:       # BB#0:
8475 ; SLM-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
8476 ; SLM-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [4:1.00]
8477 ; SLM-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
8478 ; SLM-NEXT:    retq # sched: [4:1.00]
8480 ; SANDY-LABEL: test_punpcklqdq:
8481 ; SANDY:       # BB#0:
8482 ; SANDY-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:0.50]
8483 ; SANDY-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [7:0.50]
8484 ; SANDY-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8485 ; SANDY-NEXT:    retq # sched: [1:1.00]
8487 ; HASWELL-LABEL: test_punpcklqdq:
8488 ; HASWELL:       # BB#0:
8489 ; HASWELL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
8490 ; HASWELL-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [1:1.00]
8491 ; HASWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8492 ; HASWELL-NEXT:    retq # sched: [2:1.00]
8494 ; BROADWELL-LABEL: test_punpcklqdq:
8495 ; BROADWELL:       # BB#0:
8496 ; BROADWELL-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
8497 ; BROADWELL-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [6:1.00]
8498 ; BROADWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8499 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
8501 ; SKYLAKE-LABEL: test_punpcklqdq:
8502 ; SKYLAKE:       # BB#0:
8503 ; SKYLAKE-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
8504 ; SKYLAKE-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [7:1.00]
8505 ; SKYLAKE-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8506 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8508 ; SKX-LABEL: test_punpcklqdq:
8509 ; SKX:       # BB#0:
8510 ; SKX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
8511 ; SKX-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [7:1.00]
8512 ; SKX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8513 ; SKX-NEXT:    retq # sched: [7:1.00]
8515 ; BTVER2-LABEL: test_punpcklqdq:
8516 ; BTVER2:       # BB#0:
8517 ; BTVER2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:0.50]
8518 ; BTVER2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [6:1.00]
8519 ; BTVER2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8520 ; BTVER2-NEXT:    retq # sched: [4:1.00]
8522 ; ZNVER1-LABEL: test_punpcklqdq:
8523 ; ZNVER1:       # BB#0:
8524 ; ZNVER1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:0.25]
8525 ; ZNVER1-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [8:0.50]
8526 ; ZNVER1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
8527 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
8528   %1 = shufflevector <2 x i64> %a0, <2 x i64> %a1, <2 x i32> <i32 0, i32 2>
8529   %2 = load <2 x i64>, <2 x i64> *%a2, align 16
8530   %3 = shufflevector <2 x i64> %a1, <2 x i64> %2, <2x i32> <i32 0, i32 2>
8531   %4 = add <2 x i64> %1, %3
8532   ret <2 x i64> %4
8535 define <8 x i16> @test_punpcklwd(<8 x i16> %a0, <8 x i16> %a1, <8 x i16> *%a2) {
8536 ; GENERIC-LABEL: test_punpcklwd:
8537 ; GENERIC:       # BB#0:
8538 ; GENERIC-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50]
8539 ; GENERIC-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3] sched: [7:0.50]
8540 ; GENERIC-NEXT:    retq # sched: [1:1.00]
8542 ; ATOM-LABEL: test_punpcklwd:
8543 ; ATOM:       # BB#0:
8544 ; ATOM-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
8545 ; ATOM-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3] sched: [1:1.00]
8546 ; ATOM-NEXT:    nop # sched: [1:0.50]
8547 ; ATOM-NEXT:    nop # sched: [1:0.50]
8548 ; ATOM-NEXT:    nop # sched: [1:0.50]
8549 ; ATOM-NEXT:    nop # sched: [1:0.50]
8550 ; ATOM-NEXT:    retq # sched: [79:39.50]
8552 ; SLM-LABEL: test_punpcklwd:
8553 ; SLM:       # BB#0:
8554 ; SLM-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
8555 ; SLM-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3] sched: [4:1.00]
8556 ; SLM-NEXT:    retq # sched: [4:1.00]
8558 ; SANDY-LABEL: test_punpcklwd:
8559 ; SANDY:       # BB#0:
8560 ; SANDY-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50]
8561 ; SANDY-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3] sched: [7:0.50]
8562 ; SANDY-NEXT:    retq # sched: [1:1.00]
8564 ; HASWELL-LABEL: test_punpcklwd:
8565 ; HASWELL:       # BB#0:
8566 ; HASWELL-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
8567 ; HASWELL-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3] sched: [1:1.00]
8568 ; HASWELL-NEXT:    retq # sched: [2:1.00]
8570 ; BROADWELL-LABEL: test_punpcklwd:
8571 ; BROADWELL:       # BB#0:
8572 ; BROADWELL-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
8573 ; BROADWELL-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3] sched: [6:1.00]
8574 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
8576 ; SKYLAKE-LABEL: test_punpcklwd:
8577 ; SKYLAKE:       # BB#0:
8578 ; SKYLAKE-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
8579 ; SKYLAKE-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3] sched: [7:1.00]
8580 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8582 ; SKX-LABEL: test_punpcklwd:
8583 ; SKX:       # BB#0:
8584 ; SKX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
8585 ; SKX-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3] sched: [7:1.00]
8586 ; SKX-NEXT:    retq # sched: [7:1.00]
8588 ; BTVER2-LABEL: test_punpcklwd:
8589 ; BTVER2:       # BB#0:
8590 ; BTVER2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50]
8591 ; BTVER2-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3] sched: [6:1.00]
8592 ; BTVER2-NEXT:    retq # sched: [4:1.00]
8594 ; ZNVER1-LABEL: test_punpcklwd:
8595 ; ZNVER1:       # BB#0:
8596 ; ZNVER1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.25]
8597 ; ZNVER1-NEXT:    vpunpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3] sched: [8:0.50]
8598 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
8599   %1 = shufflevector <8 x i16> %a0, <8 x i16> %a1, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
8600   %2 = load <8 x i16>, <8 x i16> *%a2, align 16
8601   %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
8602   ret <8 x i16> %3
8605 define <2 x i64> @test_pxor(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
8606 ; GENERIC-LABEL: test_pxor:
8607 ; GENERIC:       # BB#0:
8608 ; GENERIC-NEXT:    pxor %xmm1, %xmm0 # sched: [1:0.33]
8609 ; GENERIC-NEXT:    pxor (%rdi), %xmm0 # sched: [7:0.50]
8610 ; GENERIC-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
8611 ; GENERIC-NEXT:    retq # sched: [1:1.00]
8613 ; ATOM-LABEL: test_pxor:
8614 ; ATOM:       # BB#0:
8615 ; ATOM-NEXT:    pxor %xmm1, %xmm0 # sched: [1:0.50]
8616 ; ATOM-NEXT:    pxor (%rdi), %xmm0 # sched: [1:1.00]
8617 ; ATOM-NEXT:    paddq %xmm1, %xmm0 # sched: [2:1.00]
8618 ; ATOM-NEXT:    retq # sched: [79:39.50]
8620 ; SLM-LABEL: test_pxor:
8621 ; SLM:       # BB#0:
8622 ; SLM-NEXT:    pxor %xmm1, %xmm0 # sched: [1:0.50]
8623 ; SLM-NEXT:    pxor (%rdi), %xmm0 # sched: [4:1.00]
8624 ; SLM-NEXT:    paddq %xmm1, %xmm0 # sched: [1:0.50]
8625 ; SLM-NEXT:    retq # sched: [4:1.00]
8627 ; SANDY-LABEL: test_pxor:
8628 ; SANDY:       # BB#0:
8629 ; SANDY-NEXT:    vpxor %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8630 ; SANDY-NEXT:    vpxor (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
8631 ; SANDY-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8632 ; SANDY-NEXT:    retq # sched: [1:1.00]
8634 ; HASWELL-LABEL: test_pxor:
8635 ; HASWELL:       # BB#0:
8636 ; HASWELL-NEXT:    vpxor %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8637 ; HASWELL-NEXT:    vpxor (%rdi), %xmm0, %xmm0 # sched: [1:0.50]
8638 ; HASWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8639 ; HASWELL-NEXT:    retq # sched: [2:1.00]
8641 ; BROADWELL-LABEL: test_pxor:
8642 ; BROADWELL:       # BB#0:
8643 ; BROADWELL-NEXT:    vpxor %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8644 ; BROADWELL-NEXT:    vpxor (%rdi), %xmm0, %xmm0 # sched: [6:0.50]
8645 ; BROADWELL-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8646 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
8648 ; SKYLAKE-LABEL: test_pxor:
8649 ; SKYLAKE:       # BB#0:
8650 ; SKYLAKE-NEXT:    vpxor %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8651 ; SKYLAKE-NEXT:    vpxor (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
8652 ; SKYLAKE-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8653 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8655 ; SKX-LABEL: test_pxor:
8656 ; SKX:       # BB#0:
8657 ; SKX-NEXT:    vpxor %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8658 ; SKX-NEXT:    vpxor (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
8659 ; SKX-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
8660 ; SKX-NEXT:    retq # sched: [7:1.00]
8662 ; BTVER2-LABEL: test_pxor:
8663 ; BTVER2:       # BB#0:
8664 ; BTVER2-NEXT:    vpxor %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8665 ; BTVER2-NEXT:    vpxor (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
8666 ; BTVER2-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
8667 ; BTVER2-NEXT:    retq # sched: [4:1.00]
8669 ; ZNVER1-LABEL: test_pxor:
8670 ; ZNVER1:       # BB#0:
8671 ; ZNVER1-NEXT:    vpxor %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
8672 ; ZNVER1-NEXT:    vpxor (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
8673 ; ZNVER1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
8674 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
8675   %1 = xor <2 x i64> %a0, %a1
8676   %2 = load <2 x i64>, <2 x i64> *%a2, align 16
8677   %3 = xor <2 x i64> %1, %2
8678   %4 = add <2 x i64> %3, %a1
8679   ret <2 x i64> %4
8682 define <2 x double> @test_shufpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
8683 ; GENERIC-LABEL: test_shufpd:
8684 ; GENERIC:       # BB#0:
8685 ; GENERIC-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0] sched: [1:1.00]
8686 ; GENERIC-NEXT:    shufpd {{.*#+}} xmm1 = xmm1[1],mem[0] sched: [7:1.00]
8687 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
8688 ; GENERIC-NEXT:    retq # sched: [1:1.00]
8690 ; ATOM-LABEL: test_shufpd:
8691 ; ATOM:       # BB#0:
8692 ; ATOM-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0] sched: [1:1.00]
8693 ; ATOM-NEXT:    shufpd {{.*#+}} xmm1 = xmm1[1],mem[0] sched: [1:1.00]
8694 ; ATOM-NEXT:    addpd %xmm1, %xmm0 # sched: [6:3.00]
8695 ; ATOM-NEXT:    retq # sched: [79:39.50]
8697 ; SLM-LABEL: test_shufpd:
8698 ; SLM:       # BB#0:
8699 ; SLM-NEXT:    shufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0] sched: [1:1.00]
8700 ; SLM-NEXT:    shufpd {{.*#+}} xmm1 = xmm1[1],mem[0] sched: [4:1.00]
8701 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
8702 ; SLM-NEXT:    retq # sched: [4:1.00]
8704 ; SANDY-LABEL: test_shufpd:
8705 ; SANDY:       # BB#0:
8706 ; SANDY-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0] sched: [1:1.00]
8707 ; SANDY-NEXT:    vshufpd {{.*#+}} xmm1 = xmm1[1],mem[0] sched: [7:1.00]
8708 ; SANDY-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8709 ; SANDY-NEXT:    retq # sched: [1:1.00]
8711 ; HASWELL-LABEL: test_shufpd:
8712 ; HASWELL:       # BB#0:
8713 ; HASWELL-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0] sched: [1:1.00]
8714 ; HASWELL-NEXT:    vshufpd {{.*#+}} xmm1 = xmm1[1],mem[0] sched: [1:1.00]
8715 ; HASWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8716 ; HASWELL-NEXT:    retq # sched: [2:1.00]
8718 ; BROADWELL-LABEL: test_shufpd:
8719 ; BROADWELL:       # BB#0:
8720 ; BROADWELL-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0] sched: [1:1.00]
8721 ; BROADWELL-NEXT:    vshufpd {{.*#+}} xmm1 = xmm1[1],mem[0] sched: [6:1.00]
8722 ; BROADWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8723 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
8725 ; SKYLAKE-LABEL: test_shufpd:
8726 ; SKYLAKE:       # BB#0:
8727 ; SKYLAKE-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0] sched: [1:1.00]
8728 ; SKYLAKE-NEXT:    vshufpd {{.*#+}} xmm1 = xmm1[1],mem[0] sched: [7:1.00]
8729 ; SKYLAKE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
8730 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8732 ; SKX-LABEL: test_shufpd:
8733 ; SKX:       # BB#0:
8734 ; SKX-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0] sched: [1:1.00]
8735 ; SKX-NEXT:    vshufpd {{.*#+}} xmm1 = xmm1[1],mem[0] sched: [7:1.00]
8736 ; SKX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
8737 ; SKX-NEXT:    retq # sched: [7:1.00]
8739 ; BTVER2-LABEL: test_shufpd:
8740 ; BTVER2:       # BB#0:
8741 ; BTVER2-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0] sched: [1:0.50]
8742 ; BTVER2-NEXT:    vshufpd {{.*#+}} xmm1 = xmm1[1],mem[0] sched: [6:1.00]
8743 ; BTVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8744 ; BTVER2-NEXT:    retq # sched: [4:1.00]
8746 ; ZNVER1-LABEL: test_shufpd:
8747 ; ZNVER1:       # BB#0:
8748 ; ZNVER1-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0] sched: [1:0.50]
8749 ; ZNVER1-NEXT:    vshufpd {{.*#+}} xmm1 = xmm1[1],mem[0] sched: [8:0.50]
8750 ; ZNVER1-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8751 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
8752   %1 = shufflevector <2 x double> %a0, <2 x double> %a1, <2 x i32> <i32 1, i32 2>
8753   %2 = load <2 x double>, <2 x double> *%a2, align 16
8754   %3 = shufflevector <2 x double> %a1, <2 x double> %2, <2 x i32> <i32 1, i32 2>
8755   %4 = fadd <2 x double> %1, %3
8756   ret <2 x double> %4
8759 define <2 x double> @test_sqrtpd(<2 x double> %a0, <2 x double> *%a1) {
8760 ; GENERIC-LABEL: test_sqrtpd:
8761 ; GENERIC:       # BB#0:
8762 ; GENERIC-NEXT:    sqrtpd %xmm0, %xmm1 # sched: [22:1.00]
8763 ; GENERIC-NEXT:    sqrtpd (%rdi), %xmm0 # sched: [28:1.00]
8764 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
8765 ; GENERIC-NEXT:    retq # sched: [1:1.00]
8767 ; ATOM-LABEL: test_sqrtpd:
8768 ; ATOM:       # BB#0:
8769 ; ATOM-NEXT:    sqrtpd %xmm0, %xmm1 # sched: [125:62.50]
8770 ; ATOM-NEXT:    sqrtpd (%rdi), %xmm0 # sched: [125:62.50]
8771 ; ATOM-NEXT:    addpd %xmm1, %xmm0 # sched: [6:3.00]
8772 ; ATOM-NEXT:    retq # sched: [79:39.50]
8774 ; SLM-LABEL: test_sqrtpd:
8775 ; SLM:       # BB#0:
8776 ; SLM-NEXT:    sqrtpd (%rdi), %xmm1 # sched: [18:1.00]
8777 ; SLM-NEXT:    sqrtpd %xmm0, %xmm0 # sched: [15:1.00]
8778 ; SLM-NEXT:    addpd %xmm0, %xmm1 # sched: [3:1.00]
8779 ; SLM-NEXT:    movapd %xmm1, %xmm0 # sched: [1:1.00]
8780 ; SLM-NEXT:    retq # sched: [4:1.00]
8782 ; SANDY-LABEL: test_sqrtpd:
8783 ; SANDY:       # BB#0:
8784 ; SANDY-NEXT:    vsqrtpd %xmm0, %xmm0 # sched: [22:1.00]
8785 ; SANDY-NEXT:    vsqrtpd (%rdi), %xmm1 # sched: [28:1.00]
8786 ; SANDY-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8787 ; SANDY-NEXT:    retq # sched: [1:1.00]
8789 ; HASWELL-LABEL: test_sqrtpd:
8790 ; HASWELL:       # BB#0:
8791 ; HASWELL-NEXT:    vsqrtpd %xmm0, %xmm0 # sched: [21:1.00]
8792 ; HASWELL-NEXT:    vsqrtpd (%rdi), %xmm1 # sched: [21:1.00]
8793 ; HASWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8794 ; HASWELL-NEXT:    retq # sched: [2:1.00]
8796 ; BROADWELL-LABEL: test_sqrtpd:
8797 ; BROADWELL:       # BB#0:
8798 ; BROADWELL-NEXT:    vsqrtpd %xmm0, %xmm0 # sched: [21:1.00]
8799 ; BROADWELL-NEXT:    vsqrtpd (%rdi), %xmm1 # sched: [26:1.00]
8800 ; BROADWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8801 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
8803 ; SKYLAKE-LABEL: test_sqrtpd:
8804 ; SKYLAKE:       # BB#0:
8805 ; SKYLAKE-NEXT:    vsqrtpd %xmm0, %xmm0 # sched: [18:1.00]
8806 ; SKYLAKE-NEXT:    vsqrtpd (%rdi), %xmm1 # sched: [24:1.00]
8807 ; SKYLAKE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
8808 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8810 ; SKX-LABEL: test_sqrtpd:
8811 ; SKX:       # BB#0:
8812 ; SKX-NEXT:    vsqrtpd %xmm0, %xmm0 # sched: [18:1.00]
8813 ; SKX-NEXT:    vsqrtpd (%rdi), %xmm1 # sched: [24:1.00]
8814 ; SKX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
8815 ; SKX-NEXT:    retq # sched: [7:1.00]
8817 ; BTVER2-LABEL: test_sqrtpd:
8818 ; BTVER2:       # BB#0:
8819 ; BTVER2-NEXT:    vsqrtpd (%rdi), %xmm1 # sched: [26:21.00]
8820 ; BTVER2-NEXT:    vsqrtpd %xmm0, %xmm0 # sched: [21:21.00]
8821 ; BTVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8822 ; BTVER2-NEXT:    retq # sched: [4:1.00]
8824 ; ZNVER1-LABEL: test_sqrtpd:
8825 ; ZNVER1:       # BB#0:
8826 ; ZNVER1-NEXT:    vsqrtpd (%rdi), %xmm1 # sched: [27:1.00]
8827 ; ZNVER1-NEXT:    vsqrtpd %xmm0, %xmm0 # sched: [20:1.00]
8828 ; ZNVER1-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8829 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
8830   %1 = call <2 x double> @llvm.x86.sse2.sqrt.pd(<2 x double> %a0)
8831   %2 = load <2 x double>, <2 x double> *%a1, align 16
8832   %3 = call <2 x double> @llvm.x86.sse2.sqrt.pd(<2 x double> %2)
8833   %4 = fadd <2 x double> %1, %3
8834   ret <2 x double> %4
8836 declare <2 x double> @llvm.x86.sse2.sqrt.pd(<2 x double>) nounwind readnone
8838 ; TODO - sqrtsd_m
8840 define <2 x double> @test_sqrtsd(<2 x double> %a0, <2 x double> *%a1) {
8841 ; GENERIC-LABEL: test_sqrtsd:
8842 ; GENERIC:       # BB#0:
8843 ; GENERIC-NEXT:    sqrtsd %xmm0, %xmm0 # sched: [22:1.00]
8844 ; GENERIC-NEXT:    movapd (%rdi), %xmm1 # sched: [6:0.50]
8845 ; GENERIC-NEXT:    sqrtsd %xmm1, %xmm1 # sched: [22:1.00]
8846 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
8847 ; GENERIC-NEXT:    retq # sched: [1:1.00]
8849 ; ATOM-LABEL: test_sqrtsd:
8850 ; ATOM:       # BB#0:
8851 ; ATOM-NEXT:    movapd (%rdi), %xmm1 # sched: [1:1.00]
8852 ; ATOM-NEXT:    sqrtsd %xmm0, %xmm0
8853 ; ATOM-NEXT:    sqrtsd %xmm1, %xmm1
8854 ; ATOM-NEXT:    addpd %xmm1, %xmm0 # sched: [6:3.00]
8855 ; ATOM-NEXT:    retq # sched: [79:39.50]
8857 ; SLM-LABEL: test_sqrtsd:
8858 ; SLM:       # BB#0:
8859 ; SLM-NEXT:    movapd (%rdi), %xmm1 # sched: [3:1.00]
8860 ; SLM-NEXT:    sqrtsd %xmm0, %xmm0 # sched: [18:1.00]
8861 ; SLM-NEXT:    sqrtsd %xmm1, %xmm1 # sched: [18:1.00]
8862 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
8863 ; SLM-NEXT:    retq # sched: [4:1.00]
8865 ; SANDY-LABEL: test_sqrtsd:
8866 ; SANDY:       # BB#0:
8867 ; SANDY-NEXT:    vsqrtsd %xmm0, %xmm0, %xmm0 # sched: [21:1.00]
8868 ; SANDY-NEXT:    vmovapd (%rdi), %xmm1 # sched: [6:0.50]
8869 ; SANDY-NEXT:    vsqrtsd %xmm1, %xmm1, %xmm1 # sched: [21:1.00]
8870 ; SANDY-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8871 ; SANDY-NEXT:    retq # sched: [1:1.00]
8873 ; HASWELL-LABEL: test_sqrtsd:
8874 ; HASWELL:       # BB#0:
8875 ; HASWELL-NEXT:    vsqrtsd %xmm0, %xmm0, %xmm0 # sched: [21:1.00]
8876 ; HASWELL-NEXT:    vmovapd (%rdi), %xmm1 # sched: [1:0.50]
8877 ; HASWELL-NEXT:    vsqrtsd %xmm1, %xmm1, %xmm1 # sched: [21:1.00]
8878 ; HASWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8879 ; HASWELL-NEXT:    retq # sched: [2:1.00]
8881 ; BROADWELL-LABEL: test_sqrtsd:
8882 ; BROADWELL:       # BB#0:
8883 ; BROADWELL-NEXT:    vsqrtsd %xmm0, %xmm0, %xmm0 # sched: [21:1.00]
8884 ; BROADWELL-NEXT:    vmovapd (%rdi), %xmm1 # sched: [5:0.50]
8885 ; BROADWELL-NEXT:    vsqrtsd %xmm1, %xmm1, %xmm1 # sched: [21:1.00]
8886 ; BROADWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8887 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
8889 ; SKYLAKE-LABEL: test_sqrtsd:
8890 ; SKYLAKE:       # BB#0:
8891 ; SKYLAKE-NEXT:    vsqrtsd %xmm0, %xmm0, %xmm0 # sched: [18:1.00]
8892 ; SKYLAKE-NEXT:    vmovapd (%rdi), %xmm1 # sched: [6:0.50]
8893 ; SKYLAKE-NEXT:    vsqrtsd %xmm1, %xmm1, %xmm1 # sched: [18:1.00]
8894 ; SKYLAKE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
8895 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8897 ; SKX-LABEL: test_sqrtsd:
8898 ; SKX:       # BB#0:
8899 ; SKX-NEXT:    vsqrtsd %xmm0, %xmm0, %xmm0 # sched: [18:1.00]
8900 ; SKX-NEXT:    vmovapd (%rdi), %xmm1 # sched: [6:0.50]
8901 ; SKX-NEXT:    vsqrtsd %xmm1, %xmm1, %xmm1 # sched: [18:1.00]
8902 ; SKX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
8903 ; SKX-NEXT:    retq # sched: [7:1.00]
8905 ; BTVER2-LABEL: test_sqrtsd:
8906 ; BTVER2:       # BB#0:
8907 ; BTVER2-NEXT:    vmovapd (%rdi), %xmm1 # sched: [5:1.00]
8908 ; BTVER2-NEXT:    vsqrtsd %xmm0, %xmm0, %xmm0 # sched: [26:21.00]
8909 ; BTVER2-NEXT:    vsqrtsd %xmm1, %xmm1, %xmm1 # sched: [26:21.00]
8910 ; BTVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8911 ; BTVER2-NEXT:    retq # sched: [4:1.00]
8913 ; ZNVER1-LABEL: test_sqrtsd:
8914 ; ZNVER1:       # BB#0:
8915 ; ZNVER1-NEXT:    vmovapd (%rdi), %xmm1 # sched: [8:0.50]
8916 ; ZNVER1-NEXT:    vsqrtsd %xmm0, %xmm0, %xmm0 # sched: [27:1.00]
8917 ; ZNVER1-NEXT:    vsqrtsd %xmm1, %xmm1, %xmm1 # sched: [27:1.00]
8918 ; ZNVER1-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8919 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
8920   %1 = call <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double> %a0)
8921   %2 = load <2 x double>, <2 x double> *%a1, align 16
8922   %3 = call <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double> %2)
8923   %4 = fadd <2 x double> %1, %3
8924   ret <2 x double> %4
8926 declare <2 x double> @llvm.x86.sse2.sqrt.sd(<2 x double>) nounwind readnone
8928 define <2 x double> @test_subpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
8929 ; GENERIC-LABEL: test_subpd:
8930 ; GENERIC:       # BB#0:
8931 ; GENERIC-NEXT:    subpd %xmm1, %xmm0 # sched: [3:1.00]
8932 ; GENERIC-NEXT:    subpd (%rdi), %xmm0 # sched: [9:1.00]
8933 ; GENERIC-NEXT:    retq # sched: [1:1.00]
8935 ; ATOM-LABEL: test_subpd:
8936 ; ATOM:       # BB#0:
8937 ; ATOM-NEXT:    subpd %xmm1, %xmm0 # sched: [6:3.00]
8938 ; ATOM-NEXT:    subpd (%rdi), %xmm0 # sched: [7:3.50]
8939 ; ATOM-NEXT:    retq # sched: [79:39.50]
8941 ; SLM-LABEL: test_subpd:
8942 ; SLM:       # BB#0:
8943 ; SLM-NEXT:    subpd %xmm1, %xmm0 # sched: [3:1.00]
8944 ; SLM-NEXT:    subpd (%rdi), %xmm0 # sched: [6:1.00]
8945 ; SLM-NEXT:    retq # sched: [4:1.00]
8947 ; SANDY-LABEL: test_subpd:
8948 ; SANDY:       # BB#0:
8949 ; SANDY-NEXT:    vsubpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8950 ; SANDY-NEXT:    vsubpd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
8951 ; SANDY-NEXT:    retq # sched: [1:1.00]
8953 ; HASWELL-LABEL: test_subpd:
8954 ; HASWELL:       # BB#0:
8955 ; HASWELL-NEXT:    vsubpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8956 ; HASWELL-NEXT:    vsubpd (%rdi), %xmm0, %xmm0 # sched: [3:1.00]
8957 ; HASWELL-NEXT:    retq # sched: [2:1.00]
8959 ; BROADWELL-LABEL: test_subpd:
8960 ; BROADWELL:       # BB#0:
8961 ; BROADWELL-NEXT:    vsubpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8962 ; BROADWELL-NEXT:    vsubpd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
8963 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
8965 ; SKYLAKE-LABEL: test_subpd:
8966 ; SKYLAKE:       # BB#0:
8967 ; SKYLAKE-NEXT:    vsubpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
8968 ; SKYLAKE-NEXT:    vsubpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
8969 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
8971 ; SKX-LABEL: test_subpd:
8972 ; SKX:       # BB#0:
8973 ; SKX-NEXT:    vsubpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
8974 ; SKX-NEXT:    vsubpd (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
8975 ; SKX-NEXT:    retq # sched: [7:1.00]
8977 ; BTVER2-LABEL: test_subpd:
8978 ; BTVER2:       # BB#0:
8979 ; BTVER2-NEXT:    vsubpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8980 ; BTVER2-NEXT:    vsubpd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
8981 ; BTVER2-NEXT:    retq # sched: [4:1.00]
8983 ; ZNVER1-LABEL: test_subpd:
8984 ; ZNVER1:       # BB#0:
8985 ; ZNVER1-NEXT:    vsubpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
8986 ; ZNVER1-NEXT:    vsubpd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
8987 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
8988   %1 = fsub <2 x double> %a0, %a1
8989   %2 = load <2 x double>, <2 x double> *%a2, align 16
8990   %3 = fsub <2 x double> %1, %2
8991   ret <2 x double> %3
8994 define double @test_subsd(double %a0, double %a1, double *%a2) {
8995 ; GENERIC-LABEL: test_subsd:
8996 ; GENERIC:       # BB#0:
8997 ; GENERIC-NEXT:    subsd %xmm1, %xmm0 # sched: [3:1.00]
8998 ; GENERIC-NEXT:    subsd (%rdi), %xmm0 # sched: [9:1.00]
8999 ; GENERIC-NEXT:    retq # sched: [1:1.00]
9001 ; ATOM-LABEL: test_subsd:
9002 ; ATOM:       # BB#0:
9003 ; ATOM-NEXT:    subsd %xmm1, %xmm0 # sched: [5:5.00]
9004 ; ATOM-NEXT:    subsd (%rdi), %xmm0 # sched: [5:5.00]
9005 ; ATOM-NEXT:    retq # sched: [79:39.50]
9007 ; SLM-LABEL: test_subsd:
9008 ; SLM:       # BB#0:
9009 ; SLM-NEXT:    subsd %xmm1, %xmm0 # sched: [3:1.00]
9010 ; SLM-NEXT:    subsd (%rdi), %xmm0 # sched: [6:1.00]
9011 ; SLM-NEXT:    retq # sched: [4:1.00]
9013 ; SANDY-LABEL: test_subsd:
9014 ; SANDY:       # BB#0:
9015 ; SANDY-NEXT:    vsubsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9016 ; SANDY-NEXT:    vsubsd (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
9017 ; SANDY-NEXT:    retq # sched: [1:1.00]
9019 ; HASWELL-LABEL: test_subsd:
9020 ; HASWELL:       # BB#0:
9021 ; HASWELL-NEXT:    vsubsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9022 ; HASWELL-NEXT:    vsubsd (%rdi), %xmm0, %xmm0 # sched: [3:1.00]
9023 ; HASWELL-NEXT:    retq # sched: [2:1.00]
9025 ; BROADWELL-LABEL: test_subsd:
9026 ; BROADWELL:       # BB#0:
9027 ; BROADWELL-NEXT:    vsubsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9028 ; BROADWELL-NEXT:    vsubsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
9029 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
9031 ; SKYLAKE-LABEL: test_subsd:
9032 ; SKYLAKE:       # BB#0:
9033 ; SKYLAKE-NEXT:    vsubsd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
9034 ; SKYLAKE-NEXT:    vsubsd (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
9035 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
9037 ; SKX-LABEL: test_subsd:
9038 ; SKX:       # BB#0:
9039 ; SKX-NEXT:    vsubsd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
9040 ; SKX-NEXT:    vsubsd (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
9041 ; SKX-NEXT:    retq # sched: [7:1.00]
9043 ; BTVER2-LABEL: test_subsd:
9044 ; BTVER2:       # BB#0:
9045 ; BTVER2-NEXT:    vsubsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9046 ; BTVER2-NEXT:    vsubsd (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
9047 ; BTVER2-NEXT:    retq # sched: [4:1.00]
9049 ; ZNVER1-LABEL: test_subsd:
9050 ; ZNVER1:       # BB#0:
9051 ; ZNVER1-NEXT:    vsubsd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9052 ; ZNVER1-NEXT:    vsubsd (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
9053 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
9054   %1 = fsub double %a0, %a1
9055   %2 = load double, double *%a2, align 8
9056   %3 = fsub double %1, %2
9057   ret double %3
9060 define i32 @test_ucomisd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
9061 ; GENERIC-LABEL: test_ucomisd:
9062 ; GENERIC:       # BB#0:
9063 ; GENERIC-NEXT:    ucomisd %xmm1, %xmm0 # sched: [3:1.00]
9064 ; GENERIC-NEXT:    setnp %al # sched: [1:0.50]
9065 ; GENERIC-NEXT:    sete %cl # sched: [1:0.50]
9066 ; GENERIC-NEXT:    andb %al, %cl # sched: [1:0.33]
9067 ; GENERIC-NEXT:    ucomisd (%rdi), %xmm0 # sched: [7:1.00]
9068 ; GENERIC-NEXT:    setnp %al # sched: [1:0.50]
9069 ; GENERIC-NEXT:    sete %dl # sched: [1:0.50]
9070 ; GENERIC-NEXT:    andb %al, %dl # sched: [1:0.33]
9071 ; GENERIC-NEXT:    orb %cl, %dl # sched: [1:0.33]
9072 ; GENERIC-NEXT:    movzbl %dl, %eax # sched: [1:0.33]
9073 ; GENERIC-NEXT:    retq # sched: [1:1.00]
9075 ; ATOM-LABEL: test_ucomisd:
9076 ; ATOM:       # BB#0:
9077 ; ATOM-NEXT:    ucomisd %xmm1, %xmm0 # sched: [9:4.50]
9078 ; ATOM-NEXT:    setnp %al # sched: [1:0.50]
9079 ; ATOM-NEXT:    sete %cl # sched: [1:0.50]
9080 ; ATOM-NEXT:    andb %al, %cl # sched: [1:0.50]
9081 ; ATOM-NEXT:    ucomisd (%rdi), %xmm0 # sched: [10:5.00]
9082 ; ATOM-NEXT:    setnp %al # sched: [1:0.50]
9083 ; ATOM-NEXT:    sete %dl # sched: [1:0.50]
9084 ; ATOM-NEXT:    andb %al, %dl # sched: [1:0.50]
9085 ; ATOM-NEXT:    orb %cl, %dl # sched: [1:0.50]
9086 ; ATOM-NEXT:    movzbl %dl, %eax # sched: [1:1.00]
9087 ; ATOM-NEXT:    retq # sched: [79:39.50]
9089 ; SLM-LABEL: test_ucomisd:
9090 ; SLM:       # BB#0:
9091 ; SLM-NEXT:    ucomisd %xmm1, %xmm0 # sched: [3:1.00]
9092 ; SLM-NEXT:    setnp %al # sched: [1:0.50]
9093 ; SLM-NEXT:    sete %cl # sched: [1:0.50]
9094 ; SLM-NEXT:    andb %al, %cl # sched: [1:0.50]
9095 ; SLM-NEXT:    ucomisd (%rdi), %xmm0 # sched: [6:1.00]
9096 ; SLM-NEXT:    setnp %al # sched: [1:0.50]
9097 ; SLM-NEXT:    sete %dl # sched: [1:0.50]
9098 ; SLM-NEXT:    andb %al, %dl # sched: [1:0.50]
9099 ; SLM-NEXT:    orb %cl, %dl # sched: [1:0.50]
9100 ; SLM-NEXT:    movzbl %dl, %eax # sched: [1:0.50]
9101 ; SLM-NEXT:    retq # sched: [4:1.00]
9103 ; SANDY-LABEL: test_ucomisd:
9104 ; SANDY:       # BB#0:
9105 ; SANDY-NEXT:    vucomisd %xmm1, %xmm0 # sched: [3:1.00]
9106 ; SANDY-NEXT:    setnp %al # sched: [1:0.50]
9107 ; SANDY-NEXT:    sete %cl # sched: [1:0.50]
9108 ; SANDY-NEXT:    andb %al, %cl # sched: [1:0.33]
9109 ; SANDY-NEXT:    vucomisd (%rdi), %xmm0 # sched: [7:1.00]
9110 ; SANDY-NEXT:    setnp %al # sched: [1:0.50]
9111 ; SANDY-NEXT:    sete %dl # sched: [1:0.50]
9112 ; SANDY-NEXT:    andb %al, %dl # sched: [1:0.33]
9113 ; SANDY-NEXT:    orb %cl, %dl # sched: [1:0.33]
9114 ; SANDY-NEXT:    movzbl %dl, %eax # sched: [1:0.33]
9115 ; SANDY-NEXT:    retq # sched: [1:1.00]
9117 ; HASWELL-LABEL: test_ucomisd:
9118 ; HASWELL:       # BB#0:
9119 ; HASWELL-NEXT:    vucomisd %xmm1, %xmm0 # sched: [3:1.00]
9120 ; HASWELL-NEXT:    setnp %al # sched: [1:0.50]
9121 ; HASWELL-NEXT:    sete %cl # sched: [1:0.50]
9122 ; HASWELL-NEXT:    andb %al, %cl # sched: [1:0.25]
9123 ; HASWELL-NEXT:    vucomisd (%rdi), %xmm0 # sched: [7:1.00]
9124 ; HASWELL-NEXT:    setnp %al # sched: [1:0.50]
9125 ; HASWELL-NEXT:    sete %dl # sched: [1:0.50]
9126 ; HASWELL-NEXT:    andb %al, %dl # sched: [1:0.25]
9127 ; HASWELL-NEXT:    orb %cl, %dl # sched: [1:0.25]
9128 ; HASWELL-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
9129 ; HASWELL-NEXT:    retq # sched: [2:1.00]
9131 ; BROADWELL-LABEL: test_ucomisd:
9132 ; BROADWELL:       # BB#0:
9133 ; BROADWELL-NEXT:    vucomisd %xmm1, %xmm0 # sched: [3:1.00]
9134 ; BROADWELL-NEXT:    setnp %al # sched: [1:0.50]
9135 ; BROADWELL-NEXT:    sete %cl # sched: [1:0.50]
9136 ; BROADWELL-NEXT:    andb %al, %cl # sched: [1:0.25]
9137 ; BROADWELL-NEXT:    vucomisd (%rdi), %xmm0 # sched: [8:1.00]
9138 ; BROADWELL-NEXT:    setnp %al # sched: [1:0.50]
9139 ; BROADWELL-NEXT:    sete %dl # sched: [1:0.50]
9140 ; BROADWELL-NEXT:    andb %al, %dl # sched: [1:0.25]
9141 ; BROADWELL-NEXT:    orb %cl, %dl # sched: [1:0.25]
9142 ; BROADWELL-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
9143 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
9145 ; SKYLAKE-LABEL: test_ucomisd:
9146 ; SKYLAKE:       # BB#0:
9147 ; SKYLAKE-NEXT:    vucomisd %xmm1, %xmm0 # sched: [3:1.00]
9148 ; SKYLAKE-NEXT:    setnp %al # sched: [1:0.50]
9149 ; SKYLAKE-NEXT:    sete %cl # sched: [1:0.50]
9150 ; SKYLAKE-NEXT:    andb %al, %cl # sched: [1:0.25]
9151 ; SKYLAKE-NEXT:    vucomisd (%rdi), %xmm0 # sched: [8:1.00]
9152 ; SKYLAKE-NEXT:    setnp %al # sched: [1:0.50]
9153 ; SKYLAKE-NEXT:    sete %dl # sched: [1:0.50]
9154 ; SKYLAKE-NEXT:    andb %al, %dl # sched: [1:0.25]
9155 ; SKYLAKE-NEXT:    orb %cl, %dl # sched: [1:0.25]
9156 ; SKYLAKE-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
9157 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
9159 ; SKX-LABEL: test_ucomisd:
9160 ; SKX:       # BB#0:
9161 ; SKX-NEXT:    vucomisd %xmm1, %xmm0 # sched: [3:1.00]
9162 ; SKX-NEXT:    setnp %al # sched: [1:0.50]
9163 ; SKX-NEXT:    sete %cl # sched: [1:0.50]
9164 ; SKX-NEXT:    andb %al, %cl # sched: [1:0.25]
9165 ; SKX-NEXT:    vucomisd (%rdi), %xmm0 # sched: [8:1.00]
9166 ; SKX-NEXT:    setnp %al # sched: [1:0.50]
9167 ; SKX-NEXT:    sete %dl # sched: [1:0.50]
9168 ; SKX-NEXT:    andb %al, %dl # sched: [1:0.25]
9169 ; SKX-NEXT:    orb %cl, %dl # sched: [1:0.25]
9170 ; SKX-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
9171 ; SKX-NEXT:    retq # sched: [7:1.00]
9173 ; BTVER2-LABEL: test_ucomisd:
9174 ; BTVER2:       # BB#0:
9175 ; BTVER2-NEXT:    vucomisd %xmm1, %xmm0 # sched: [3:1.00]
9176 ; BTVER2-NEXT:    setnp %al # sched: [1:0.50]
9177 ; BTVER2-NEXT:    sete %cl # sched: [1:0.50]
9178 ; BTVER2-NEXT:    andb %al, %cl # sched: [1:0.50]
9179 ; BTVER2-NEXT:    vucomisd (%rdi), %xmm0 # sched: [8:1.00]
9180 ; BTVER2-NEXT:    setnp %al # sched: [1:0.50]
9181 ; BTVER2-NEXT:    sete %dl # sched: [1:0.50]
9182 ; BTVER2-NEXT:    andb %al, %dl # sched: [1:0.50]
9183 ; BTVER2-NEXT:    orb %cl, %dl # sched: [1:0.50]
9184 ; BTVER2-NEXT:    movzbl %dl, %eax # sched: [1:0.50]
9185 ; BTVER2-NEXT:    retq # sched: [4:1.00]
9187 ; ZNVER1-LABEL: test_ucomisd:
9188 ; ZNVER1:       # BB#0:
9189 ; ZNVER1-NEXT:    vucomisd %xmm1, %xmm0 # sched: [3:1.00]
9190 ; ZNVER1-NEXT:    setnp %al # sched: [1:0.25]
9191 ; ZNVER1-NEXT:    sete %cl # sched: [1:0.25]
9192 ; ZNVER1-NEXT:    andb %al, %cl # sched: [1:0.25]
9193 ; ZNVER1-NEXT:    vucomisd (%rdi), %xmm0 # sched: [10:1.00]
9194 ; ZNVER1-NEXT:    setnp %al # sched: [1:0.25]
9195 ; ZNVER1-NEXT:    sete %dl # sched: [1:0.25]
9196 ; ZNVER1-NEXT:    andb %al, %dl # sched: [1:0.25]
9197 ; ZNVER1-NEXT:    orb %cl, %dl # sched: [1:0.25]
9198 ; ZNVER1-NEXT:    movzbl %dl, %eax # sched: [1:0.25]
9199 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
9200   %1 = call i32 @llvm.x86.sse2.ucomieq.sd(<2 x double> %a0, <2 x double> %a1)
9201   %2 = load <2 x double>, <2 x double> *%a2, align 8
9202   %3 = call i32 @llvm.x86.sse2.ucomieq.sd(<2 x double> %a0, <2 x double> %2)
9203   %4 = or i32 %1, %3
9204   ret i32 %4
9206 declare i32 @llvm.x86.sse2.ucomieq.sd(<2 x double>, <2 x double>) nounwind readnone
9208 define <2 x double> @test_unpckhpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
9209 ; GENERIC-LABEL: test_unpckhpd:
9210 ; GENERIC:       # BB#0:
9211 ; GENERIC-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00]
9212 ; GENERIC-NEXT:    unpckhpd {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [7:1.00]
9213 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
9214 ; GENERIC-NEXT:    retq # sched: [1:1.00]
9216 ; ATOM-LABEL: test_unpckhpd:
9217 ; ATOM:       # BB#0:
9218 ; ATOM-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00]
9219 ; ATOM-NEXT:    unpckhpd {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [1:1.00]
9220 ; ATOM-NEXT:    addpd %xmm1, %xmm0 # sched: [6:3.00]
9221 ; ATOM-NEXT:    retq # sched: [79:39.50]
9223 ; SLM-LABEL: test_unpckhpd:
9224 ; SLM:       # BB#0:
9225 ; SLM-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00]
9226 ; SLM-NEXT:    unpckhpd {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [4:1.00]
9227 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
9228 ; SLM-NEXT:    retq # sched: [4:1.00]
9230 ; SANDY-LABEL: test_unpckhpd:
9231 ; SANDY:       # BB#0:
9232 ; SANDY-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00]
9233 ; SANDY-NEXT:    vunpckhpd {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [7:1.00]
9234 ; SANDY-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9235 ; SANDY-NEXT:    retq # sched: [1:1.00]
9237 ; HASWELL-LABEL: test_unpckhpd:
9238 ; HASWELL:       # BB#0:
9239 ; HASWELL-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00]
9240 ; HASWELL-NEXT:    vunpckhpd {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [1:1.00]
9241 ; HASWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9242 ; HASWELL-NEXT:    retq # sched: [2:1.00]
9244 ; BROADWELL-LABEL: test_unpckhpd:
9245 ; BROADWELL:       # BB#0:
9246 ; BROADWELL-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00]
9247 ; BROADWELL-NEXT:    vunpckhpd {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [6:1.00]
9248 ; BROADWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9249 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
9251 ; SKYLAKE-LABEL: test_unpckhpd:
9252 ; SKYLAKE:       # BB#0:
9253 ; SKYLAKE-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00]
9254 ; SKYLAKE-NEXT:    vunpckhpd {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [7:1.00]
9255 ; SKYLAKE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
9256 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
9258 ; SKX-LABEL: test_unpckhpd:
9259 ; SKX:       # BB#0:
9260 ; SKX-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:1.00]
9261 ; SKX-NEXT:    vunpckhpd {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [7:1.00]
9262 ; SKX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
9263 ; SKX-NEXT:    retq # sched: [7:1.00]
9265 ; BTVER2-LABEL: test_unpckhpd:
9266 ; BTVER2:       # BB#0:
9267 ; BTVER2-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:0.50]
9268 ; BTVER2-NEXT:    vunpckhpd {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [6:1.00]
9269 ; BTVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9270 ; BTVER2-NEXT:    retq # sched: [4:1.00]
9272 ; ZNVER1-LABEL: test_unpckhpd:
9273 ; ZNVER1:       # BB#0:
9274 ; ZNVER1-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] sched: [1:0.50]
9275 ; ZNVER1-NEXT:    vunpckhpd {{.*#+}} xmm1 = xmm1[1],mem[1] sched: [8:0.50]
9276 ; ZNVER1-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9277 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
9278   %1 = shufflevector <2 x double> %a0, <2 x double> %a1, <2 x i32> <i32 1, i32 3>
9279   %2 = load <2 x double>, <2 x double> *%a2, align 16
9280   %3 = shufflevector <2 x double> %a1, <2 x double> %2, <2 x i32> <i32 1, i32 3>
9281   %4 = fadd <2 x double> %1, %3
9282   ret <2 x double> %4
9285 define <2 x double> @test_unpcklpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
9286 ; GENERIC-LABEL: test_unpcklpd:
9287 ; GENERIC:       # BB#0:
9288 ; GENERIC-NEXT:    unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
9289 ; GENERIC-NEXT:    movapd %xmm0, %xmm1 # sched: [1:1.00]
9290 ; GENERIC-NEXT:    unpcklpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [7:1.00]
9291 ; GENERIC-NEXT:    addpd %xmm0, %xmm1 # sched: [3:1.00]
9292 ; GENERIC-NEXT:    movapd %xmm1, %xmm0 # sched: [1:1.00]
9293 ; GENERIC-NEXT:    retq # sched: [1:1.00]
9295 ; ATOM-LABEL: test_unpcklpd:
9296 ; ATOM:       # BB#0:
9297 ; ATOM-NEXT:    unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
9298 ; ATOM-NEXT:    movapd %xmm0, %xmm1 # sched: [1:0.50]
9299 ; ATOM-NEXT:    unpcklpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [1:1.00]
9300 ; ATOM-NEXT:    addpd %xmm0, %xmm1 # sched: [6:3.00]
9301 ; ATOM-NEXT:    movapd %xmm1, %xmm0 # sched: [1:0.50]
9302 ; ATOM-NEXT:    retq # sched: [79:39.50]
9304 ; SLM-LABEL: test_unpcklpd:
9305 ; SLM:       # BB#0:
9306 ; SLM-NEXT:    unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
9307 ; SLM-NEXT:    movapd %xmm0, %xmm1 # sched: [1:1.00]
9308 ; SLM-NEXT:    unpcklpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [4:1.00]
9309 ; SLM-NEXT:    addpd %xmm0, %xmm1 # sched: [3:1.00]
9310 ; SLM-NEXT:    movapd %xmm1, %xmm0 # sched: [1:1.00]
9311 ; SLM-NEXT:    retq # sched: [4:1.00]
9313 ; SANDY-LABEL: test_unpcklpd:
9314 ; SANDY:       # BB#0:
9315 ; SANDY-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
9316 ; SANDY-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm0[0],mem[0] sched: [7:1.00]
9317 ; SANDY-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9318 ; SANDY-NEXT:    retq # sched: [1:1.00]
9320 ; HASWELL-LABEL: test_unpcklpd:
9321 ; HASWELL:       # BB#0:
9322 ; HASWELL-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
9323 ; HASWELL-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm0[0],mem[0] sched: [1:1.00]
9324 ; HASWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9325 ; HASWELL-NEXT:    retq # sched: [2:1.00]
9327 ; BROADWELL-LABEL: test_unpcklpd:
9328 ; BROADWELL:       # BB#0:
9329 ; BROADWELL-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
9330 ; BROADWELL-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm0[0],mem[0] sched: [6:1.00]
9331 ; BROADWELL-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9332 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
9334 ; SKYLAKE-LABEL: test_unpcklpd:
9335 ; SKYLAKE:       # BB#0:
9336 ; SKYLAKE-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
9337 ; SKYLAKE-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm0[0],mem[0] sched: [7:1.00]
9338 ; SKYLAKE-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
9339 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
9341 ; SKX-LABEL: test_unpcklpd:
9342 ; SKX:       # BB#0:
9343 ; SKX-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
9344 ; SKX-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm0[0],mem[0] sched: [7:1.00]
9345 ; SKX-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
9346 ; SKX-NEXT:    retq # sched: [7:1.00]
9348 ; BTVER2-LABEL: test_unpcklpd:
9349 ; BTVER2:       # BB#0:
9350 ; BTVER2-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:0.50]
9351 ; BTVER2-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm0[0],mem[0] sched: [6:1.00]
9352 ; BTVER2-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9353 ; BTVER2-NEXT:    retq # sched: [4:1.00]
9355 ; ZNVER1-LABEL: test_unpcklpd:
9356 ; ZNVER1:       # BB#0:
9357 ; ZNVER1-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:0.50]
9358 ; ZNVER1-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm0[0],mem[0] sched: [8:0.50]
9359 ; ZNVER1-NEXT:    vaddpd %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
9360 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
9361   %1 = shufflevector <2 x double> %a0, <2 x double> %a1, <2 x i32> <i32 0, i32 2>
9362   %2 = load <2 x double>, <2 x double> *%a2, align 16
9363   %3 = shufflevector <2 x double> %1, <2 x double> %2, <2 x i32> <i32 0, i32 2>
9364   %4 = fadd <2 x double> %1, %3
9365   ret <2 x double> %4
9368 define <2 x double> @test_xorpd(<2 x double> %a0, <2 x double> %a1, <2 x double> *%a2) {
9369 ; GENERIC-LABEL: test_xorpd:
9370 ; GENERIC:       # BB#0:
9371 ; GENERIC-NEXT:    xorpd %xmm1, %xmm0 # sched: [1:1.00]
9372 ; GENERIC-NEXT:    xorpd (%rdi), %xmm0 # sched: [7:1.00]
9373 ; GENERIC-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
9374 ; GENERIC-NEXT:    retq # sched: [1:1.00]
9376 ; ATOM-LABEL: test_xorpd:
9377 ; ATOM:       # BB#0:
9378 ; ATOM-NEXT:    xorpd %xmm1, %xmm0 # sched: [1:0.50]
9379 ; ATOM-NEXT:    xorpd (%rdi), %xmm0 # sched: [1:1.00]
9380 ; ATOM-NEXT:    addpd %xmm1, %xmm0 # sched: [6:3.00]
9381 ; ATOM-NEXT:    retq # sched: [79:39.50]
9383 ; SLM-LABEL: test_xorpd:
9384 ; SLM:       # BB#0:
9385 ; SLM-NEXT:    xorpd %xmm1, %xmm0 # sched: [1:0.50]
9386 ; SLM-NEXT:    xorpd (%rdi), %xmm0 # sched: [4:1.00]
9387 ; SLM-NEXT:    addpd %xmm1, %xmm0 # sched: [3:1.00]
9388 ; SLM-NEXT:    retq # sched: [4:1.00]
9390 ; SANDY-LABEL: test_xorpd:
9391 ; SANDY:       # BB#0:
9392 ; SANDY-NEXT:    vxorpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
9393 ; SANDY-NEXT:    vxorpd (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
9394 ; SANDY-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
9395 ; SANDY-NEXT:    retq # sched: [1:1.00]
9397 ; HASWELL-LABEL: test_xorpd:
9398 ; HASWELL:       # BB#0:
9399 ; HASWELL-NEXT:    vxorpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
9400 ; HASWELL-NEXT:    vxorpd (%rdi), %xmm0, %xmm0 # sched: [1:1.00]
9401 ; HASWELL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
9402 ; HASWELL-NEXT:    retq # sched: [2:1.00]
9404 ; BROADWELL-LABEL: test_xorpd:
9405 ; BROADWELL:       # BB#0:
9406 ; BROADWELL-NEXT:    vxorpd %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
9407 ; BROADWELL-NEXT:    vxorpd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
9408 ; BROADWELL-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
9409 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
9411 ; SKYLAKE-LABEL: test_xorpd:
9412 ; SKYLAKE:       # BB#0:
9413 ; SKYLAKE-NEXT:    vxorpd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
9414 ; SKYLAKE-NEXT:    vxorpd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
9415 ; SKYLAKE-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [4:0.50]
9416 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
9418 ; SKX-LABEL: test_xorpd:
9419 ; SKX:       # BB#0:
9420 ; SKX-NEXT:    vxorpd %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
9421 ; SKX-NEXT:    vxorpd (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
9422 ; SKX-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [4:0.33]
9423 ; SKX-NEXT:    retq # sched: [7:1.00]
9425 ; BTVER2-LABEL: test_xorpd:
9426 ; BTVER2:       # BB#0:
9427 ; BTVER2-NEXT:    vxorpd %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
9428 ; BTVER2-NEXT:    vxorpd (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
9429 ; BTVER2-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
9430 ; BTVER2-NEXT:    retq # sched: [4:1.00]
9432 ; ZNVER1-LABEL: test_xorpd:
9433 ; ZNVER1:       # BB#0:
9434 ; ZNVER1-NEXT:    vxorpd %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
9435 ; ZNVER1-NEXT:    vxorpd (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
9436 ; ZNVER1-NEXT:    vaddpd %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
9437 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
9438   %1 = bitcast <2 x double> %a0 to <4 x i32>
9439   %2 = bitcast <2 x double> %a1 to <4 x i32>
9440   %3 = xor <4 x i32> %1, %2
9441   %4 = load <2 x double>, <2 x double> *%a2, align 16
9442   %5 = bitcast <2 x double> %4 to <4 x i32>
9443   %6 = xor <4 x i32> %3, %5
9444   %7 = bitcast <4 x i32> %6 to <2 x double>
9445   %8 = fadd <2 x double> %a1, %7
9446   ret <2 x double> %8
9449 !0 = !{i32 1}