[llvm-objdump] - Remove one overload of reportError. NFCI.
[llvm-complete.git] / test / CodeGen / X86 / stack-folding-mmx.ll
blob071e73c2aeb1881334361a5c7665073746d01f20
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+mmx,+ssse3 | FileCheck %s
4 define x86_mmx @stack_fold_cvtpd2pi(<2 x double> %a0) {
5 ; CHECK-LABEL: stack_fold_cvtpd2pi:
6 ; CHECK:       # %bb.0:
7 ; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
8 ; CHECK-NEXT:    #APP
9 ; CHECK-NEXT:    nop
10 ; CHECK-NEXT:    #NO_APP
11 ; CHECK-NEXT:    cvtpd2pi {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 16-byte Folded Reload
12 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
13 ; CHECK-NEXT:    retq
14   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()
15   %2 = call x86_mmx @llvm.x86.sse.cvtpd2pi(<2 x double> %a0) nounwind readnone
16   ret x86_mmx %2
18 declare x86_mmx @llvm.x86.sse.cvtpd2pi(<2 x double>) nounwind readnone
20 define <2 x double> @stack_fold_cvtpi2pd(x86_mmx %a0) {
21 ; CHECK-LABEL: stack_fold_cvtpi2pd:
22 ; CHECK:       # %bb.0:
23 ; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
24 ; CHECK-NEXT:    #APP
25 ; CHECK-NEXT:    nop
26 ; CHECK-NEXT:    #NO_APP
27 ; CHECK-NEXT:    cvtpi2pd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload
28 ; CHECK-NEXT:    retq
29   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm1},~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
30   %2 = call <2 x double> @llvm.x86.sse.cvtpi2pd(x86_mmx %a0) nounwind readnone
31   ret <2 x double> %2
33 declare <2 x double> @llvm.x86.sse.cvtpi2pd(x86_mmx) nounwind readnone
35 define <4 x float> @stack_fold_cvtpi2ps(<4 x float> %a0, x86_mmx %a1) {
36 ; CHECK-LABEL: stack_fold_cvtpi2ps:
37 ; CHECK:       # %bb.0:
38 ; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
39 ; CHECK-NEXT:    #APP
40 ; CHECK-NEXT:    nop
41 ; CHECK-NEXT:    #NO_APP
42 ; CHECK-NEXT:    cvtpi2ps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload
43 ; CHECK-NEXT:    retq
44   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm1},~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
45   %2 = call <4 x float> @llvm.x86.sse.cvtpi2ps(<4 x float> %a0, x86_mmx %a1) nounwind readnone
46   ret <4 x float> %2
48 declare <4 x float> @llvm.x86.sse.cvtpi2ps(<4 x float>, x86_mmx) nounwind readnone
50 define x86_mmx @stack_fold_cvtps2pi(<4 x float> %a0) {
51 ; CHECK-LABEL: stack_fold_cvtps2pi:
52 ; CHECK:       # %bb.0:
53 ; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
54 ; CHECK-NEXT:    #APP
55 ; CHECK-NEXT:    nop
56 ; CHECK-NEXT:    #NO_APP
57 ; CHECK-NEXT:    cvtps2pi {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 16-byte Folded Reload
58 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
59 ; CHECK-NEXT:    retq
60   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()
61   %2 = call x86_mmx @llvm.x86.sse.cvtps2pi(<4 x float> %a0) nounwind readnone
62   ret x86_mmx %2
64 declare x86_mmx @llvm.x86.sse.cvtps2pi(<4 x float>) nounwind readnone
66 define x86_mmx @stack_fold_cvttpd2pi(<2 x double> %a0) {
67 ; CHECK-LABEL: stack_fold_cvttpd2pi:
68 ; CHECK:       # %bb.0:
69 ; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
70 ; CHECK-NEXT:    #APP
71 ; CHECK-NEXT:    nop
72 ; CHECK-NEXT:    #NO_APP
73 ; CHECK-NEXT:    cvttpd2pi {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 16-byte Folded Reload
74 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
75 ; CHECK-NEXT:    retq
76   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()
77   %2 = call x86_mmx @llvm.x86.sse.cvttpd2pi(<2 x double> %a0) nounwind readnone
78   ret x86_mmx %2
80 declare x86_mmx @llvm.x86.sse.cvttpd2pi(<2 x double>) nounwind readnone
82 define x86_mmx @stack_fold_cvttps2pi(<4 x float> %a0) {
83 ; CHECK-LABEL: stack_fold_cvttps2pi:
84 ; CHECK:       # %bb.0:
85 ; CHECK-NEXT:    movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
86 ; CHECK-NEXT:    #APP
87 ; CHECK-NEXT:    nop
88 ; CHECK-NEXT:    #NO_APP
89 ; CHECK-NEXT:    cvttps2pi {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 16-byte Folded Reload
90 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
91 ; CHECK-NEXT:    retq
92   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{flags}"()
93   %2 = call x86_mmx @llvm.x86.sse.cvttps2pi(<4 x float> %a0) nounwind readnone
94   ret x86_mmx %2
96 declare x86_mmx @llvm.x86.sse.cvttps2pi(<4 x float>) nounwind readnone
98 ; TODO stack_fold_movd_load
99 ; TODO stack_fold_movd_store
100 ; TODO stack_fold_movq_load
101 ; TODO stack_fold_movq_store
103 define x86_mmx @stack_fold_pabsb(x86_mmx %a0) {
104 ; CHECK-LABEL: stack_fold_pabsb:
105 ; CHECK:       # %bb.0:
106 ; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
107 ; CHECK-NEXT:    #APP
108 ; CHECK-NEXT:    nop
109 ; CHECK-NEXT:    #NO_APP
110 ; CHECK-NEXT:    pabsb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
111 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
112 ; CHECK-NEXT:    retq
113   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
114   %2 = call x86_mmx @llvm.x86.ssse3.pabs.b(x86_mmx %a0) nounwind readnone
115   ret x86_mmx %2
117 declare x86_mmx @llvm.x86.ssse3.pabs.b(x86_mmx) nounwind readnone
119 define x86_mmx @stack_fold_pabsd(x86_mmx %a0) {
120 ; CHECK-LABEL: stack_fold_pabsd:
121 ; CHECK:       # %bb.0:
122 ; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
123 ; CHECK-NEXT:    #APP
124 ; CHECK-NEXT:    nop
125 ; CHECK-NEXT:    #NO_APP
126 ; CHECK-NEXT:    pabsd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
127 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
128 ; CHECK-NEXT:    retq
129   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
130   %2 = call x86_mmx @llvm.x86.ssse3.pabs.d(x86_mmx %a0) nounwind readnone
131   ret x86_mmx %2
133 declare x86_mmx @llvm.x86.ssse3.pabs.d(x86_mmx) nounwind readnone
135 define x86_mmx @stack_fold_pabsw(x86_mmx %a0) {
136 ; CHECK-LABEL: stack_fold_pabsw:
137 ; CHECK:       # %bb.0:
138 ; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
139 ; CHECK-NEXT:    #APP
140 ; CHECK-NEXT:    nop
141 ; CHECK-NEXT:    #NO_APP
142 ; CHECK-NEXT:    pabsw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
143 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
144 ; CHECK-NEXT:    retq
145   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
146   %2 = call x86_mmx @llvm.x86.ssse3.pabs.w(x86_mmx %a0) nounwind readnone
147   ret x86_mmx %2
149 declare x86_mmx @llvm.x86.ssse3.pabs.w(x86_mmx) nounwind readnone
151 define x86_mmx @stack_fold_packssdw(x86_mmx %a, x86_mmx %b) {
152 ; CHECK-LABEL: stack_fold_packssdw:
153 ; CHECK:       # %bb.0:
154 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
155 ; CHECK-NEXT:    #APP
156 ; CHECK-NEXT:    nop
157 ; CHECK-NEXT:    #NO_APP
158 ; CHECK-NEXT:    packssdw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
159 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
160 ; CHECK-NEXT:    retq
161   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
162   %2 = call x86_mmx @llvm.x86.mmx.packssdw(x86_mmx %a, x86_mmx %b) nounwind readnone
163   ret x86_mmx %2
165 declare x86_mmx @llvm.x86.mmx.packssdw(x86_mmx, x86_mmx) nounwind readnone
167 define x86_mmx @stack_fold_packsswb(x86_mmx %a, x86_mmx %b) {
168 ; CHECK-LABEL: stack_fold_packsswb:
169 ; CHECK:       # %bb.0:
170 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
171 ; CHECK-NEXT:    #APP
172 ; CHECK-NEXT:    nop
173 ; CHECK-NEXT:    #NO_APP
174 ; CHECK-NEXT:    packsswb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
175 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
176 ; CHECK-NEXT:    retq
177   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
178   %2 = call x86_mmx @llvm.x86.mmx.packsswb(x86_mmx %a, x86_mmx %b) nounwind readnone
179   ret x86_mmx %2
181 declare x86_mmx @llvm.x86.mmx.packsswb(x86_mmx, x86_mmx) nounwind readnone
183 define x86_mmx @stack_fold_packuswb(x86_mmx %a, x86_mmx %b) {
184 ; CHECK-LABEL: stack_fold_packuswb:
185 ; CHECK:       # %bb.0:
186 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
187 ; CHECK-NEXT:    #APP
188 ; CHECK-NEXT:    nop
189 ; CHECK-NEXT:    #NO_APP
190 ; CHECK-NEXT:    packuswb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
191 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
192 ; CHECK-NEXT:    retq
193   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
194   %2 = call x86_mmx @llvm.x86.mmx.packuswb(x86_mmx %a, x86_mmx %b) nounwind readnone
195   ret x86_mmx %2
197 declare x86_mmx @llvm.x86.mmx.packuswb(x86_mmx, x86_mmx) nounwind readnone
199 define x86_mmx @stack_fold_paddb(x86_mmx %a, x86_mmx %b) {
200 ; CHECK-LABEL: stack_fold_paddb:
201 ; CHECK:       # %bb.0:
202 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
203 ; CHECK-NEXT:    #APP
204 ; CHECK-NEXT:    nop
205 ; CHECK-NEXT:    #NO_APP
206 ; CHECK-NEXT:    paddb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
207 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
208 ; CHECK-NEXT:    retq
209   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
210   %2 = call x86_mmx @llvm.x86.mmx.padd.b(x86_mmx %a, x86_mmx %b) nounwind readnone
211   ret x86_mmx %2
213 declare x86_mmx @llvm.x86.mmx.padd.b(x86_mmx, x86_mmx) nounwind readnone
215 define x86_mmx @stack_fold_paddd(x86_mmx %a, x86_mmx %b) {
216 ; CHECK-LABEL: stack_fold_paddd:
217 ; CHECK:       # %bb.0:
218 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
219 ; CHECK-NEXT:    #APP
220 ; CHECK-NEXT:    nop
221 ; CHECK-NEXT:    #NO_APP
222 ; CHECK-NEXT:    paddd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
223 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
224 ; CHECK-NEXT:    retq
225   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
226   %2 = call x86_mmx @llvm.x86.mmx.padd.d(x86_mmx %a, x86_mmx %b) nounwind readnone
227   ret x86_mmx %2
229 declare x86_mmx @llvm.x86.mmx.padd.d(x86_mmx, x86_mmx) nounwind readnone
231 define x86_mmx @stack_fold_paddq(x86_mmx %a, x86_mmx %b) {
232 ; CHECK-LABEL: stack_fold_paddq:
233 ; CHECK:       # %bb.0:
234 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
235 ; CHECK-NEXT:    #APP
236 ; CHECK-NEXT:    nop
237 ; CHECK-NEXT:    #NO_APP
238 ; CHECK-NEXT:    paddq {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
239 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
240 ; CHECK-NEXT:    retq
241   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
242   %2 = call x86_mmx @llvm.x86.mmx.padd.q(x86_mmx %a, x86_mmx %b) nounwind readnone
243   ret x86_mmx %2
245 declare x86_mmx @llvm.x86.mmx.padd.q(x86_mmx, x86_mmx) nounwind readnone
247 define x86_mmx @stack_fold_paddsb(x86_mmx %a, x86_mmx %b) {
248 ; CHECK-LABEL: stack_fold_paddsb:
249 ; CHECK:       # %bb.0:
250 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
251 ; CHECK-NEXT:    #APP
252 ; CHECK-NEXT:    nop
253 ; CHECK-NEXT:    #NO_APP
254 ; CHECK-NEXT:    paddsb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
255 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
256 ; CHECK-NEXT:    retq
257   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
258   %2 = call x86_mmx @llvm.x86.mmx.padds.b(x86_mmx %a, x86_mmx %b) nounwind readnone
259   ret x86_mmx %2
261 declare x86_mmx @llvm.x86.mmx.padds.b(x86_mmx, x86_mmx) nounwind readnone
263 define x86_mmx @stack_fold_paddsw(x86_mmx %a, x86_mmx %b) {
264 ; CHECK-LABEL: stack_fold_paddsw:
265 ; CHECK:       # %bb.0:
266 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
267 ; CHECK-NEXT:    #APP
268 ; CHECK-NEXT:    nop
269 ; CHECK-NEXT:    #NO_APP
270 ; CHECK-NEXT:    paddsw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
271 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
272 ; CHECK-NEXT:    retq
273   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
274   %2 = call x86_mmx @llvm.x86.mmx.padds.w(x86_mmx %a, x86_mmx %b) nounwind readnone
275   ret x86_mmx %2
277 declare x86_mmx @llvm.x86.mmx.padds.w(x86_mmx, x86_mmx) nounwind readnone
279 define x86_mmx @stack_fold_paddusb(x86_mmx %a, x86_mmx %b) {
280 ; CHECK-LABEL: stack_fold_paddusb:
281 ; CHECK:       # %bb.0:
282 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
283 ; CHECK-NEXT:    #APP
284 ; CHECK-NEXT:    nop
285 ; CHECK-NEXT:    #NO_APP
286 ; CHECK-NEXT:    paddusb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
287 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
288 ; CHECK-NEXT:    retq
289   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
290   %2 = call x86_mmx @llvm.x86.mmx.paddus.b(x86_mmx %a, x86_mmx %b) nounwind readnone
291   ret x86_mmx %2
293 declare x86_mmx @llvm.x86.mmx.paddus.b(x86_mmx, x86_mmx) nounwind readnone
295 define x86_mmx @stack_fold_paddusw(x86_mmx %a, x86_mmx %b) {
296 ; CHECK-LABEL: stack_fold_paddusw:
297 ; CHECK:       # %bb.0:
298 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
299 ; CHECK-NEXT:    #APP
300 ; CHECK-NEXT:    nop
301 ; CHECK-NEXT:    #NO_APP
302 ; CHECK-NEXT:    paddusw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
303 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
304 ; CHECK-NEXT:    retq
305   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
306   %2 = call x86_mmx @llvm.x86.mmx.paddus.w(x86_mmx %a, x86_mmx %b) nounwind readnone
307   ret x86_mmx %2
309 declare x86_mmx @llvm.x86.mmx.paddus.w(x86_mmx, x86_mmx) nounwind readnone
311 define x86_mmx @stack_fold_paddw(x86_mmx %a, x86_mmx %b) {
312 ; CHECK-LABEL: stack_fold_paddw:
313 ; CHECK:       # %bb.0:
314 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
315 ; CHECK-NEXT:    #APP
316 ; CHECK-NEXT:    nop
317 ; CHECK-NEXT:    #NO_APP
318 ; CHECK-NEXT:    paddw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
319 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
320 ; CHECK-NEXT:    retq
321   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
322   %2 = call x86_mmx @llvm.x86.mmx.padd.w(x86_mmx %a, x86_mmx %b) nounwind readnone
323   ret x86_mmx %2
325 declare x86_mmx @llvm.x86.mmx.padd.w(x86_mmx, x86_mmx) nounwind readnone
327 define x86_mmx @stack_fold_palignr(x86_mmx %a, x86_mmx %b) {
328 ; CHECK-LABEL: stack_fold_palignr:
329 ; CHECK:       # %bb.0:
330 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
331 ; CHECK-NEXT:    #APP
332 ; CHECK-NEXT:    nop
333 ; CHECK-NEXT:    #NO_APP
334 ; CHECK-NEXT:    palignr $1, {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
335 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
336 ; CHECK-NEXT:    retq
337   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
338   %2 = call x86_mmx @llvm.x86.mmx.palignr.b(x86_mmx %a, x86_mmx %b, i8 1) nounwind readnone
339   ret x86_mmx %2
341 declare x86_mmx @llvm.x86.mmx.palignr.b(x86_mmx, x86_mmx, i8) nounwind readnone
343 define x86_mmx @stack_fold_pand(x86_mmx %a, x86_mmx %b) {
344 ; CHECK-LABEL: stack_fold_pand:
345 ; CHECK:       # %bb.0:
346 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
347 ; CHECK-NEXT:    #APP
348 ; CHECK-NEXT:    nop
349 ; CHECK-NEXT:    #NO_APP
350 ; CHECK-NEXT:    pand {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
351 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
352 ; CHECK-NEXT:    retq
353   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
354   %2 = call x86_mmx @llvm.x86.mmx.pand(x86_mmx %a, x86_mmx %b) nounwind readnone
355   ret x86_mmx %2
357 declare x86_mmx @llvm.x86.mmx.pand(x86_mmx, x86_mmx) nounwind readnone
359 define x86_mmx @stack_fold_pandn(x86_mmx %a, x86_mmx %b) {
360 ; CHECK-LABEL: stack_fold_pandn:
361 ; CHECK:       # %bb.0:
362 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
363 ; CHECK-NEXT:    #APP
364 ; CHECK-NEXT:    nop
365 ; CHECK-NEXT:    #NO_APP
366 ; CHECK-NEXT:    pandn {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
367 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
368 ; CHECK-NEXT:    retq
369   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
370   %2 = call x86_mmx @llvm.x86.mmx.pandn(x86_mmx %a, x86_mmx %b) nounwind readnone
371   ret x86_mmx %2
373 declare x86_mmx @llvm.x86.mmx.pandn(x86_mmx, x86_mmx) nounwind readnone
375 define x86_mmx @stack_fold_pavgb(x86_mmx %a, x86_mmx %b) {
376 ; CHECK-LABEL: stack_fold_pavgb:
377 ; CHECK:       # %bb.0:
378 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
379 ; CHECK-NEXT:    #APP
380 ; CHECK-NEXT:    nop
381 ; CHECK-NEXT:    #NO_APP
382 ; CHECK-NEXT:    pavgb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
383 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
384 ; CHECK-NEXT:    retq
385   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
386   %2 = call x86_mmx @llvm.x86.mmx.pavg.b(x86_mmx %a, x86_mmx %b) nounwind readnone
387   ret x86_mmx %2
389 declare x86_mmx @llvm.x86.mmx.pavg.b(x86_mmx, x86_mmx) nounwind readnone
391 define x86_mmx @stack_fold_pavgw(x86_mmx %a, x86_mmx %b) {
392 ; CHECK-LABEL: stack_fold_pavgw:
393 ; CHECK:       # %bb.0:
394 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
395 ; CHECK-NEXT:    #APP
396 ; CHECK-NEXT:    nop
397 ; CHECK-NEXT:    #NO_APP
398 ; CHECK-NEXT:    pavgw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
399 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
400 ; CHECK-NEXT:    retq
401   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
402   %2 = call x86_mmx @llvm.x86.mmx.pavg.w(x86_mmx %a, x86_mmx %b) nounwind readnone
403   ret x86_mmx %2
405 declare x86_mmx @llvm.x86.mmx.pavg.w(x86_mmx, x86_mmx) nounwind readnone
407 define x86_mmx @stack_fold_pcmpeqb(x86_mmx %a, x86_mmx %b) {
408 ; CHECK-LABEL: stack_fold_pcmpeqb:
409 ; CHECK:       # %bb.0:
410 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
411 ; CHECK-NEXT:    #APP
412 ; CHECK-NEXT:    nop
413 ; CHECK-NEXT:    #NO_APP
414 ; CHECK-NEXT:    pcmpeqb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
415 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
416 ; CHECK-NEXT:    retq
417   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
418   %2 = call x86_mmx @llvm.x86.mmx.pcmpeq.b(x86_mmx %a, x86_mmx %b) nounwind readnone
419   ret x86_mmx %2
421 declare x86_mmx @llvm.x86.mmx.pcmpeq.b(x86_mmx, x86_mmx) nounwind readnone
423 define x86_mmx @stack_fold_pcmpeqd(x86_mmx %a, x86_mmx %b) {
424 ; CHECK-LABEL: stack_fold_pcmpeqd:
425 ; CHECK:       # %bb.0:
426 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
427 ; CHECK-NEXT:    #APP
428 ; CHECK-NEXT:    nop
429 ; CHECK-NEXT:    #NO_APP
430 ; CHECK-NEXT:    pcmpeqd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
431 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
432 ; CHECK-NEXT:    retq
433   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
434   %2 = call x86_mmx @llvm.x86.mmx.pcmpeq.d(x86_mmx %a, x86_mmx %b) nounwind readnone
435   ret x86_mmx %2
437 declare x86_mmx @llvm.x86.mmx.pcmpeq.d(x86_mmx, x86_mmx) nounwind readnone
439 define x86_mmx @stack_fold_pcmpeqw(x86_mmx %a, x86_mmx %b) {
440 ; CHECK-LABEL: stack_fold_pcmpeqw:
441 ; CHECK:       # %bb.0:
442 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
443 ; CHECK-NEXT:    #APP
444 ; CHECK-NEXT:    nop
445 ; CHECK-NEXT:    #NO_APP
446 ; CHECK-NEXT:    pcmpeqw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
447 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
448 ; CHECK-NEXT:    retq
449   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
450   %2 = call x86_mmx @llvm.x86.mmx.pcmpeq.w(x86_mmx %a, x86_mmx %b) nounwind readnone
451   ret x86_mmx %2
453 declare x86_mmx @llvm.x86.mmx.pcmpeq.w(x86_mmx, x86_mmx) nounwind readnone
455 define x86_mmx @stack_fold_pcmpgtb(x86_mmx %a, x86_mmx %b) {
456 ; CHECK-LABEL: stack_fold_pcmpgtb:
457 ; CHECK:       # %bb.0:
458 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
459 ; CHECK-NEXT:    #APP
460 ; CHECK-NEXT:    nop
461 ; CHECK-NEXT:    #NO_APP
462 ; CHECK-NEXT:    pcmpgtb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
463 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
464 ; CHECK-NEXT:    retq
465   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
466   %2 = call x86_mmx @llvm.x86.mmx.pcmpgt.b(x86_mmx %a, x86_mmx %b) nounwind readnone
467   ret x86_mmx %2
469 declare x86_mmx @llvm.x86.mmx.pcmpgt.b(x86_mmx, x86_mmx) nounwind readnone
471 define x86_mmx @stack_fold_pcmpgtd(x86_mmx %a, x86_mmx %b) {
472 ; CHECK-LABEL: stack_fold_pcmpgtd:
473 ; CHECK:       # %bb.0:
474 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
475 ; CHECK-NEXT:    #APP
476 ; CHECK-NEXT:    nop
477 ; CHECK-NEXT:    #NO_APP
478 ; CHECK-NEXT:    pcmpgtd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
479 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
480 ; CHECK-NEXT:    retq
481   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
482   %2 = call x86_mmx @llvm.x86.mmx.pcmpgt.d(x86_mmx %a, x86_mmx %b) nounwind readnone
483   ret x86_mmx %2
485 declare x86_mmx @llvm.x86.mmx.pcmpgt.d(x86_mmx, x86_mmx) nounwind readnone
487 define x86_mmx @stack_fold_pcmpgtw(x86_mmx %a, x86_mmx %b) {
488 ; CHECK-LABEL: stack_fold_pcmpgtw:
489 ; CHECK:       # %bb.0:
490 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
491 ; CHECK-NEXT:    #APP
492 ; CHECK-NEXT:    nop
493 ; CHECK-NEXT:    #NO_APP
494 ; CHECK-NEXT:    pcmpgtw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
495 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
496 ; CHECK-NEXT:    retq
497   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
498   %2 = call x86_mmx @llvm.x86.mmx.pcmpgt.w(x86_mmx %a, x86_mmx %b) nounwind readnone
499   ret x86_mmx %2
501 declare x86_mmx @llvm.x86.mmx.pcmpgt.w(x86_mmx, x86_mmx) nounwind readnone
503 define x86_mmx @stack_fold_phaddd(x86_mmx %a, x86_mmx %b) {
504 ; CHECK-LABEL: stack_fold_phaddd:
505 ; CHECK:       # %bb.0:
506 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
507 ; CHECK-NEXT:    #APP
508 ; CHECK-NEXT:    nop
509 ; CHECK-NEXT:    #NO_APP
510 ; CHECK-NEXT:    phaddd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
511 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
512 ; CHECK-NEXT:    retq
513   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
514   %2 = call x86_mmx @llvm.x86.ssse3.phadd.d(x86_mmx %a, x86_mmx %b) nounwind readnone
515   ret x86_mmx %2
517 declare x86_mmx @llvm.x86.ssse3.phadd.d(x86_mmx, x86_mmx) nounwind readnone
519 define x86_mmx @stack_fold_phaddsw(x86_mmx %a, x86_mmx %b) {
520 ; CHECK-LABEL: stack_fold_phaddsw:
521 ; CHECK:       # %bb.0:
522 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
523 ; CHECK-NEXT:    #APP
524 ; CHECK-NEXT:    nop
525 ; CHECK-NEXT:    #NO_APP
526 ; CHECK-NEXT:    phaddsw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
527 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
528 ; CHECK-NEXT:    retq
529   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
530   %2 = call x86_mmx @llvm.x86.ssse3.phadd.sw(x86_mmx %a, x86_mmx %b) nounwind readnone
531   ret x86_mmx %2
533 declare x86_mmx @llvm.x86.ssse3.phadd.sw(x86_mmx, x86_mmx) nounwind readnone
535 define x86_mmx @stack_fold_phaddw(x86_mmx %a, x86_mmx %b) {
536 ; CHECK-LABEL: stack_fold_phaddw:
537 ; CHECK:       # %bb.0:
538 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
539 ; CHECK-NEXT:    #APP
540 ; CHECK-NEXT:    nop
541 ; CHECK-NEXT:    #NO_APP
542 ; CHECK-NEXT:    phaddw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
543 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
544 ; CHECK-NEXT:    retq
545   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
546   %2 = call x86_mmx @llvm.x86.ssse3.phadd.w(x86_mmx %a, x86_mmx %b) nounwind readnone
547   ret x86_mmx %2
549 declare x86_mmx @llvm.x86.ssse3.phadd.w(x86_mmx, x86_mmx) nounwind readnone
551 define x86_mmx @stack_fold_phsubd(x86_mmx %a, x86_mmx %b) {
552 ; CHECK-LABEL: stack_fold_phsubd:
553 ; CHECK:       # %bb.0:
554 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
555 ; CHECK-NEXT:    #APP
556 ; CHECK-NEXT:    nop
557 ; CHECK-NEXT:    #NO_APP
558 ; CHECK-NEXT:    phsubd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
559 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
560 ; CHECK-NEXT:    retq
561   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
562   %2 = call x86_mmx @llvm.x86.ssse3.phsub.d(x86_mmx %a, x86_mmx %b) nounwind readnone
563   ret x86_mmx %2
565 declare x86_mmx @llvm.x86.ssse3.phsub.d(x86_mmx, x86_mmx) nounwind readnone
567 define x86_mmx @stack_fold_phsubsw(x86_mmx %a, x86_mmx %b) {
568 ; CHECK-LABEL: stack_fold_phsubsw:
569 ; CHECK:       # %bb.0:
570 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
571 ; CHECK-NEXT:    #APP
572 ; CHECK-NEXT:    nop
573 ; CHECK-NEXT:    #NO_APP
574 ; CHECK-NEXT:    phsubsw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
575 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
576 ; CHECK-NEXT:    retq
577   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
578   %2 = call x86_mmx @llvm.x86.ssse3.phsub.sw(x86_mmx %a, x86_mmx %b) nounwind readnone
579   ret x86_mmx %2
581 declare x86_mmx @llvm.x86.ssse3.phsub.sw(x86_mmx, x86_mmx) nounwind readnone
583 define x86_mmx @stack_fold_phsubw(x86_mmx %a, x86_mmx %b) {
584 ; CHECK-LABEL: stack_fold_phsubw:
585 ; CHECK:       # %bb.0:
586 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
587 ; CHECK-NEXT:    #APP
588 ; CHECK-NEXT:    nop
589 ; CHECK-NEXT:    #NO_APP
590 ; CHECK-NEXT:    phsubw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
591 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
592 ; CHECK-NEXT:    retq
593   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
594   %2 = call x86_mmx @llvm.x86.ssse3.phsub.w(x86_mmx %a, x86_mmx %b) nounwind readnone
595   ret x86_mmx %2
597 declare x86_mmx @llvm.x86.ssse3.phsub.w(x86_mmx, x86_mmx) nounwind readnone
599 ; TODO stack_fold_pinsrw
601 define x86_mmx @stack_fold_pmaddubsw(x86_mmx %a, x86_mmx %b) {
602 ; CHECK-LABEL: stack_fold_pmaddubsw:
603 ; CHECK:       # %bb.0:
604 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
605 ; CHECK-NEXT:    #APP
606 ; CHECK-NEXT:    nop
607 ; CHECK-NEXT:    #NO_APP
608 ; CHECK-NEXT:    pmaddubsw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
609 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
610 ; CHECK-NEXT:    retq
611   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
612   %2 = call x86_mmx @llvm.x86.ssse3.pmadd.ub.sw(x86_mmx %a, x86_mmx %b) nounwind readnone
613   ret x86_mmx %2
615 declare x86_mmx @llvm.x86.ssse3.pmadd.ub.sw(x86_mmx, x86_mmx) nounwind readnone
617 define x86_mmx @stack_fold_pmaddwd(x86_mmx %a, x86_mmx %b) {
618 ; CHECK-LABEL: stack_fold_pmaddwd:
619 ; CHECK:       # %bb.0:
620 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
621 ; CHECK-NEXT:    #APP
622 ; CHECK-NEXT:    nop
623 ; CHECK-NEXT:    #NO_APP
624 ; CHECK-NEXT:    pmaddwd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
625 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
626 ; CHECK-NEXT:    retq
627   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
628   %2 = call x86_mmx @llvm.x86.mmx.pmadd.wd(x86_mmx %a, x86_mmx %b) nounwind readnone
629   ret x86_mmx %2
631 declare x86_mmx @llvm.x86.mmx.pmadd.wd(x86_mmx, x86_mmx) nounwind readnone
633 define x86_mmx @stack_fold_pmaxsw(x86_mmx %a, x86_mmx %b) {
634 ; CHECK-LABEL: stack_fold_pmaxsw:
635 ; CHECK:       # %bb.0:
636 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
637 ; CHECK-NEXT:    #APP
638 ; CHECK-NEXT:    nop
639 ; CHECK-NEXT:    #NO_APP
640 ; CHECK-NEXT:    pmaxsw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
641 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
642 ; CHECK-NEXT:    retq
643   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
644   %2 = call x86_mmx @llvm.x86.mmx.pmaxs.w(x86_mmx %a, x86_mmx %b) nounwind readnone
645   ret x86_mmx %2
647 declare x86_mmx @llvm.x86.mmx.pmaxs.w(x86_mmx, x86_mmx) nounwind readnone
649 define x86_mmx @stack_fold_pmaxub(x86_mmx %a, x86_mmx %b) {
650 ; CHECK-LABEL: stack_fold_pmaxub:
651 ; CHECK:       # %bb.0:
652 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
653 ; CHECK-NEXT:    #APP
654 ; CHECK-NEXT:    nop
655 ; CHECK-NEXT:    #NO_APP
656 ; CHECK-NEXT:    pmaxub {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
657 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
658 ; CHECK-NEXT:    retq
659   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
660   %2 = call x86_mmx @llvm.x86.mmx.pmaxu.b(x86_mmx %a, x86_mmx %b) nounwind readnone
661   ret x86_mmx %2
663 declare x86_mmx @llvm.x86.mmx.pmaxu.b(x86_mmx, x86_mmx) nounwind readnone
665 define x86_mmx @stack_fold_pminsw(x86_mmx %a, x86_mmx %b) {
666 ; CHECK-LABEL: stack_fold_pminsw:
667 ; CHECK:       # %bb.0:
668 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
669 ; CHECK-NEXT:    #APP
670 ; CHECK-NEXT:    nop
671 ; CHECK-NEXT:    #NO_APP
672 ; CHECK-NEXT:    pminsw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
673 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
674 ; CHECK-NEXT:    retq
675   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
676   %2 = call x86_mmx @llvm.x86.mmx.pmins.w(x86_mmx %a, x86_mmx %b) nounwind readnone
677   ret x86_mmx %2
679 declare x86_mmx @llvm.x86.mmx.pmins.w(x86_mmx, x86_mmx) nounwind readnone
681 define x86_mmx @stack_fold_pminub(x86_mmx %a, x86_mmx %b) {
682 ; CHECK-LABEL: stack_fold_pminub:
683 ; CHECK:       # %bb.0:
684 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
685 ; CHECK-NEXT:    #APP
686 ; CHECK-NEXT:    nop
687 ; CHECK-NEXT:    #NO_APP
688 ; CHECK-NEXT:    pminub {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
689 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
690 ; CHECK-NEXT:    retq
691   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
692   %2 = call x86_mmx @llvm.x86.mmx.pminu.b(x86_mmx %a, x86_mmx %b) nounwind readnone
693   ret x86_mmx %2
695 declare x86_mmx @llvm.x86.mmx.pminu.b(x86_mmx, x86_mmx) nounwind readnone
697 define x86_mmx @stack_fold_pmulhrsw(x86_mmx %a, x86_mmx %b) {
698 ; CHECK-LABEL: stack_fold_pmulhrsw:
699 ; CHECK:       # %bb.0:
700 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
701 ; CHECK-NEXT:    #APP
702 ; CHECK-NEXT:    nop
703 ; CHECK-NEXT:    #NO_APP
704 ; CHECK-NEXT:    pmulhrsw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
705 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
706 ; CHECK-NEXT:    retq
707   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
708   %2 = call x86_mmx @llvm.x86.ssse3.pmul.hr.sw(x86_mmx %a, x86_mmx %b) nounwind readnone
709   ret x86_mmx %2
711 declare x86_mmx @llvm.x86.ssse3.pmul.hr.sw(x86_mmx, x86_mmx) nounwind readnone
713 define x86_mmx @stack_fold_pmulhuw(x86_mmx %a, x86_mmx %b) {
714 ; CHECK-LABEL: stack_fold_pmulhuw:
715 ; CHECK:       # %bb.0:
716 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
717 ; CHECK-NEXT:    #APP
718 ; CHECK-NEXT:    nop
719 ; CHECK-NEXT:    #NO_APP
720 ; CHECK-NEXT:    pmulhuw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
721 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
722 ; CHECK-NEXT:    retq
723   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
724   %2 = call x86_mmx @llvm.x86.mmx.pmulhu.w(x86_mmx %a, x86_mmx %b) nounwind readnone
725   ret x86_mmx %2
727 declare x86_mmx @llvm.x86.mmx.pmulhu.w(x86_mmx, x86_mmx) nounwind readnone
729 define x86_mmx @stack_fold_pmulhw(x86_mmx %a, x86_mmx %b) {
730 ; CHECK-LABEL: stack_fold_pmulhw:
731 ; CHECK:       # %bb.0:
732 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
733 ; CHECK-NEXT:    #APP
734 ; CHECK-NEXT:    nop
735 ; CHECK-NEXT:    #NO_APP
736 ; CHECK-NEXT:    pmulhw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
737 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
738 ; CHECK-NEXT:    retq
739   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
740   %2 = call x86_mmx @llvm.x86.mmx.pmulh.w(x86_mmx %a, x86_mmx %b) nounwind readnone
741   ret x86_mmx %2
743 declare x86_mmx @llvm.x86.mmx.pmulh.w(x86_mmx, x86_mmx) nounwind readnone
745 define x86_mmx @stack_fold_pmullw(x86_mmx %a, x86_mmx %b) {
746 ; CHECK-LABEL: stack_fold_pmullw:
747 ; CHECK:       # %bb.0:
748 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
749 ; CHECK-NEXT:    #APP
750 ; CHECK-NEXT:    nop
751 ; CHECK-NEXT:    #NO_APP
752 ; CHECK-NEXT:    pmullw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
753 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
754 ; CHECK-NEXT:    retq
755   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
756   %2 = call x86_mmx @llvm.x86.mmx.pmull.w(x86_mmx %a, x86_mmx %b) nounwind readnone
757   ret x86_mmx %2
759 declare x86_mmx @llvm.x86.mmx.pmull.w(x86_mmx, x86_mmx) nounwind readnone
761 define x86_mmx @stack_fold_pmuludq(x86_mmx %a, x86_mmx %b) {
762 ; CHECK-LABEL: stack_fold_pmuludq:
763 ; CHECK:       # %bb.0:
764 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
765 ; CHECK-NEXT:    #APP
766 ; CHECK-NEXT:    nop
767 ; CHECK-NEXT:    #NO_APP
768 ; CHECK-NEXT:    pmuludq {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
769 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
770 ; CHECK-NEXT:    retq
771   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
772   %2 = call x86_mmx @llvm.x86.mmx.pmulu.dq(x86_mmx %a, x86_mmx %b) nounwind readnone
773   ret x86_mmx %2
775 declare x86_mmx @llvm.x86.mmx.pmulu.dq(x86_mmx, x86_mmx) nounwind readnone
777 define x86_mmx @stack_fold_por(x86_mmx %a, x86_mmx %b) {
778 ; CHECK-LABEL: stack_fold_por:
779 ; CHECK:       # %bb.0:
780 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
781 ; CHECK-NEXT:    #APP
782 ; CHECK-NEXT:    nop
783 ; CHECK-NEXT:    #NO_APP
784 ; CHECK-NEXT:    por {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
785 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
786 ; CHECK-NEXT:    retq
787   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
788   %2 = call x86_mmx @llvm.x86.mmx.por(x86_mmx %a, x86_mmx %b) nounwind readnone
789   ret x86_mmx %2
791 declare x86_mmx @llvm.x86.mmx.por(x86_mmx, x86_mmx) nounwind readnone
793 define x86_mmx @stack_fold_psadbw(x86_mmx %a, x86_mmx %b) {
794 ; CHECK-LABEL: stack_fold_psadbw:
795 ; CHECK:       # %bb.0:
796 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
797 ; CHECK-NEXT:    #APP
798 ; CHECK-NEXT:    nop
799 ; CHECK-NEXT:    #NO_APP
800 ; CHECK-NEXT:    psadbw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
801 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
802 ; CHECK-NEXT:    retq
803   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
804   %2 = call x86_mmx @llvm.x86.mmx.psad.bw(x86_mmx %a, x86_mmx %b) nounwind readnone
805   ret x86_mmx %2
807 declare x86_mmx @llvm.x86.mmx.psad.bw(x86_mmx, x86_mmx) nounwind readnone
809 define x86_mmx @stack_fold_pshufb(x86_mmx %a, x86_mmx %b) {
810 ; CHECK-LABEL: stack_fold_pshufb:
811 ; CHECK:       # %bb.0:
812 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
813 ; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
814 ; CHECK-NEXT:    #APP
815 ; CHECK-NEXT:    nop
816 ; CHECK-NEXT:    #NO_APP
817 ; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Reload
818 ; CHECK-NEXT:    pshufb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
819 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
820 ; CHECK-NEXT:    retq
821   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
822   %2 = call x86_mmx @llvm.x86.ssse3.pshuf.b(x86_mmx %a, x86_mmx %b) nounwind readnone
823   ret x86_mmx %2
825 declare x86_mmx @llvm.x86.ssse3.pshuf.b(x86_mmx, x86_mmx) nounwind readnone
827 define x86_mmx @stack_fold_pshufw(x86_mmx %a) {
828 ; CHECK-LABEL: stack_fold_pshufw:
829 ; CHECK:       # %bb.0:
830 ; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
831 ; CHECK-NEXT:    #APP
832 ; CHECK-NEXT:    nop
833 ; CHECK-NEXT:    #NO_APP
834 ; CHECK-NEXT:    pshufw $1, {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
835 ; CHECK-NEXT:    # mm0 = mem[1,0,0,0]
836 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
837 ; CHECK-NEXT:    retq
838   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
839   %2 = call x86_mmx @llvm.x86.sse.pshuf.w(x86_mmx %a, i8 1) nounwind readnone
840   ret x86_mmx %2
842 declare x86_mmx @llvm.x86.sse.pshuf.w(x86_mmx, i8) nounwind readnone
844 define x86_mmx @stack_fold_psignb(x86_mmx %a0, x86_mmx %a1) {
845 ; CHECK-LABEL: stack_fold_psignb:
846 ; CHECK:       # %bb.0:
847 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
848 ; CHECK-NEXT:    #APP
849 ; CHECK-NEXT:    nop
850 ; CHECK-NEXT:    #NO_APP
851 ; CHECK-NEXT:    psignb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
852 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
853 ; CHECK-NEXT:    retq
854   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
855   %2 = call x86_mmx @llvm.x86.ssse3.psign.b(x86_mmx %a0, x86_mmx %a1) nounwind readnone
856   ret x86_mmx %2
858 declare x86_mmx @llvm.x86.ssse3.psign.b(x86_mmx, x86_mmx) nounwind readnone
860 define x86_mmx @stack_fold_psignd(x86_mmx %a0, x86_mmx %a1) {
861 ; CHECK-LABEL: stack_fold_psignd:
862 ; CHECK:       # %bb.0:
863 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
864 ; CHECK-NEXT:    #APP
865 ; CHECK-NEXT:    nop
866 ; CHECK-NEXT:    #NO_APP
867 ; CHECK-NEXT:    psignd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
868 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
869 ; CHECK-NEXT:    retq
870   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
871   %2 = call x86_mmx @llvm.x86.ssse3.psign.d(x86_mmx %a0, x86_mmx %a1) nounwind readnone
872   ret x86_mmx %2
874 declare x86_mmx @llvm.x86.ssse3.psign.d(x86_mmx, x86_mmx) nounwind readnone
876 define x86_mmx @stack_fold_psignw(x86_mmx %a0, x86_mmx %a1) {
877 ; CHECK-LABEL: stack_fold_psignw:
878 ; CHECK:       # %bb.0:
879 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
880 ; CHECK-NEXT:    #APP
881 ; CHECK-NEXT:    nop
882 ; CHECK-NEXT:    #NO_APP
883 ; CHECK-NEXT:    psignw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
884 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
885 ; CHECK-NEXT:    retq
886   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
887   %2 = call x86_mmx @llvm.x86.ssse3.psign.w(x86_mmx %a0, x86_mmx %a1) nounwind readnone
888   ret x86_mmx %2
890 declare x86_mmx @llvm.x86.ssse3.psign.w(x86_mmx, x86_mmx) nounwind readnone
892 define x86_mmx @stack_fold_pslld(x86_mmx %a, x86_mmx %b) {
893 ; CHECK-LABEL: stack_fold_pslld:
894 ; CHECK:       # %bb.0:
895 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
896 ; CHECK-NEXT:    #APP
897 ; CHECK-NEXT:    nop
898 ; CHECK-NEXT:    #NO_APP
899 ; CHECK-NEXT:    pslld {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
900 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
901 ; CHECK-NEXT:    retq
902   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
903   %2 = call x86_mmx @llvm.x86.mmx.psll.d(x86_mmx %a, x86_mmx %b) nounwind readnone
904   ret x86_mmx %2
906 declare x86_mmx @llvm.x86.mmx.psll.d(x86_mmx, x86_mmx) nounwind readnone
908 define x86_mmx @stack_fold_psllq(x86_mmx %a, x86_mmx %b) {
909 ; CHECK-LABEL: stack_fold_psllq:
910 ; CHECK:       # %bb.0:
911 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
912 ; CHECK-NEXT:    #APP
913 ; CHECK-NEXT:    nop
914 ; CHECK-NEXT:    #NO_APP
915 ; CHECK-NEXT:    psllq {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
916 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
917 ; CHECK-NEXT:    retq
918   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
919   %2 = call x86_mmx @llvm.x86.mmx.psll.q(x86_mmx %a, x86_mmx %b) nounwind readnone
920   ret x86_mmx %2
922 declare x86_mmx @llvm.x86.mmx.psll.q(x86_mmx, x86_mmx) nounwind readnone
924 define x86_mmx @stack_fold_psllw(x86_mmx %a, x86_mmx %b) {
925 ; CHECK-LABEL: stack_fold_psllw:
926 ; CHECK:       # %bb.0:
927 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
928 ; CHECK-NEXT:    #APP
929 ; CHECK-NEXT:    nop
930 ; CHECK-NEXT:    #NO_APP
931 ; CHECK-NEXT:    psllw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
932 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
933 ; CHECK-NEXT:    retq
934   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
935   %2 = call x86_mmx @llvm.x86.mmx.psll.w(x86_mmx %a, x86_mmx %b) nounwind readnone
936   ret x86_mmx %2
938 declare x86_mmx @llvm.x86.mmx.psll.w(x86_mmx, x86_mmx) nounwind readnone
940 define x86_mmx @stack_fold_psrad(x86_mmx %a, x86_mmx %b) {
941 ; CHECK-LABEL: stack_fold_psrad:
942 ; CHECK:       # %bb.0:
943 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
944 ; CHECK-NEXT:    #APP
945 ; CHECK-NEXT:    nop
946 ; CHECK-NEXT:    #NO_APP
947 ; CHECK-NEXT:    psrad {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
948 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
949 ; CHECK-NEXT:    retq
950   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
951   %2 = call x86_mmx @llvm.x86.mmx.psra.d(x86_mmx %a, x86_mmx %b) nounwind readnone
952   ret x86_mmx %2
954 declare x86_mmx @llvm.x86.mmx.psra.d(x86_mmx, x86_mmx) nounwind readnone
956 define x86_mmx @stack_fold_psraw(x86_mmx %a, x86_mmx %b) {
957 ; CHECK-LABEL: stack_fold_psraw:
958 ; CHECK:       # %bb.0:
959 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
960 ; CHECK-NEXT:    #APP
961 ; CHECK-NEXT:    nop
962 ; CHECK-NEXT:    #NO_APP
963 ; CHECK-NEXT:    psraw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
964 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
965 ; CHECK-NEXT:    retq
966   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
967   %2 = call x86_mmx @llvm.x86.mmx.psra.w(x86_mmx %a, x86_mmx %b) nounwind readnone
968   ret x86_mmx %2
970 declare x86_mmx @llvm.x86.mmx.psra.w(x86_mmx, x86_mmx) nounwind readnone
972 define x86_mmx @stack_fold_psrld(x86_mmx %a, x86_mmx %b) {
973 ; CHECK-LABEL: stack_fold_psrld:
974 ; CHECK:       # %bb.0:
975 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
976 ; CHECK-NEXT:    #APP
977 ; CHECK-NEXT:    nop
978 ; CHECK-NEXT:    #NO_APP
979 ; CHECK-NEXT:    psrld {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
980 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
981 ; CHECK-NEXT:    retq
982   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
983   %2 = call x86_mmx @llvm.x86.mmx.psrl.d(x86_mmx %a, x86_mmx %b) nounwind readnone
984   ret x86_mmx %2
986 declare x86_mmx @llvm.x86.mmx.psrl.d(x86_mmx, x86_mmx) nounwind readnone
988 define x86_mmx @stack_fold_psrlq(x86_mmx %a, x86_mmx %b) {
989 ; CHECK-LABEL: stack_fold_psrlq:
990 ; CHECK:       # %bb.0:
991 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
992 ; CHECK-NEXT:    #APP
993 ; CHECK-NEXT:    nop
994 ; CHECK-NEXT:    #NO_APP
995 ; CHECK-NEXT:    psrlq {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
996 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
997 ; CHECK-NEXT:    retq
998   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
999   %2 = call x86_mmx @llvm.x86.mmx.psrl.q(x86_mmx %a, x86_mmx %b) nounwind readnone
1000   ret x86_mmx %2
1002 declare x86_mmx @llvm.x86.mmx.psrl.q(x86_mmx, x86_mmx) nounwind readnone
1004 define x86_mmx @stack_fold_psrlw(x86_mmx %a, x86_mmx %b) {
1005 ; CHECK-LABEL: stack_fold_psrlw:
1006 ; CHECK:       # %bb.0:
1007 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1008 ; CHECK-NEXT:    #APP
1009 ; CHECK-NEXT:    nop
1010 ; CHECK-NEXT:    #NO_APP
1011 ; CHECK-NEXT:    psrlw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1012 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1013 ; CHECK-NEXT:    retq
1014   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1015   %2 = call x86_mmx @llvm.x86.mmx.psrl.w(x86_mmx %a, x86_mmx %b) nounwind readnone
1016   ret x86_mmx %2
1018 declare x86_mmx @llvm.x86.mmx.psrl.w(x86_mmx, x86_mmx) nounwind readnone
1020 define x86_mmx @stack_fold_psubb(x86_mmx %a, x86_mmx %b) {
1021 ; CHECK-LABEL: stack_fold_psubb:
1022 ; CHECK:       # %bb.0:
1023 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1024 ; CHECK-NEXT:    #APP
1025 ; CHECK-NEXT:    nop
1026 ; CHECK-NEXT:    #NO_APP
1027 ; CHECK-NEXT:    psubb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1028 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1029 ; CHECK-NEXT:    retq
1030   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1031   %2 = call x86_mmx @llvm.x86.mmx.psub.b(x86_mmx %a, x86_mmx %b) nounwind readnone
1032   ret x86_mmx %2
1034 declare x86_mmx @llvm.x86.mmx.psub.b(x86_mmx, x86_mmx) nounwind readnone
1036 define x86_mmx @stack_fold_psubd(x86_mmx %a, x86_mmx %b) {
1037 ; CHECK-LABEL: stack_fold_psubd:
1038 ; CHECK:       # %bb.0:
1039 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1040 ; CHECK-NEXT:    #APP
1041 ; CHECK-NEXT:    nop
1042 ; CHECK-NEXT:    #NO_APP
1043 ; CHECK-NEXT:    psubd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1044 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1045 ; CHECK-NEXT:    retq
1046   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1047   %2 = call x86_mmx @llvm.x86.mmx.psub.d(x86_mmx %a, x86_mmx %b) nounwind readnone
1048   ret x86_mmx %2
1050 declare x86_mmx @llvm.x86.mmx.psub.d(x86_mmx, x86_mmx) nounwind readnone
1052 define x86_mmx @stack_fold_psubq(x86_mmx %a, x86_mmx %b) {
1053 ; CHECK-LABEL: stack_fold_psubq:
1054 ; CHECK:       # %bb.0:
1055 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1056 ; CHECK-NEXT:    #APP
1057 ; CHECK-NEXT:    nop
1058 ; CHECK-NEXT:    #NO_APP
1059 ; CHECK-NEXT:    psubq {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1060 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1061 ; CHECK-NEXT:    retq
1062   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1063   %2 = call x86_mmx @llvm.x86.mmx.psub.q(x86_mmx %a, x86_mmx %b) nounwind readnone
1064   ret x86_mmx %2
1066 declare x86_mmx @llvm.x86.mmx.psub.q(x86_mmx, x86_mmx) nounwind readnone
1068 define x86_mmx @stack_fold_psubsb(x86_mmx %a, x86_mmx %b) {
1069 ; CHECK-LABEL: stack_fold_psubsb:
1070 ; CHECK:       # %bb.0:
1071 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1072 ; CHECK-NEXT:    #APP
1073 ; CHECK-NEXT:    nop
1074 ; CHECK-NEXT:    #NO_APP
1075 ; CHECK-NEXT:    psubsb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1076 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1077 ; CHECK-NEXT:    retq
1078   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1079   %2 = call x86_mmx @llvm.x86.mmx.psubs.b(x86_mmx %a, x86_mmx %b) nounwind readnone
1080   ret x86_mmx %2
1082 declare x86_mmx @llvm.x86.mmx.psubs.b(x86_mmx, x86_mmx) nounwind readnone
1084 define x86_mmx @stack_fold_psubsw(x86_mmx %a, x86_mmx %b) {
1085 ; CHECK-LABEL: stack_fold_psubsw:
1086 ; CHECK:       # %bb.0:
1087 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1088 ; CHECK-NEXT:    #APP
1089 ; CHECK-NEXT:    nop
1090 ; CHECK-NEXT:    #NO_APP
1091 ; CHECK-NEXT:    psubsw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1092 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1093 ; CHECK-NEXT:    retq
1094   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1095   %2 = call x86_mmx @llvm.x86.mmx.psubs.w(x86_mmx %a, x86_mmx %b) nounwind readnone
1096   ret x86_mmx %2
1098 declare x86_mmx @llvm.x86.mmx.psubs.w(x86_mmx, x86_mmx) nounwind readnone
1100 define x86_mmx @stack_fold_psubusb(x86_mmx %a, x86_mmx %b) {
1101 ; CHECK-LABEL: stack_fold_psubusb:
1102 ; CHECK:       # %bb.0:
1103 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1104 ; CHECK-NEXT:    #APP
1105 ; CHECK-NEXT:    nop
1106 ; CHECK-NEXT:    #NO_APP
1107 ; CHECK-NEXT:    psubusb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1108 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1109 ; CHECK-NEXT:    retq
1110   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1111   %2 = call x86_mmx @llvm.x86.mmx.psubus.b(x86_mmx %a, x86_mmx %b) nounwind readnone
1112   ret x86_mmx %2
1114 declare x86_mmx @llvm.x86.mmx.psubus.b(x86_mmx, x86_mmx) nounwind readnone
1116 define x86_mmx @stack_fold_psubusw(x86_mmx %a, x86_mmx %b) {
1117 ; CHECK-LABEL: stack_fold_psubusw:
1118 ; CHECK:       # %bb.0:
1119 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1120 ; CHECK-NEXT:    #APP
1121 ; CHECK-NEXT:    nop
1122 ; CHECK-NEXT:    #NO_APP
1123 ; CHECK-NEXT:    psubusw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1124 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1125 ; CHECK-NEXT:    retq
1126   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1127   %2 = call x86_mmx @llvm.x86.mmx.psubus.w(x86_mmx %a, x86_mmx %b) nounwind readnone
1128   ret x86_mmx %2
1130 declare x86_mmx @llvm.x86.mmx.psubus.w(x86_mmx, x86_mmx) nounwind readnone
1132 define x86_mmx @stack_fold_psubw(x86_mmx %a, x86_mmx %b) {
1133 ; CHECK-LABEL: stack_fold_psubw:
1134 ; CHECK:       # %bb.0:
1135 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1136 ; CHECK-NEXT:    #APP
1137 ; CHECK-NEXT:    nop
1138 ; CHECK-NEXT:    #NO_APP
1139 ; CHECK-NEXT:    psubw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1140 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1141 ; CHECK-NEXT:    retq
1142   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1143   %2 = call x86_mmx @llvm.x86.mmx.psub.w(x86_mmx %a, x86_mmx %b) nounwind readnone
1144   ret x86_mmx %2
1146 declare x86_mmx @llvm.x86.mmx.psub.w(x86_mmx, x86_mmx) nounwind readnone
1148 define x86_mmx @stack_fold_punpckhbw(x86_mmx %a, x86_mmx %b) {
1149 ; CHECK-LABEL: stack_fold_punpckhbw:
1150 ; CHECK:       # %bb.0:
1151 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1152 ; CHECK-NEXT:    #APP
1153 ; CHECK-NEXT:    nop
1154 ; CHECK-NEXT:    #NO_APP
1155 ; CHECK-NEXT:    punpckhbw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1156 ; CHECK-NEXT:    # mm0 = mm0[4],mem[4],mm0[5],mem[5],mm0[6],mem[6],mm0[7],mem[7]
1157 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1158 ; CHECK-NEXT:    retq
1159   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1160   %2 = call x86_mmx @llvm.x86.mmx.punpckhbw(x86_mmx %a, x86_mmx %b) nounwind readnone
1161   ret x86_mmx %2
1163 declare x86_mmx @llvm.x86.mmx.punpckhbw(x86_mmx, x86_mmx) nounwind readnone
1165 define x86_mmx @stack_fold_punpckhdq(x86_mmx %a, x86_mmx %b) {
1166 ; CHECK-LABEL: stack_fold_punpckhdq:
1167 ; CHECK:       # %bb.0:
1168 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1169 ; CHECK-NEXT:    #APP
1170 ; CHECK-NEXT:    nop
1171 ; CHECK-NEXT:    #NO_APP
1172 ; CHECK-NEXT:    punpckhdq {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1173 ; CHECK-NEXT:    # mm0 = mm0[1],mem[1]
1174 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1175 ; CHECK-NEXT:    retq
1176   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1177   %2 = call x86_mmx @llvm.x86.mmx.punpckhdq(x86_mmx %a, x86_mmx %b) nounwind readnone
1178   ret x86_mmx %2
1180 declare x86_mmx @llvm.x86.mmx.punpckhdq(x86_mmx, x86_mmx) nounwind readnone
1182 define x86_mmx @stack_fold_punpckhwd(x86_mmx %a, x86_mmx %b) {
1183 ; CHECK-LABEL: stack_fold_punpckhwd:
1184 ; CHECK:       # %bb.0:
1185 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1186 ; CHECK-NEXT:    #APP
1187 ; CHECK-NEXT:    nop
1188 ; CHECK-NEXT:    #NO_APP
1189 ; CHECK-NEXT:    punpckhwd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1190 ; CHECK-NEXT:    # mm0 = mm0[2],mem[2],mm0[3],mem[3]
1191 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1192 ; CHECK-NEXT:    retq
1193   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1194   %2 = call x86_mmx @llvm.x86.mmx.punpckhwd(x86_mmx %a, x86_mmx %b) nounwind readnone
1195   ret x86_mmx %2
1197 declare x86_mmx @llvm.x86.mmx.punpckhwd(x86_mmx, x86_mmx) nounwind readnone
1199 define x86_mmx @stack_fold_punpcklbw(x86_mmx %a, x86_mmx %b) {
1200 ; CHECK-LABEL: stack_fold_punpcklbw:
1201 ; CHECK:       # %bb.0:
1202 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1203 ; CHECK-NEXT:    #APP
1204 ; CHECK-NEXT:    nop
1205 ; CHECK-NEXT:    #NO_APP
1206 ; CHECK-NEXT:    punpcklbw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1207 ; CHECK-NEXT:    # mm0 = mm0[0],mem[0],mm0[1],mem[1],mm0[2],mem[2],mm0[3],mem[3]
1208 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1209 ; CHECK-NEXT:    retq
1210   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1211   %2 = call x86_mmx @llvm.x86.mmx.punpcklbw(x86_mmx %a, x86_mmx %b) nounwind readnone
1212   ret x86_mmx %2
1214 declare x86_mmx @llvm.x86.mmx.punpcklbw(x86_mmx, x86_mmx) nounwind readnone
1216 define x86_mmx @stack_fold_punpckldq(x86_mmx %a, x86_mmx %b) {
1217 ; CHECK-LABEL: stack_fold_punpckldq:
1218 ; CHECK:       # %bb.0:
1219 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1220 ; CHECK-NEXT:    #APP
1221 ; CHECK-NEXT:    nop
1222 ; CHECK-NEXT:    #NO_APP
1223 ; CHECK-NEXT:    punpckldq {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1224 ; CHECK-NEXT:    # mm0 = mm0[0],mem[0]
1225 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1226 ; CHECK-NEXT:    retq
1227   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1228   %2 = call x86_mmx @llvm.x86.mmx.punpckldq(x86_mmx %a, x86_mmx %b) nounwind readnone
1229   ret x86_mmx %2
1231 declare x86_mmx @llvm.x86.mmx.punpckldq(x86_mmx, x86_mmx) nounwind readnone
1233 define x86_mmx @stack_fold_punpcklwd(x86_mmx %a, x86_mmx %b) {
1234 ; CHECK-LABEL: stack_fold_punpcklwd:
1235 ; CHECK:       # %bb.0:
1236 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1237 ; CHECK-NEXT:    #APP
1238 ; CHECK-NEXT:    nop
1239 ; CHECK-NEXT:    #NO_APP
1240 ; CHECK-NEXT:    punpcklwd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1241 ; CHECK-NEXT:    # mm0 = mm0[0],mem[0],mm0[1],mem[1]
1242 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1243 ; CHECK-NEXT:    retq
1244   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1245   %2 = call x86_mmx @llvm.x86.mmx.punpcklwd(x86_mmx %a, x86_mmx %b) nounwind readnone
1246   ret x86_mmx %2
1248 declare x86_mmx @llvm.x86.mmx.punpcklwd(x86_mmx, x86_mmx) nounwind readnone
1250 define x86_mmx @stack_fold_pxor(x86_mmx %a, x86_mmx %b) {
1251 ; CHECK-LABEL: stack_fold_pxor:
1252 ; CHECK:       # %bb.0:
1253 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
1254 ; CHECK-NEXT:    #APP
1255 ; CHECK-NEXT:    nop
1256 ; CHECK-NEXT:    #NO_APP
1257 ; CHECK-NEXT:    pxor {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
1258 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
1259 ; CHECK-NEXT:    retq
1260   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
1261   %2 = call x86_mmx @llvm.x86.mmx.pxor(x86_mmx %a, x86_mmx %b) nounwind readnone
1262   ret x86_mmx %2
1264 declare x86_mmx @llvm.x86.mmx.pxor(x86_mmx, x86_mmx) nounwind readnone