[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / X86 / stack-folding-3dnow.ll
blob1cbd61567f32703725254355382972ced62c71af
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+3dnow | FileCheck %s
4 define x86_mmx @stack_fold_pavgusb(x86_mmx %a, x86_mmx %b) {
5 ; CHECK-LABEL: stack_fold_pavgusb:
6 ; CHECK:       # %bb.0:
7 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
8 ; CHECK-NEXT:    #APP
9 ; CHECK-NEXT:    nop
10 ; CHECK-NEXT:    #NO_APP
11 ; CHECK-NEXT:    pavgusb {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
12 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
13 ; CHECK-NEXT:    retq
14   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
15   %2 = call x86_mmx @llvm.x86.3dnow.pavgusb(x86_mmx %a, x86_mmx %b) nounwind readnone
16   ret x86_mmx %2
18 declare x86_mmx @llvm.x86.3dnow.pavgusb(x86_mmx, x86_mmx) nounwind readnone
20 define x86_mmx @stack_fold_pf2id(x86_mmx %a) {
21 ; CHECK-LABEL: stack_fold_pf2id:
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:    pf2id {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
28 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
29 ; CHECK-NEXT:    retq
30   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
31   %2 = call x86_mmx @llvm.x86.3dnow.pf2id(x86_mmx %a) nounwind readnone
32   ret x86_mmx %2
34 declare x86_mmx @llvm.x86.3dnow.pf2id(x86_mmx) nounwind readnone
36 define x86_mmx @stack_fold_pf2iw(x86_mmx %a) {
37 ; CHECK-LABEL: stack_fold_pf2iw:
38 ; CHECK:       # %bb.0:
39 ; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
40 ; CHECK-NEXT:    #APP
41 ; CHECK-NEXT:    nop
42 ; CHECK-NEXT:    #NO_APP
43 ; CHECK-NEXT:    pf2iw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
44 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
45 ; CHECK-NEXT:    retq
46   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
47   %2 = call x86_mmx @llvm.x86.3dnowa.pf2iw(x86_mmx %a) nounwind readnone
48   ret x86_mmx %2
50 declare x86_mmx @llvm.x86.3dnowa.pf2iw(x86_mmx) nounwind readnone
52 define x86_mmx @stack_fold_pfacc(x86_mmx %a, x86_mmx %b) {
53 ; CHECK-LABEL: stack_fold_pfacc:
54 ; CHECK:       # %bb.0:
55 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
56 ; CHECK-NEXT:    #APP
57 ; CHECK-NEXT:    nop
58 ; CHECK-NEXT:    #NO_APP
59 ; CHECK-NEXT:    pfacc {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
60 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
61 ; CHECK-NEXT:    retq
62   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
63   %2 = call x86_mmx @llvm.x86.3dnow.pfacc(x86_mmx %a, x86_mmx %b) nounwind readnone
64   ret x86_mmx %2
66 declare x86_mmx @llvm.x86.3dnow.pfacc(x86_mmx, x86_mmx) nounwind readnone
68 define x86_mmx @stack_fold_pfadd(x86_mmx %a, x86_mmx %b) {
69 ; CHECK-LABEL: stack_fold_pfadd:
70 ; CHECK:       # %bb.0:
71 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
72 ; CHECK-NEXT:    #APP
73 ; CHECK-NEXT:    nop
74 ; CHECK-NEXT:    #NO_APP
75 ; CHECK-NEXT:    pfadd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
76 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
77 ; CHECK-NEXT:    retq
78   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
79   %2 = call x86_mmx @llvm.x86.3dnow.pfadd(x86_mmx %a, x86_mmx %b) nounwind readnone
80   ret x86_mmx %2
82 declare x86_mmx @llvm.x86.3dnow.pfadd(x86_mmx, x86_mmx) nounwind readnone
84 define x86_mmx @stack_fold_pfcmpeq(x86_mmx %a, x86_mmx %b) {
85 ; CHECK-LABEL: stack_fold_pfcmpeq:
86 ; CHECK:       # %bb.0:
87 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
88 ; CHECK-NEXT:    #APP
89 ; CHECK-NEXT:    nop
90 ; CHECK-NEXT:    #NO_APP
91 ; CHECK-NEXT:    pfcmpeq {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
92 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
93 ; CHECK-NEXT:    retq
94   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
95   %2 = call x86_mmx @llvm.x86.3dnow.pfcmpeq(x86_mmx %a, x86_mmx %b) nounwind readnone
96   ret x86_mmx %2
98 declare x86_mmx @llvm.x86.3dnow.pfcmpeq(x86_mmx, x86_mmx) nounwind readnone
100 define x86_mmx @stack_fold_pfcmpge(x86_mmx %a, x86_mmx %b) {
101 ; CHECK-LABEL: stack_fold_pfcmpge:
102 ; CHECK:       # %bb.0:
103 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
104 ; CHECK-NEXT:    #APP
105 ; CHECK-NEXT:    nop
106 ; CHECK-NEXT:    #NO_APP
107 ; CHECK-NEXT:    pfcmpge {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
108 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
109 ; CHECK-NEXT:    retq
110   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
111   %2 = call x86_mmx @llvm.x86.3dnow.pfcmpge(x86_mmx %a, x86_mmx %b) nounwind readnone
112   ret x86_mmx %2
114 declare x86_mmx @llvm.x86.3dnow.pfcmpge(x86_mmx, x86_mmx) nounwind readnone
116 define x86_mmx @stack_fold_pfcmpgt(x86_mmx %a, x86_mmx %b) {
117 ; CHECK-LABEL: stack_fold_pfcmpgt:
118 ; CHECK:       # %bb.0:
119 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
120 ; CHECK-NEXT:    #APP
121 ; CHECK-NEXT:    nop
122 ; CHECK-NEXT:    #NO_APP
123 ; CHECK-NEXT:    pfcmpgt {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
124 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
125 ; CHECK-NEXT:    retq
126   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
127   %2 = call x86_mmx @llvm.x86.3dnow.pfcmpgt(x86_mmx %a, x86_mmx %b) nounwind readnone
128   ret x86_mmx %2
130 declare x86_mmx @llvm.x86.3dnow.pfcmpgt(x86_mmx, x86_mmx) nounwind readnone
132 define x86_mmx @stack_fold_pfmax(x86_mmx %a, x86_mmx %b) {
133 ; CHECK-LABEL: stack_fold_pfmax:
134 ; CHECK:       # %bb.0:
135 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
136 ; CHECK-NEXT:    #APP
137 ; CHECK-NEXT:    nop
138 ; CHECK-NEXT:    #NO_APP
139 ; CHECK-NEXT:    pfmax {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
140 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
141 ; CHECK-NEXT:    retq
142   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
143   %2 = call x86_mmx @llvm.x86.3dnow.pfmax(x86_mmx %a, x86_mmx %b) nounwind readnone
144   ret x86_mmx %2
146 declare x86_mmx @llvm.x86.3dnow.pfmax(x86_mmx, x86_mmx) nounwind readnone
148 define x86_mmx @stack_fold_pfmin(x86_mmx %a, x86_mmx %b) {
149 ; CHECK-LABEL: stack_fold_pfmin:
150 ; CHECK:       # %bb.0:
151 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
152 ; CHECK-NEXT:    #APP
153 ; CHECK-NEXT:    nop
154 ; CHECK-NEXT:    #NO_APP
155 ; CHECK-NEXT:    pfmin {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
156 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
157 ; CHECK-NEXT:    retq
158   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
159   %2 = call x86_mmx @llvm.x86.3dnow.pfmin(x86_mmx %a, x86_mmx %b) nounwind readnone
160   ret x86_mmx %2
162 declare x86_mmx @llvm.x86.3dnow.pfmin(x86_mmx, x86_mmx) nounwind readnone
164 define x86_mmx @stack_fold_pfmul(x86_mmx %a, x86_mmx %b) {
165 ; CHECK-LABEL: stack_fold_pfmul:
166 ; CHECK:       # %bb.0:
167 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
168 ; CHECK-NEXT:    #APP
169 ; CHECK-NEXT:    nop
170 ; CHECK-NEXT:    #NO_APP
171 ; CHECK-NEXT:    pfmul {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
172 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
173 ; CHECK-NEXT:    retq
174   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
175   %2 = call x86_mmx @llvm.x86.3dnow.pfmul(x86_mmx %a, x86_mmx %b) nounwind readnone
176   ret x86_mmx %2
178 declare x86_mmx @llvm.x86.3dnow.pfmul(x86_mmx, x86_mmx) nounwind readnone
180 define x86_mmx @stack_fold_pfnacc(x86_mmx %a, x86_mmx %b) {
181 ; CHECK-LABEL: stack_fold_pfnacc:
182 ; CHECK:       # %bb.0:
183 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
184 ; CHECK-NEXT:    #APP
185 ; CHECK-NEXT:    nop
186 ; CHECK-NEXT:    #NO_APP
187 ; CHECK-NEXT:    pfnacc {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
188 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
189 ; CHECK-NEXT:    retq
190   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
191   %2 = call x86_mmx @llvm.x86.3dnowa.pfnacc(x86_mmx %a, x86_mmx %b) nounwind readnone
192   ret x86_mmx %2
194 declare x86_mmx @llvm.x86.3dnowa.pfnacc(x86_mmx, x86_mmx) nounwind readnone
196 define x86_mmx @stack_fold_pfpnacc(x86_mmx %a, x86_mmx %b) {
197 ; CHECK-LABEL: stack_fold_pfpnacc:
198 ; CHECK:       # %bb.0:
199 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
200 ; CHECK-NEXT:    #APP
201 ; CHECK-NEXT:    nop
202 ; CHECK-NEXT:    #NO_APP
203 ; CHECK-NEXT:    pfpnacc {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
204 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
205 ; CHECK-NEXT:    retq
206   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
207   %2 = call x86_mmx @llvm.x86.3dnowa.pfpnacc(x86_mmx %a, x86_mmx %b) nounwind readnone
208   ret x86_mmx %2
210 declare x86_mmx @llvm.x86.3dnowa.pfpnacc(x86_mmx, x86_mmx) nounwind readnone
212 define x86_mmx @stack_fold_pfrcp(x86_mmx %a) {
213 ; CHECK-LABEL: stack_fold_pfrcp:
214 ; CHECK:       # %bb.0:
215 ; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
216 ; CHECK-NEXT:    #APP
217 ; CHECK-NEXT:    nop
218 ; CHECK-NEXT:    #NO_APP
219 ; CHECK-NEXT:    pfrcp {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
220 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
221 ; CHECK-NEXT:    retq
222   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
223   %2 = call x86_mmx @llvm.x86.3dnow.pfrcp(x86_mmx %a) nounwind readnone
224   ret x86_mmx %2
226 declare x86_mmx @llvm.x86.3dnow.pfrcp(x86_mmx) nounwind readnone
228 define x86_mmx @stack_fold_pfrcpit1(x86_mmx %a, x86_mmx %b) {
229 ; CHECK-LABEL: stack_fold_pfrcpit1:
230 ; CHECK:       # %bb.0:
231 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
232 ; CHECK-NEXT:    #APP
233 ; CHECK-NEXT:    nop
234 ; CHECK-NEXT:    #NO_APP
235 ; CHECK-NEXT:    pfrcpit1 {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
236 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
237 ; CHECK-NEXT:    retq
238   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
239   %2 = call x86_mmx @llvm.x86.3dnow.pfrcpit1(x86_mmx %a, x86_mmx %b) nounwind readnone
240   ret x86_mmx %2
242 declare x86_mmx @llvm.x86.3dnow.pfrcpit1(x86_mmx, x86_mmx) nounwind readnone
244 define x86_mmx @stack_fold_pfrcpit2(x86_mmx %a, x86_mmx %b) {
245 ; CHECK-LABEL: stack_fold_pfrcpit2:
246 ; CHECK:       # %bb.0:
247 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
248 ; CHECK-NEXT:    #APP
249 ; CHECK-NEXT:    nop
250 ; CHECK-NEXT:    #NO_APP
251 ; CHECK-NEXT:    pfrcpit2 {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
252 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
253 ; CHECK-NEXT:    retq
254   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
255   %2 = call x86_mmx @llvm.x86.3dnow.pfrcpit2(x86_mmx %a, x86_mmx %b) nounwind readnone
256   ret x86_mmx %2
258 declare x86_mmx @llvm.x86.3dnow.pfrcpit2(x86_mmx, x86_mmx) nounwind readnone
260 define x86_mmx @stack_fold_pfrsqit1(x86_mmx %a, x86_mmx %b) {
261 ; CHECK-LABEL: stack_fold_pfrsqit1:
262 ; CHECK:       # %bb.0:
263 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
264 ; CHECK-NEXT:    #APP
265 ; CHECK-NEXT:    nop
266 ; CHECK-NEXT:    #NO_APP
267 ; CHECK-NEXT:    pfrsqit1 {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
268 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
269 ; CHECK-NEXT:    retq
270   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
271   %2 = call x86_mmx @llvm.x86.3dnow.pfrsqit1(x86_mmx %a, x86_mmx %b) nounwind readnone
272   ret x86_mmx %2
274 declare x86_mmx @llvm.x86.3dnow.pfrsqit1(x86_mmx, x86_mmx) nounwind readnone
276 define x86_mmx @stack_fold_pfrsqrt(x86_mmx %a) {
277 ; CHECK-LABEL: stack_fold_pfrsqrt:
278 ; CHECK:       # %bb.0:
279 ; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
280 ; CHECK-NEXT:    #APP
281 ; CHECK-NEXT:    nop
282 ; CHECK-NEXT:    #NO_APP
283 ; CHECK-NEXT:    pfrsqrt {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
284 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
285 ; CHECK-NEXT:    retq
286   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
287   %2 = call x86_mmx @llvm.x86.3dnow.pfrsqrt(x86_mmx %a) nounwind readnone
288   ret x86_mmx %2
290 declare x86_mmx @llvm.x86.3dnow.pfrsqrt(x86_mmx) nounwind readnone
292 define x86_mmx @stack_fold_pfsub(x86_mmx %a, x86_mmx %b) {
293 ; CHECK-LABEL: stack_fold_pfsub:
294 ; CHECK:       # %bb.0:
295 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
296 ; CHECK-NEXT:    #APP
297 ; CHECK-NEXT:    nop
298 ; CHECK-NEXT:    #NO_APP
299 ; CHECK-NEXT:    pfsub {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
300 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
301 ; CHECK-NEXT:    retq
302   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
303   %2 = call x86_mmx @llvm.x86.3dnow.pfsub(x86_mmx %a, x86_mmx %b) nounwind readnone
304   ret x86_mmx %2
306 declare x86_mmx @llvm.x86.3dnow.pfsub(x86_mmx, x86_mmx) nounwind readnone
308 define x86_mmx @stack_fold_pfsubr(x86_mmx %a, x86_mmx %b) {
309 ; CHECK-LABEL: stack_fold_pfsubr:
310 ; CHECK:       # %bb.0:
311 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
312 ; CHECK-NEXT:    #APP
313 ; CHECK-NEXT:    nop
314 ; CHECK-NEXT:    #NO_APP
315 ; CHECK-NEXT:    pfsubr {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
316 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
317 ; CHECK-NEXT:    retq
318   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
319   %2 = call x86_mmx @llvm.x86.3dnow.pfsubr(x86_mmx %a, x86_mmx %b) nounwind readnone
320   ret x86_mmx %2
322 declare x86_mmx @llvm.x86.3dnow.pfsubr(x86_mmx, x86_mmx) nounwind readnone
324 define x86_mmx @stack_fold_pi2fd(x86_mmx %a) {
325 ; CHECK-LABEL: stack_fold_pi2fd:
326 ; CHECK:       # %bb.0:
327 ; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
328 ; CHECK-NEXT:    #APP
329 ; CHECK-NEXT:    nop
330 ; CHECK-NEXT:    #NO_APP
331 ; CHECK-NEXT:    pi2fd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
332 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
333 ; CHECK-NEXT:    retq
334   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
335   %2 = call x86_mmx @llvm.x86.3dnow.pi2fd(x86_mmx %a) nounwind readnone
336   ret x86_mmx %2
338 declare x86_mmx @llvm.x86.3dnow.pi2fd(x86_mmx) nounwind readnone
340 define x86_mmx @stack_fold_pi2fw(x86_mmx %a) {
341 ; CHECK-LABEL: stack_fold_pi2fw:
342 ; CHECK:       # %bb.0:
343 ; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
344 ; CHECK-NEXT:    #APP
345 ; CHECK-NEXT:    nop
346 ; CHECK-NEXT:    #NO_APP
347 ; CHECK-NEXT:    pi2fw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
348 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
349 ; CHECK-NEXT:    retq
350   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
351   %2 = call x86_mmx @llvm.x86.3dnowa.pi2fw(x86_mmx %a) nounwind readnone
352   ret x86_mmx %2
354 declare x86_mmx @llvm.x86.3dnowa.pi2fw(x86_mmx) nounwind readnone
356 define x86_mmx @stack_fold_pmulhrw(x86_mmx %a, x86_mmx %b) {
357 ; CHECK-LABEL: stack_fold_pmulhrw:
358 ; CHECK:       # %bb.0:
359 ; CHECK-NEXT:    movq %mm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
360 ; CHECK-NEXT:    #APP
361 ; CHECK-NEXT:    nop
362 ; CHECK-NEXT:    #NO_APP
363 ; CHECK-NEXT:    pmulhrw {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
364 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
365 ; CHECK-NEXT:    retq
366   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
367   %2 = call x86_mmx @llvm.x86.3dnow.pmulhrw(x86_mmx %a, x86_mmx %b) nounwind readnone
368   ret x86_mmx %2
370 declare x86_mmx @llvm.x86.3dnow.pmulhrw(x86_mmx, x86_mmx) nounwind readnone
372 define x86_mmx @stack_fold_pswapd(x86_mmx %a) {
373 ; CHECK-LABEL: stack_fold_pswapd:
374 ; CHECK:       # %bb.0:
375 ; CHECK-NEXT:    movq %mm0, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
376 ; CHECK-NEXT:    #APP
377 ; CHECK-NEXT:    nop
378 ; CHECK-NEXT:    #NO_APP
379 ; CHECK-NEXT:    pswapd {{[-0-9]+}}(%r{{[sb]}}p), %mm0 # 8-byte Folded Reload
380 ; CHECK-NEXT:    # mm0 = mem[1,0]
381 ; CHECK-NEXT:    movq2dq %mm0, %xmm0
382 ; CHECK-NEXT:    retq
383   %1 = tail call x86_mmx asm sideeffect "nop", "=y,~{mm1},~{mm2},~{mm3},~{mm4},~{mm5},~{mm6},~{mm7}"()
384   %2 = call x86_mmx @llvm.x86.3dnowa.pswapd(x86_mmx %a) nounwind readnone
385   ret x86_mmx %2
387 declare x86_mmx @llvm.x86.3dnowa.pswapd(x86_mmx) nounwind readnone