• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc < %s -march=x86 -mattr=+mmx,+ssse3 | FileCheck %s
2
3declare x86_mmx @llvm.x86.ssse3.phadd.w(x86_mmx, x86_mmx) nounwind readnone
4
5define i64 @test1(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
6; CHECK: phaddw
7entry:
8  %0 = bitcast <1 x i64> %b to <4 x i16>
9  %1 = bitcast <1 x i64> %a to <4 x i16>
10  %2 = bitcast <4 x i16> %1 to x86_mmx
11  %3 = bitcast <4 x i16> %0 to x86_mmx
12  %4 = tail call x86_mmx @llvm.x86.ssse3.phadd.w(x86_mmx %2, x86_mmx %3) nounwind readnone
13  %5 = bitcast x86_mmx %4 to <4 x i16>
14  %6 = bitcast <4 x i16> %5 to <1 x i64>
15  %7 = extractelement <1 x i64> %6, i32 0
16  ret i64 %7
17}
18
19declare x86_mmx @llvm.x86.mmx.pcmpgt.d(x86_mmx, x86_mmx) nounwind readnone
20
21define i64 @test88(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
22; CHECK: pcmpgtd
23entry:
24  %0 = bitcast <1 x i64> %b to <2 x i32>
25  %1 = bitcast <1 x i64> %a to <2 x i32>
26  %mmx_var.i = bitcast <2 x i32> %1 to x86_mmx
27  %mmx_var1.i = bitcast <2 x i32> %0 to x86_mmx
28  %2 = tail call x86_mmx @llvm.x86.mmx.pcmpgt.d(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
29  %3 = bitcast x86_mmx %2 to <2 x i32>
30  %4 = bitcast <2 x i32> %3 to <1 x i64>
31  %5 = extractelement <1 x i64> %4, i32 0
32  ret i64 %5
33}
34
35declare x86_mmx @llvm.x86.mmx.pcmpgt.w(x86_mmx, x86_mmx) nounwind readnone
36
37define i64 @test87(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
38; CHECK: pcmpgtw
39entry:
40  %0 = bitcast <1 x i64> %b to <4 x i16>
41  %1 = bitcast <1 x i64> %a to <4 x i16>
42  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
43  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
44  %2 = tail call x86_mmx @llvm.x86.mmx.pcmpgt.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
45  %3 = bitcast x86_mmx %2 to <4 x i16>
46  %4 = bitcast <4 x i16> %3 to <1 x i64>
47  %5 = extractelement <1 x i64> %4, i32 0
48  ret i64 %5
49}
50
51declare x86_mmx @llvm.x86.mmx.pcmpgt.b(x86_mmx, x86_mmx) nounwind readnone
52
53define i64 @test86(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
54; CHECK: pcmpgtb
55entry:
56  %0 = bitcast <1 x i64> %b to <8 x i8>
57  %1 = bitcast <1 x i64> %a to <8 x i8>
58  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
59  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
60  %2 = tail call x86_mmx @llvm.x86.mmx.pcmpgt.b(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
61  %3 = bitcast x86_mmx %2 to <8 x i8>
62  %4 = bitcast <8 x i8> %3 to <1 x i64>
63  %5 = extractelement <1 x i64> %4, i32 0
64  ret i64 %5
65}
66
67declare x86_mmx @llvm.x86.mmx.pcmpeq.d(x86_mmx, x86_mmx) nounwind readnone
68
69define i64 @test85(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
70; CHECK: pcmpeqd
71entry:
72  %0 = bitcast <1 x i64> %b to <2 x i32>
73  %1 = bitcast <1 x i64> %a to <2 x i32>
74  %mmx_var.i = bitcast <2 x i32> %1 to x86_mmx
75  %mmx_var1.i = bitcast <2 x i32> %0 to x86_mmx
76  %2 = tail call x86_mmx @llvm.x86.mmx.pcmpeq.d(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
77  %3 = bitcast x86_mmx %2 to <2 x i32>
78  %4 = bitcast <2 x i32> %3 to <1 x i64>
79  %5 = extractelement <1 x i64> %4, i32 0
80  ret i64 %5
81}
82
83declare x86_mmx @llvm.x86.mmx.pcmpeq.w(x86_mmx, x86_mmx) nounwind readnone
84
85define i64 @test84(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
86; CHECK: pcmpeqw
87entry:
88  %0 = bitcast <1 x i64> %b to <4 x i16>
89  %1 = bitcast <1 x i64> %a to <4 x i16>
90  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
91  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
92  %2 = tail call x86_mmx @llvm.x86.mmx.pcmpeq.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
93  %3 = bitcast x86_mmx %2 to <4 x i16>
94  %4 = bitcast <4 x i16> %3 to <1 x i64>
95  %5 = extractelement <1 x i64> %4, i32 0
96  ret i64 %5
97}
98
99declare x86_mmx @llvm.x86.mmx.pcmpeq.b(x86_mmx, x86_mmx) nounwind readnone
100
101define i64 @test83(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
102; CHECK: pcmpeqb
103entry:
104  %0 = bitcast <1 x i64> %b to <8 x i8>
105  %1 = bitcast <1 x i64> %a to <8 x i8>
106  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
107  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
108  %2 = tail call x86_mmx @llvm.x86.mmx.pcmpeq.b(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
109  %3 = bitcast x86_mmx %2 to <8 x i8>
110  %4 = bitcast <8 x i8> %3 to <1 x i64>
111  %5 = extractelement <1 x i64> %4, i32 0
112  ret i64 %5
113}
114
115declare x86_mmx @llvm.x86.mmx.punpckldq(x86_mmx, x86_mmx) nounwind readnone
116
117define i64 @test82(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
118; CHECK: punpckldq
119entry:
120  %0 = bitcast <1 x i64> %b to <2 x i32>
121  %1 = bitcast <1 x i64> %a to <2 x i32>
122  %mmx_var.i = bitcast <2 x i32> %1 to x86_mmx
123  %mmx_var1.i = bitcast <2 x i32> %0 to x86_mmx
124  %2 = tail call x86_mmx @llvm.x86.mmx.punpckldq(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
125  %3 = bitcast x86_mmx %2 to <2 x i32>
126  %4 = bitcast <2 x i32> %3 to <1 x i64>
127  %5 = extractelement <1 x i64> %4, i32 0
128  ret i64 %5
129}
130
131declare x86_mmx @llvm.x86.mmx.punpcklwd(x86_mmx, x86_mmx) nounwind readnone
132
133define i64 @test81(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
134; CHECK: punpcklwd
135entry:
136  %0 = bitcast <1 x i64> %b to <4 x i16>
137  %1 = bitcast <1 x i64> %a to <4 x i16>
138  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
139  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
140  %2 = tail call x86_mmx @llvm.x86.mmx.punpcklwd(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
141  %3 = bitcast x86_mmx %2 to <4 x i16>
142  %4 = bitcast <4 x i16> %3 to <1 x i64>
143  %5 = extractelement <1 x i64> %4, i32 0
144  ret i64 %5
145}
146
147declare x86_mmx @llvm.x86.mmx.punpcklbw(x86_mmx, x86_mmx) nounwind readnone
148
149define i64 @test80(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
150; CHECK: punpcklbw
151entry:
152  %0 = bitcast <1 x i64> %b to <8 x i8>
153  %1 = bitcast <1 x i64> %a to <8 x i8>
154  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
155  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
156  %2 = tail call x86_mmx @llvm.x86.mmx.punpcklbw(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
157  %3 = bitcast x86_mmx %2 to <8 x i8>
158  %4 = bitcast <8 x i8> %3 to <1 x i64>
159  %5 = extractelement <1 x i64> %4, i32 0
160  ret i64 %5
161}
162
163declare x86_mmx @llvm.x86.mmx.punpckhdq(x86_mmx, x86_mmx) nounwind readnone
164
165define i64 @test79(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
166; CHECK: punpckhdq
167entry:
168  %0 = bitcast <1 x i64> %b to <2 x i32>
169  %1 = bitcast <1 x i64> %a to <2 x i32>
170  %mmx_var.i = bitcast <2 x i32> %1 to x86_mmx
171  %mmx_var1.i = bitcast <2 x i32> %0 to x86_mmx
172  %2 = tail call x86_mmx @llvm.x86.mmx.punpckhdq(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
173  %3 = bitcast x86_mmx %2 to <2 x i32>
174  %4 = bitcast <2 x i32> %3 to <1 x i64>
175  %5 = extractelement <1 x i64> %4, i32 0
176  ret i64 %5
177}
178
179declare x86_mmx @llvm.x86.mmx.punpckhwd(x86_mmx, x86_mmx) nounwind readnone
180
181define i64 @test78(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
182; CHECK: punpckhwd
183entry:
184  %0 = bitcast <1 x i64> %b to <4 x i16>
185  %1 = bitcast <1 x i64> %a to <4 x i16>
186  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
187  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
188  %2 = tail call x86_mmx @llvm.x86.mmx.punpckhwd(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
189  %3 = bitcast x86_mmx %2 to <4 x i16>
190  %4 = bitcast <4 x i16> %3 to <1 x i64>
191  %5 = extractelement <1 x i64> %4, i32 0
192  ret i64 %5
193}
194
195declare x86_mmx @llvm.x86.mmx.punpckhbw(x86_mmx, x86_mmx) nounwind readnone
196
197define i64 @test77(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
198; CHECK: punpckhbw
199entry:
200  %0 = bitcast <1 x i64> %b to <8 x i8>
201  %1 = bitcast <1 x i64> %a to <8 x i8>
202  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
203  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
204  %2 = tail call x86_mmx @llvm.x86.mmx.punpckhbw(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
205  %3 = bitcast x86_mmx %2 to <8 x i8>
206  %4 = bitcast <8 x i8> %3 to <1 x i64>
207  %5 = extractelement <1 x i64> %4, i32 0
208  ret i64 %5
209}
210
211declare x86_mmx @llvm.x86.mmx.packuswb(x86_mmx, x86_mmx) nounwind readnone
212
213define i64 @test76(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
214; CHECK: packuswb
215entry:
216  %0 = bitcast <1 x i64> %b to <4 x i16>
217  %1 = bitcast <1 x i64> %a to <4 x i16>
218  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
219  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
220  %2 = tail call x86_mmx @llvm.x86.mmx.packuswb(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
221  %3 = bitcast x86_mmx %2 to <8 x i8>
222  %4 = bitcast <8 x i8> %3 to <1 x i64>
223  %5 = extractelement <1 x i64> %4, i32 0
224  ret i64 %5
225}
226
227declare x86_mmx @llvm.x86.mmx.packssdw(x86_mmx, x86_mmx) nounwind readnone
228
229define i64 @test75(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
230; CHECK: packssdw
231entry:
232  %0 = bitcast <1 x i64> %b to <2 x i32>
233  %1 = bitcast <1 x i64> %a to <2 x i32>
234  %mmx_var.i = bitcast <2 x i32> %1 to x86_mmx
235  %mmx_var1.i = bitcast <2 x i32> %0 to x86_mmx
236  %2 = tail call x86_mmx @llvm.x86.mmx.packssdw(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
237  %3 = bitcast x86_mmx %2 to <4 x i16>
238  %4 = bitcast <4 x i16> %3 to <1 x i64>
239  %5 = extractelement <1 x i64> %4, i32 0
240  ret i64 %5
241}
242
243declare x86_mmx @llvm.x86.mmx.packsswb(x86_mmx, x86_mmx) nounwind readnone
244
245define i64 @test74(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
246; CHECK: packsswb
247entry:
248  %0 = bitcast <1 x i64> %b to <4 x i16>
249  %1 = bitcast <1 x i64> %a to <4 x i16>
250  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
251  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
252  %2 = tail call x86_mmx @llvm.x86.mmx.packsswb(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
253  %3 = bitcast x86_mmx %2 to <8 x i8>
254  %4 = bitcast <8 x i8> %3 to <1 x i64>
255  %5 = extractelement <1 x i64> %4, i32 0
256  ret i64 %5
257}
258
259declare x86_mmx @llvm.x86.mmx.psrai.d(x86_mmx, i32) nounwind readnone
260
261define i64 @test73(<1 x i64> %a) nounwind readnone optsize ssp {
262; CHECK: psrad
263entry:
264  %0 = bitcast <1 x i64> %a to <2 x i32>
265  %mmx_var.i = bitcast <2 x i32> %0 to x86_mmx
266  %1 = tail call x86_mmx @llvm.x86.mmx.psrai.d(x86_mmx %mmx_var.i, i32 3) nounwind
267  %2 = bitcast x86_mmx %1 to <2 x i32>
268  %3 = bitcast <2 x i32> %2 to <1 x i64>
269  %4 = extractelement <1 x i64> %3, i32 0
270  ret i64 %4
271}
272
273declare x86_mmx @llvm.x86.mmx.psrai.w(x86_mmx, i32) nounwind readnone
274
275define i64 @test72(<1 x i64> %a) nounwind readnone optsize ssp {
276; CHECK: psraw
277entry:
278  %0 = bitcast <1 x i64> %a to <4 x i16>
279  %mmx_var.i = bitcast <4 x i16> %0 to x86_mmx
280  %1 = tail call x86_mmx @llvm.x86.mmx.psrai.w(x86_mmx %mmx_var.i, i32 3) nounwind
281  %2 = bitcast x86_mmx %1 to <4 x i16>
282  %3 = bitcast <4 x i16> %2 to <1 x i64>
283  %4 = extractelement <1 x i64> %3, i32 0
284  ret i64 %4
285}
286
287declare x86_mmx @llvm.x86.mmx.psrli.q(x86_mmx, i32) nounwind readnone
288
289define i64 @test71(<1 x i64> %a) nounwind readnone optsize ssp {
290; CHECK: psrlq
291entry:
292  %0 = extractelement <1 x i64> %a, i32 0
293  %mmx_var.i = bitcast i64 %0 to x86_mmx
294  %1 = tail call x86_mmx @llvm.x86.mmx.psrli.q(x86_mmx %mmx_var.i, i32 3) nounwind
295  %2 = bitcast x86_mmx %1 to i64
296  ret i64 %2
297}
298
299declare x86_mmx @llvm.x86.mmx.psrli.d(x86_mmx, i32) nounwind readnone
300
301define i64 @test70(<1 x i64> %a) nounwind readnone optsize ssp {
302; CHECK: psrld
303entry:
304  %0 = bitcast <1 x i64> %a to <2 x i32>
305  %mmx_var.i = bitcast <2 x i32> %0 to x86_mmx
306  %1 = tail call x86_mmx @llvm.x86.mmx.psrli.d(x86_mmx %mmx_var.i, i32 3) nounwind
307  %2 = bitcast x86_mmx %1 to <2 x i32>
308  %3 = bitcast <2 x i32> %2 to <1 x i64>
309  %4 = extractelement <1 x i64> %3, i32 0
310  ret i64 %4
311}
312
313declare x86_mmx @llvm.x86.mmx.psrli.w(x86_mmx, i32) nounwind readnone
314
315define i64 @test69(<1 x i64> %a) nounwind readnone optsize ssp {
316; CHECK: psrlw
317entry:
318  %0 = bitcast <1 x i64> %a to <4 x i16>
319  %mmx_var.i = bitcast <4 x i16> %0 to x86_mmx
320  %1 = tail call x86_mmx @llvm.x86.mmx.psrli.w(x86_mmx %mmx_var.i, i32 3) nounwind
321  %2 = bitcast x86_mmx %1 to <4 x i16>
322  %3 = bitcast <4 x i16> %2 to <1 x i64>
323  %4 = extractelement <1 x i64> %3, i32 0
324  ret i64 %4
325}
326
327declare x86_mmx @llvm.x86.mmx.pslli.q(x86_mmx, i32) nounwind readnone
328
329define i64 @test68(<1 x i64> %a) nounwind readnone optsize ssp {
330; CHECK: psllq
331entry:
332  %0 = extractelement <1 x i64> %a, i32 0
333  %mmx_var.i = bitcast i64 %0 to x86_mmx
334  %1 = tail call x86_mmx @llvm.x86.mmx.pslli.q(x86_mmx %mmx_var.i, i32 3) nounwind
335  %2 = bitcast x86_mmx %1 to i64
336  ret i64 %2
337}
338
339declare x86_mmx @llvm.x86.mmx.pslli.d(x86_mmx, i32) nounwind readnone
340
341define i64 @test67(<1 x i64> %a) nounwind readnone optsize ssp {
342; CHECK: pslld
343entry:
344  %0 = bitcast <1 x i64> %a to <2 x i32>
345  %mmx_var.i = bitcast <2 x i32> %0 to x86_mmx
346  %1 = tail call x86_mmx @llvm.x86.mmx.pslli.d(x86_mmx %mmx_var.i, i32 3) nounwind
347  %2 = bitcast x86_mmx %1 to <2 x i32>
348  %3 = bitcast <2 x i32> %2 to <1 x i64>
349  %4 = extractelement <1 x i64> %3, i32 0
350  ret i64 %4
351}
352
353declare x86_mmx @llvm.x86.mmx.pslli.w(x86_mmx, i32) nounwind readnone
354
355define i64 @test66(<1 x i64> %a) nounwind readnone optsize ssp {
356; CHECK: psllw
357entry:
358  %0 = bitcast <1 x i64> %a to <4 x i16>
359  %mmx_var.i = bitcast <4 x i16> %0 to x86_mmx
360  %1 = tail call x86_mmx @llvm.x86.mmx.pslli.w(x86_mmx %mmx_var.i, i32 3) nounwind
361  %2 = bitcast x86_mmx %1 to <4 x i16>
362  %3 = bitcast <4 x i16> %2 to <1 x i64>
363  %4 = extractelement <1 x i64> %3, i32 0
364  ret i64 %4
365}
366
367declare x86_mmx @llvm.x86.mmx.psra.d(x86_mmx, x86_mmx) nounwind readnone
368
369define i64 @test65(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
370; CHECK: psrad
371entry:
372  %0 = bitcast <1 x i64> %a to <2 x i32>
373  %mmx_var.i = bitcast <2 x i32> %0 to x86_mmx
374  %1 = extractelement <1 x i64> %b, i32 0
375  %mmx_var1.i = bitcast i64 %1 to x86_mmx
376  %2 = tail call x86_mmx @llvm.x86.mmx.psra.d(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
377  %3 = bitcast x86_mmx %2 to <2 x i32>
378  %4 = bitcast <2 x i32> %3 to <1 x i64>
379  %5 = extractelement <1 x i64> %4, i32 0
380  ret i64 %5
381}
382
383declare x86_mmx @llvm.x86.mmx.psra.w(x86_mmx, x86_mmx) nounwind readnone
384
385define i64 @test64(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
386; CHECK: psraw
387entry:
388  %0 = bitcast <1 x i64> %a to <4 x i16>
389  %mmx_var.i = bitcast <4 x i16> %0 to x86_mmx
390  %1 = extractelement <1 x i64> %b, i32 0
391  %mmx_var1.i = bitcast i64 %1 to x86_mmx
392  %2 = tail call x86_mmx @llvm.x86.mmx.psra.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
393  %3 = bitcast x86_mmx %2 to <4 x i16>
394  %4 = bitcast <4 x i16> %3 to <1 x i64>
395  %5 = extractelement <1 x i64> %4, i32 0
396  ret i64 %5
397}
398
399declare x86_mmx @llvm.x86.mmx.psrl.q(x86_mmx, x86_mmx) nounwind readnone
400
401define i64 @test63(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
402; CHECK: psrlq
403entry:
404  %0 = extractelement <1 x i64> %a, i32 0
405  %mmx_var.i = bitcast i64 %0 to x86_mmx
406  %1 = extractelement <1 x i64> %b, i32 0
407  %mmx_var1.i = bitcast i64 %1 to x86_mmx
408  %2 = tail call x86_mmx @llvm.x86.mmx.psrl.q(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
409  %3 = bitcast x86_mmx %2 to i64
410  ret i64 %3
411}
412
413declare x86_mmx @llvm.x86.mmx.psrl.d(x86_mmx, x86_mmx) nounwind readnone
414
415define i64 @test62(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
416; CHECK: psrld
417entry:
418  %0 = bitcast <1 x i64> %a to <2 x i32>
419  %mmx_var.i = bitcast <2 x i32> %0 to x86_mmx
420  %1 = extractelement <1 x i64> %b, i32 0
421  %mmx_var1.i = bitcast i64 %1 to x86_mmx
422  %2 = tail call x86_mmx @llvm.x86.mmx.psrl.d(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
423  %3 = bitcast x86_mmx %2 to <2 x i32>
424  %4 = bitcast <2 x i32> %3 to <1 x i64>
425  %5 = extractelement <1 x i64> %4, i32 0
426  ret i64 %5
427}
428
429declare x86_mmx @llvm.x86.mmx.psrl.w(x86_mmx, x86_mmx) nounwind readnone
430
431define i64 @test61(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
432; CHECK: psrlw
433entry:
434  %0 = bitcast <1 x i64> %a to <4 x i16>
435  %mmx_var.i = bitcast <4 x i16> %0 to x86_mmx
436  %1 = extractelement <1 x i64> %b, i32 0
437  %mmx_var1.i = bitcast i64 %1 to x86_mmx
438  %2 = tail call x86_mmx @llvm.x86.mmx.psrl.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
439  %3 = bitcast x86_mmx %2 to <4 x i16>
440  %4 = bitcast <4 x i16> %3 to <1 x i64>
441  %5 = extractelement <1 x i64> %4, i32 0
442  ret i64 %5
443}
444
445declare x86_mmx @llvm.x86.mmx.psll.q(x86_mmx, x86_mmx) nounwind readnone
446
447define i64 @test60(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
448; CHECK: psllq
449entry:
450  %0 = extractelement <1 x i64> %a, i32 0
451  %mmx_var.i = bitcast i64 %0 to x86_mmx
452  %1 = extractelement <1 x i64> %b, i32 0
453  %mmx_var1.i = bitcast i64 %1 to x86_mmx
454  %2 = tail call x86_mmx @llvm.x86.mmx.psll.q(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
455  %3 = bitcast x86_mmx %2 to i64
456  ret i64 %3
457}
458
459declare x86_mmx @llvm.x86.mmx.psll.d(x86_mmx, x86_mmx) nounwind readnone
460
461define i64 @test59(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
462; CHECK: pslld
463entry:
464  %0 = bitcast <1 x i64> %a to <2 x i32>
465  %mmx_var.i = bitcast <2 x i32> %0 to x86_mmx
466  %1 = extractelement <1 x i64> %b, i32 0
467  %mmx_var1.i = bitcast i64 %1 to x86_mmx
468  %2 = tail call x86_mmx @llvm.x86.mmx.psll.d(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
469  %3 = bitcast x86_mmx %2 to <2 x i32>
470  %4 = bitcast <2 x i32> %3 to <1 x i64>
471  %5 = extractelement <1 x i64> %4, i32 0
472  ret i64 %5
473}
474
475declare x86_mmx @llvm.x86.mmx.psll.w(x86_mmx, x86_mmx) nounwind readnone
476
477define i64 @test58(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
478; CHECK: psllw
479entry:
480  %0 = bitcast <1 x i64> %a to <4 x i16>
481  %mmx_var.i = bitcast <4 x i16> %0 to x86_mmx
482  %1 = extractelement <1 x i64> %b, i32 0
483  %mmx_var1.i = bitcast i64 %1 to x86_mmx
484  %2 = tail call x86_mmx @llvm.x86.mmx.psll.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
485  %3 = bitcast x86_mmx %2 to <4 x i16>
486  %4 = bitcast <4 x i16> %3 to <1 x i64>
487  %5 = extractelement <1 x i64> %4, i32 0
488  ret i64 %5
489}
490
491declare x86_mmx @llvm.x86.mmx.pxor(x86_mmx, x86_mmx) nounwind readnone
492
493define i64 @test56(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
494; CHECK: pxor
495entry:
496  %0 = bitcast <1 x i64> %b to <2 x i32>
497  %1 = bitcast <1 x i64> %a to <2 x i32>
498  %mmx_var.i = bitcast <2 x i32> %1 to x86_mmx
499  %mmx_var1.i = bitcast <2 x i32> %0 to x86_mmx
500  %2 = tail call x86_mmx @llvm.x86.mmx.pxor(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
501  %3 = bitcast x86_mmx %2 to <2 x i32>
502  %4 = bitcast <2 x i32> %3 to <1 x i64>
503  %5 = extractelement <1 x i64> %4, i32 0
504  ret i64 %5
505}
506
507declare x86_mmx @llvm.x86.mmx.por(x86_mmx, x86_mmx) nounwind readnone
508
509define i64 @test55(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
510; CHECK: por
511entry:
512  %0 = bitcast <1 x i64> %b to <2 x i32>
513  %1 = bitcast <1 x i64> %a to <2 x i32>
514  %mmx_var.i = bitcast <2 x i32> %1 to x86_mmx
515  %mmx_var1.i = bitcast <2 x i32> %0 to x86_mmx
516  %2 = tail call x86_mmx @llvm.x86.mmx.por(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
517  %3 = bitcast x86_mmx %2 to <2 x i32>
518  %4 = bitcast <2 x i32> %3 to <1 x i64>
519  %5 = extractelement <1 x i64> %4, i32 0
520  ret i64 %5
521}
522
523declare x86_mmx @llvm.x86.mmx.pandn(x86_mmx, x86_mmx) nounwind readnone
524
525define i64 @test54(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
526; CHECK: pandn
527entry:
528  %0 = bitcast <1 x i64> %b to <2 x i32>
529  %1 = bitcast <1 x i64> %a to <2 x i32>
530  %mmx_var.i = bitcast <2 x i32> %1 to x86_mmx
531  %mmx_var1.i = bitcast <2 x i32> %0 to x86_mmx
532  %2 = tail call x86_mmx @llvm.x86.mmx.pandn(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
533  %3 = bitcast x86_mmx %2 to <2 x i32>
534  %4 = bitcast <2 x i32> %3 to <1 x i64>
535  %5 = extractelement <1 x i64> %4, i32 0
536  ret i64 %5
537}
538
539declare x86_mmx @llvm.x86.mmx.pand(x86_mmx, x86_mmx) nounwind readnone
540
541define i64 @test53(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
542; CHECK: pand
543entry:
544  %0 = bitcast <1 x i64> %b to <2 x i32>
545  %1 = bitcast <1 x i64> %a to <2 x i32>
546  %mmx_var.i = bitcast <2 x i32> %1 to x86_mmx
547  %mmx_var1.i = bitcast <2 x i32> %0 to x86_mmx
548  %2 = tail call x86_mmx @llvm.x86.mmx.pand(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
549  %3 = bitcast x86_mmx %2 to <2 x i32>
550  %4 = bitcast <2 x i32> %3 to <1 x i64>
551  %5 = extractelement <1 x i64> %4, i32 0
552  ret i64 %5
553}
554
555declare x86_mmx @llvm.x86.mmx.pmull.w(x86_mmx, x86_mmx) nounwind readnone
556
557define i64 @test52(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
558; CHECK: pmullw
559entry:
560  %0 = bitcast <1 x i64> %b to <4 x i16>
561  %1 = bitcast <1 x i64> %a to <4 x i16>
562  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
563  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
564  %2 = tail call x86_mmx @llvm.x86.mmx.pmull.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
565  %3 = bitcast x86_mmx %2 to <4 x i16>
566  %4 = bitcast <4 x i16> %3 to <1 x i64>
567  %5 = extractelement <1 x i64> %4, i32 0
568  ret i64 %5
569}
570
571define i64 @test51(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
572; CHECK: pmullw
573entry:
574  %0 = bitcast <1 x i64> %b to <4 x i16>
575  %1 = bitcast <1 x i64> %a to <4 x i16>
576  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
577  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
578  %2 = tail call x86_mmx @llvm.x86.mmx.pmull.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
579  %3 = bitcast x86_mmx %2 to <4 x i16>
580  %4 = bitcast <4 x i16> %3 to <1 x i64>
581  %5 = extractelement <1 x i64> %4, i32 0
582  ret i64 %5
583}
584
585declare x86_mmx @llvm.x86.mmx.pmulh.w(x86_mmx, x86_mmx) nounwind readnone
586
587define i64 @test50(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
588; CHECK: pmulhw
589entry:
590  %0 = bitcast <1 x i64> %b to <4 x i16>
591  %1 = bitcast <1 x i64> %a to <4 x i16>
592  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
593  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
594  %2 = tail call x86_mmx @llvm.x86.mmx.pmulh.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
595  %3 = bitcast x86_mmx %2 to <4 x i16>
596  %4 = bitcast <4 x i16> %3 to <1 x i64>
597  %5 = extractelement <1 x i64> %4, i32 0
598  ret i64 %5
599}
600
601declare x86_mmx @llvm.x86.mmx.pmadd.wd(x86_mmx, x86_mmx) nounwind readnone
602
603define i64 @test49(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
604; CHECK: pmaddwd
605entry:
606  %0 = bitcast <1 x i64> %b to <4 x i16>
607  %1 = bitcast <1 x i64> %a to <4 x i16>
608  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
609  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
610  %2 = tail call x86_mmx @llvm.x86.mmx.pmadd.wd(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
611  %3 = bitcast x86_mmx %2 to <2 x i32>
612  %4 = bitcast <2 x i32> %3 to <1 x i64>
613  %5 = extractelement <1 x i64> %4, i32 0
614  ret i64 %5
615}
616
617declare x86_mmx @llvm.x86.mmx.psubus.w(x86_mmx, x86_mmx) nounwind readnone
618
619define i64 @test48(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
620; CHECK: psubusw
621entry:
622  %0 = bitcast <1 x i64> %b to <4 x i16>
623  %1 = bitcast <1 x i64> %a to <4 x i16>
624  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
625  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
626  %2 = tail call x86_mmx @llvm.x86.mmx.psubus.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
627  %3 = bitcast x86_mmx %2 to <4 x i16>
628  %4 = bitcast <4 x i16> %3 to <1 x i64>
629  %5 = extractelement <1 x i64> %4, i32 0
630  ret i64 %5
631}
632
633declare x86_mmx @llvm.x86.mmx.psubus.b(x86_mmx, x86_mmx) nounwind readnone
634
635define i64 @test47(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
636; CHECK: psubusb
637entry:
638  %0 = bitcast <1 x i64> %b to <8 x i8>
639  %1 = bitcast <1 x i64> %a to <8 x i8>
640  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
641  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
642  %2 = tail call x86_mmx @llvm.x86.mmx.psubus.b(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
643  %3 = bitcast x86_mmx %2 to <8 x i8>
644  %4 = bitcast <8 x i8> %3 to <1 x i64>
645  %5 = extractelement <1 x i64> %4, i32 0
646  ret i64 %5
647}
648
649declare x86_mmx @llvm.x86.mmx.psubs.w(x86_mmx, x86_mmx) nounwind readnone
650
651define i64 @test46(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
652; CHECK: psubsw
653entry:
654  %0 = bitcast <1 x i64> %b to <4 x i16>
655  %1 = bitcast <1 x i64> %a to <4 x i16>
656  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
657  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
658  %2 = tail call x86_mmx @llvm.x86.mmx.psubs.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
659  %3 = bitcast x86_mmx %2 to <4 x i16>
660  %4 = bitcast <4 x i16> %3 to <1 x i64>
661  %5 = extractelement <1 x i64> %4, i32 0
662  ret i64 %5
663}
664
665declare x86_mmx @llvm.x86.mmx.psubs.b(x86_mmx, x86_mmx) nounwind readnone
666
667define i64 @test45(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
668; CHECK: psubsb
669entry:
670  %0 = bitcast <1 x i64> %b to <8 x i8>
671  %1 = bitcast <1 x i64> %a to <8 x i8>
672  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
673  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
674  %2 = tail call x86_mmx @llvm.x86.mmx.psubs.b(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
675  %3 = bitcast x86_mmx %2 to <8 x i8>
676  %4 = bitcast <8 x i8> %3 to <1 x i64>
677  %5 = extractelement <1 x i64> %4, i32 0
678  ret i64 %5
679}
680
681define i64 @test44(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
682; CHECK: psubq
683entry:
684  %0 = extractelement <1 x i64> %a, i32 0
685  %mmx_var = bitcast i64 %0 to x86_mmx
686  %1 = extractelement <1 x i64> %b, i32 0
687  %mmx_var1 = bitcast i64 %1 to x86_mmx
688  %2 = tail call x86_mmx @llvm.x86.mmx.psub.q(x86_mmx %mmx_var, x86_mmx %mmx_var1)
689  %3 = bitcast x86_mmx %2 to i64
690  ret i64 %3
691}
692
693declare x86_mmx @llvm.x86.mmx.psub.q(x86_mmx, x86_mmx) nounwind readnone
694
695declare x86_mmx @llvm.x86.mmx.psub.d(x86_mmx, x86_mmx) nounwind readnone
696
697define i64 @test43(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
698; CHECK: psubd
699entry:
700  %0 = bitcast <1 x i64> %b to <2 x i32>
701  %1 = bitcast <1 x i64> %a to <2 x i32>
702  %mmx_var.i = bitcast <2 x i32> %1 to x86_mmx
703  %mmx_var1.i = bitcast <2 x i32> %0 to x86_mmx
704  %2 = tail call x86_mmx @llvm.x86.mmx.psub.d(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
705  %3 = bitcast x86_mmx %2 to <2 x i32>
706  %4 = bitcast <2 x i32> %3 to <1 x i64>
707  %5 = extractelement <1 x i64> %4, i32 0
708  ret i64 %5
709}
710
711declare x86_mmx @llvm.x86.mmx.psub.w(x86_mmx, x86_mmx) nounwind readnone
712
713define i64 @test42(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
714; CHECK: psubw
715entry:
716  %0 = bitcast <1 x i64> %b to <4 x i16>
717  %1 = bitcast <1 x i64> %a to <4 x i16>
718  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
719  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
720  %2 = tail call x86_mmx @llvm.x86.mmx.psub.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
721  %3 = bitcast x86_mmx %2 to <4 x i16>
722  %4 = bitcast <4 x i16> %3 to <1 x i64>
723  %5 = extractelement <1 x i64> %4, i32 0
724  ret i64 %5
725}
726
727declare x86_mmx @llvm.x86.mmx.psub.b(x86_mmx, x86_mmx) nounwind readnone
728
729define i64 @test41(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
730; CHECK: psubb
731entry:
732  %0 = bitcast <1 x i64> %b to <8 x i8>
733  %1 = bitcast <1 x i64> %a to <8 x i8>
734  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
735  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
736  %2 = tail call x86_mmx @llvm.x86.mmx.psub.b(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
737  %3 = bitcast x86_mmx %2 to <8 x i8>
738  %4 = bitcast <8 x i8> %3 to <1 x i64>
739  %5 = extractelement <1 x i64> %4, i32 0
740  ret i64 %5
741}
742
743declare x86_mmx @llvm.x86.mmx.paddus.w(x86_mmx, x86_mmx) nounwind readnone
744
745define i64 @test40(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
746; CHECK: paddusw
747entry:
748  %0 = bitcast <1 x i64> %b to <4 x i16>
749  %1 = bitcast <1 x i64> %a to <4 x i16>
750  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
751  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
752  %2 = tail call x86_mmx @llvm.x86.mmx.paddus.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
753  %3 = bitcast x86_mmx %2 to <4 x i16>
754  %4 = bitcast <4 x i16> %3 to <1 x i64>
755  %5 = extractelement <1 x i64> %4, i32 0
756  ret i64 %5
757}
758
759declare x86_mmx @llvm.x86.mmx.paddus.b(x86_mmx, x86_mmx) nounwind readnone
760
761define i64 @test39(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
762; CHECK: paddusb
763entry:
764  %0 = bitcast <1 x i64> %b to <8 x i8>
765  %1 = bitcast <1 x i64> %a to <8 x i8>
766  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
767  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
768  %2 = tail call x86_mmx @llvm.x86.mmx.paddus.b(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
769  %3 = bitcast x86_mmx %2 to <8 x i8>
770  %4 = bitcast <8 x i8> %3 to <1 x i64>
771  %5 = extractelement <1 x i64> %4, i32 0
772  ret i64 %5
773}
774
775declare x86_mmx @llvm.x86.mmx.padds.w(x86_mmx, x86_mmx) nounwind readnone
776
777define i64 @test38(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
778; CHECK: paddsw
779entry:
780  %0 = bitcast <1 x i64> %b to <4 x i16>
781  %1 = bitcast <1 x i64> %a to <4 x i16>
782  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
783  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
784  %2 = tail call x86_mmx @llvm.x86.mmx.padds.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
785  %3 = bitcast x86_mmx %2 to <4 x i16>
786  %4 = bitcast <4 x i16> %3 to <1 x i64>
787  %5 = extractelement <1 x i64> %4, i32 0
788  ret i64 %5
789}
790
791declare x86_mmx @llvm.x86.mmx.padds.b(x86_mmx, x86_mmx) nounwind readnone
792
793define i64 @test37(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
794; CHECK: paddsb
795entry:
796  %0 = bitcast <1 x i64> %b to <8 x i8>
797  %1 = bitcast <1 x i64> %a to <8 x i8>
798  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
799  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
800  %2 = tail call x86_mmx @llvm.x86.mmx.padds.b(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
801  %3 = bitcast x86_mmx %2 to <8 x i8>
802  %4 = bitcast <8 x i8> %3 to <1 x i64>
803  %5 = extractelement <1 x i64> %4, i32 0
804  ret i64 %5
805}
806
807declare x86_mmx @llvm.x86.mmx.padd.q(x86_mmx, x86_mmx) nounwind readnone
808
809define i64 @test36(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
810; CHECK: paddq
811entry:
812  %0 = extractelement <1 x i64> %a, i32 0
813  %mmx_var = bitcast i64 %0 to x86_mmx
814  %1 = extractelement <1 x i64> %b, i32 0
815  %mmx_var1 = bitcast i64 %1 to x86_mmx
816  %2 = tail call x86_mmx @llvm.x86.mmx.padd.q(x86_mmx %mmx_var, x86_mmx %mmx_var1)
817  %3 = bitcast x86_mmx %2 to i64
818  ret i64 %3
819}
820
821declare x86_mmx @llvm.x86.mmx.padd.d(x86_mmx, x86_mmx) nounwind readnone
822
823define i64 @test35(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
824; CHECK: paddd
825entry:
826  %0 = bitcast <1 x i64> %b to <2 x i32>
827  %1 = bitcast <1 x i64> %a to <2 x i32>
828  %mmx_var.i = bitcast <2 x i32> %1 to x86_mmx
829  %mmx_var1.i = bitcast <2 x i32> %0 to x86_mmx
830  %2 = tail call x86_mmx @llvm.x86.mmx.padd.d(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
831  %3 = bitcast x86_mmx %2 to <2 x i32>
832  %4 = bitcast <2 x i32> %3 to <1 x i64>
833  %5 = extractelement <1 x i64> %4, i32 0
834  ret i64 %5
835}
836
837declare x86_mmx @llvm.x86.mmx.padd.w(x86_mmx, x86_mmx) nounwind readnone
838
839define i64 @test34(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
840; CHECK: paddw
841entry:
842  %0 = bitcast <1 x i64> %b to <4 x i16>
843  %1 = bitcast <1 x i64> %a to <4 x i16>
844  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
845  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
846  %2 = tail call x86_mmx @llvm.x86.mmx.padd.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
847  %3 = bitcast x86_mmx %2 to <4 x i16>
848  %4 = bitcast <4 x i16> %3 to <1 x i64>
849  %5 = extractelement <1 x i64> %4, i32 0
850  ret i64 %5
851}
852
853declare x86_mmx @llvm.x86.mmx.padd.b(x86_mmx, x86_mmx) nounwind readnone
854
855define i64 @test33(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
856; CHECK: paddb
857entry:
858  %0 = bitcast <1 x i64> %b to <8 x i8>
859  %1 = bitcast <1 x i64> %a to <8 x i8>
860  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
861  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
862  %2 = tail call x86_mmx @llvm.x86.mmx.padd.b(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
863  %3 = bitcast x86_mmx %2 to <8 x i8>
864  %4 = bitcast <8 x i8> %3 to <1 x i64>
865  %5 = extractelement <1 x i64> %4, i32 0
866  ret i64 %5
867}
868
869declare x86_mmx @llvm.x86.mmx.psad.bw(x86_mmx, x86_mmx) nounwind readnone
870
871define i64 @test32(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
872; CHECK: psadbw
873entry:
874  %0 = bitcast <1 x i64> %b to <8 x i8>
875  %1 = bitcast <1 x i64> %a to <8 x i8>
876  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
877  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
878  %2 = tail call x86_mmx @llvm.x86.mmx.psad.bw(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
879  %3 = bitcast x86_mmx %2 to i64
880  ret i64 %3
881}
882
883declare x86_mmx @llvm.x86.mmx.pmins.w(x86_mmx, x86_mmx) nounwind readnone
884
885define i64 @test31(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
886; CHECK: pminsw
887entry:
888  %0 = bitcast <1 x i64> %b to <4 x i16>
889  %1 = bitcast <1 x i64> %a to <4 x i16>
890  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
891  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
892  %2 = tail call x86_mmx @llvm.x86.mmx.pmins.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
893  %3 = bitcast x86_mmx %2 to <4 x i16>
894  %4 = bitcast <4 x i16> %3 to <1 x i64>
895  %5 = extractelement <1 x i64> %4, i32 0
896  ret i64 %5
897}
898
899declare x86_mmx @llvm.x86.mmx.pminu.b(x86_mmx, x86_mmx) nounwind readnone
900
901define i64 @test30(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
902; CHECK: pminub
903entry:
904  %0 = bitcast <1 x i64> %b to <8 x i8>
905  %1 = bitcast <1 x i64> %a to <8 x i8>
906  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
907  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
908  %2 = tail call x86_mmx @llvm.x86.mmx.pminu.b(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
909  %3 = bitcast x86_mmx %2 to <8 x i8>
910  %4 = bitcast <8 x i8> %3 to <1 x i64>
911  %5 = extractelement <1 x i64> %4, i32 0
912  ret i64 %5
913}
914
915declare x86_mmx @llvm.x86.mmx.pmaxs.w(x86_mmx, x86_mmx) nounwind readnone
916
917define i64 @test29(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
918; CHECK: pmaxsw
919entry:
920  %0 = bitcast <1 x i64> %b to <4 x i16>
921  %1 = bitcast <1 x i64> %a to <4 x i16>
922  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
923  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
924  %2 = tail call x86_mmx @llvm.x86.mmx.pmaxs.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
925  %3 = bitcast x86_mmx %2 to <4 x i16>
926  %4 = bitcast <4 x i16> %3 to <1 x i64>
927  %5 = extractelement <1 x i64> %4, i32 0
928  ret i64 %5
929}
930
931declare x86_mmx @llvm.x86.mmx.pmaxu.b(x86_mmx, x86_mmx) nounwind readnone
932
933define i64 @test28(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
934; CHECK: pmaxub
935entry:
936  %0 = bitcast <1 x i64> %b to <8 x i8>
937  %1 = bitcast <1 x i64> %a to <8 x i8>
938  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
939  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
940  %2 = tail call x86_mmx @llvm.x86.mmx.pmaxu.b(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
941  %3 = bitcast x86_mmx %2 to <8 x i8>
942  %4 = bitcast <8 x i8> %3 to <1 x i64>
943  %5 = extractelement <1 x i64> %4, i32 0
944  ret i64 %5
945}
946
947declare x86_mmx @llvm.x86.mmx.pavg.w(x86_mmx, x86_mmx) nounwind readnone
948
949define i64 @test27(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
950; CHECK: pavgw
951entry:
952  %0 = bitcast <1 x i64> %b to <4 x i16>
953  %1 = bitcast <1 x i64> %a to <4 x i16>
954  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
955  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
956  %2 = tail call x86_mmx @llvm.x86.mmx.pavg.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
957  %3 = bitcast x86_mmx %2 to <4 x i16>
958  %4 = bitcast <4 x i16> %3 to <1 x i64>
959  %5 = extractelement <1 x i64> %4, i32 0
960  ret i64 %5
961}
962
963declare x86_mmx @llvm.x86.mmx.pavg.b(x86_mmx, x86_mmx) nounwind readnone
964
965define i64 @test26(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
966; CHECK: pavgb
967entry:
968  %0 = bitcast <1 x i64> %b to <8 x i8>
969  %1 = bitcast <1 x i64> %a to <8 x i8>
970  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
971  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
972  %2 = tail call x86_mmx @llvm.x86.mmx.pavg.b(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
973  %3 = bitcast x86_mmx %2 to <8 x i8>
974  %4 = bitcast <8 x i8> %3 to <1 x i64>
975  %5 = extractelement <1 x i64> %4, i32 0
976  ret i64 %5
977}
978
979declare void @llvm.x86.mmx.movnt.dq(x86_mmx*, x86_mmx) nounwind
980
981define void @test25(<1 x i64>* %p, <1 x i64> %a) nounwind optsize ssp {
982; CHECK: movntq
983entry:
984  %mmx_ptr_var.i = bitcast <1 x i64>* %p to x86_mmx*
985  %0 = extractelement <1 x i64> %a, i32 0
986  %mmx_var.i = bitcast i64 %0 to x86_mmx
987  tail call void @llvm.x86.mmx.movnt.dq(x86_mmx* %mmx_ptr_var.i, x86_mmx %mmx_var.i) nounwind
988  ret void
989}
990
991declare i32 @llvm.x86.mmx.pmovmskb(x86_mmx) nounwind readnone
992
993define i32 @test24(<1 x i64> %a) nounwind readnone optsize ssp {
994; CHECK: pmovmskb
995entry:
996  %0 = bitcast <1 x i64> %a to <8 x i8>
997  %mmx_var.i = bitcast <8 x i8> %0 to x86_mmx
998  %1 = tail call i32 @llvm.x86.mmx.pmovmskb(x86_mmx %mmx_var.i) nounwind
999  ret i32 %1
1000}
1001
1002declare void @llvm.x86.mmx.maskmovq(x86_mmx, x86_mmx, i8*) nounwind
1003
1004define void @test23(<1 x i64> %d, <1 x i64> %n, i8* %p) nounwind optsize ssp {
1005; CHECK: maskmovq
1006entry:
1007  %0 = bitcast <1 x i64> %n to <8 x i8>
1008  %1 = bitcast <1 x i64> %d to <8 x i8>
1009  %mmx_var.i = bitcast <8 x i8> %1 to x86_mmx
1010  %mmx_var1.i = bitcast <8 x i8> %0 to x86_mmx
1011  tail call void @llvm.x86.mmx.maskmovq(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i, i8* %p) nounwind
1012  ret void
1013}
1014
1015declare x86_mmx @llvm.x86.mmx.pmulhu.w(x86_mmx, x86_mmx) nounwind readnone
1016
1017define i64 @test22(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
1018; CHECK: pmulhuw
1019entry:
1020  %0 = bitcast <1 x i64> %b to <4 x i16>
1021  %1 = bitcast <1 x i64> %a to <4 x i16>
1022  %mmx_var.i = bitcast <4 x i16> %1 to x86_mmx
1023  %mmx_var1.i = bitcast <4 x i16> %0 to x86_mmx
1024  %2 = tail call x86_mmx @llvm.x86.mmx.pmulhu.w(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
1025  %3 = bitcast x86_mmx %2 to <4 x i16>
1026  %4 = bitcast <4 x i16> %3 to <1 x i64>
1027  %5 = extractelement <1 x i64> %4, i32 0
1028  ret i64 %5
1029}
1030
1031declare x86_mmx @llvm.x86.sse.pshuf.w(x86_mmx, i8) nounwind readnone
1032
1033define i64 @test21(<1 x i64> %a) nounwind readnone optsize ssp {
1034; CHECK: pshufw
1035entry:
1036  %0 = bitcast <1 x i64> %a to <4 x i16>
1037  %1 = bitcast <4 x i16> %0 to x86_mmx
1038  %2 = tail call x86_mmx @llvm.x86.sse.pshuf.w(x86_mmx %1, i8 3) nounwind readnone
1039  %3 = bitcast x86_mmx %2 to <4 x i16>
1040  %4 = bitcast <4 x i16> %3 to <1 x i64>
1041  %5 = extractelement <1 x i64> %4, i32 0
1042  ret i64 %5
1043}
1044
1045declare x86_mmx @llvm.x86.mmx.pmulu.dq(x86_mmx, x86_mmx) nounwind readnone
1046
1047define i64 @test20(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
1048; CHECK: pmuludq
1049entry:
1050  %0 = bitcast <1 x i64> %b to <2 x i32>
1051  %1 = bitcast <1 x i64> %a to <2 x i32>
1052  %mmx_var.i = bitcast <2 x i32> %1 to x86_mmx
1053  %mmx_var1.i = bitcast <2 x i32> %0 to x86_mmx
1054  %2 = tail call x86_mmx @llvm.x86.mmx.pmulu.dq(x86_mmx %mmx_var.i, x86_mmx %mmx_var1.i) nounwind
1055  %3 = bitcast x86_mmx %2 to i64
1056  ret i64 %3
1057}
1058
1059declare <2 x double> @llvm.x86.sse.cvtpi2pd(x86_mmx) nounwind readnone
1060
1061define <2 x double> @test19(<1 x i64> %a) nounwind readnone optsize ssp {
1062; CHECK: cvtpi2pd
1063entry:
1064  %0 = bitcast <1 x i64> %a to <2 x i32>
1065  %1 = bitcast <2 x i32> %0 to x86_mmx
1066  %2 = tail call <2 x double> @llvm.x86.sse.cvtpi2pd(x86_mmx %1) nounwind readnone
1067  ret <2 x double> %2
1068}
1069
1070declare x86_mmx @llvm.x86.sse.cvttpd2pi(<2 x double>) nounwind readnone
1071
1072define i64 @test18(<2 x double> %a) nounwind readnone optsize ssp {
1073; CHECK: cvttpd2pi
1074entry:
1075  %0 = tail call x86_mmx @llvm.x86.sse.cvttpd2pi(<2 x double> %a) nounwind readnone
1076  %1 = bitcast x86_mmx %0 to <2 x i32>
1077  %2 = bitcast <2 x i32> %1 to <1 x i64>
1078  %3 = extractelement <1 x i64> %2, i32 0
1079  ret i64 %3
1080}
1081
1082declare x86_mmx @llvm.x86.sse.cvtpd2pi(<2 x double>) nounwind readnone
1083
1084define i64 @test17(<2 x double> %a) nounwind readnone optsize ssp {
1085; CHECK: cvtpd2pi
1086entry:
1087  %0 = tail call x86_mmx @llvm.x86.sse.cvtpd2pi(<2 x double> %a) nounwind readnone
1088  %1 = bitcast x86_mmx %0 to <2 x i32>
1089  %2 = bitcast <2 x i32> %1 to <1 x i64>
1090  %3 = extractelement <1 x i64> %2, i32 0
1091  ret i64 %3
1092}
1093
1094declare x86_mmx @llvm.x86.mmx.palignr.b(x86_mmx, x86_mmx, i8) nounwind readnone
1095
1096define i64 @test16(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
1097; CHECK: palignr
1098entry:
1099  %0 = extractelement <1 x i64> %a, i32 0
1100  %mmx_var = bitcast i64 %0 to x86_mmx
1101  %1 = extractelement <1 x i64> %b, i32 0
1102  %mmx_var1 = bitcast i64 %1 to x86_mmx
1103  %2 = tail call x86_mmx @llvm.x86.mmx.palignr.b(x86_mmx %mmx_var, x86_mmx %mmx_var1, i8 16)
1104  %3 = bitcast x86_mmx %2 to i64
1105  ret i64 %3
1106}
1107
1108declare x86_mmx @llvm.x86.ssse3.pabs.d(x86_mmx) nounwind readnone
1109
1110define i64 @test15(<1 x i64> %a) nounwind readnone optsize ssp {
1111; CHECK: pabsd
1112entry:
1113  %0 = bitcast <1 x i64> %a to <2 x i32>
1114  %1 = bitcast <2 x i32> %0 to x86_mmx
1115  %2 = tail call x86_mmx @llvm.x86.ssse3.pabs.d(x86_mmx %1) nounwind readnone
1116  %3 = bitcast x86_mmx %2 to <2 x i32>
1117  %4 = bitcast <2 x i32> %3 to <1 x i64>
1118  %5 = extractelement <1 x i64> %4, i32 0
1119  ret i64 %5
1120}
1121
1122declare x86_mmx @llvm.x86.ssse3.pabs.w(x86_mmx) nounwind readnone
1123
1124define i64 @test14(<1 x i64> %a) nounwind readnone optsize ssp {
1125; CHECK: pabsw
1126entry:
1127  %0 = bitcast <1 x i64> %a to <4 x i16>
1128  %1 = bitcast <4 x i16> %0 to x86_mmx
1129  %2 = tail call x86_mmx @llvm.x86.ssse3.pabs.w(x86_mmx %1) nounwind readnone
1130  %3 = bitcast x86_mmx %2 to <4 x i16>
1131  %4 = bitcast <4 x i16> %3 to <1 x i64>
1132  %5 = extractelement <1 x i64> %4, i32 0
1133  ret i64 %5
1134}
1135
1136declare x86_mmx @llvm.x86.ssse3.pabs.b(x86_mmx) nounwind readnone
1137
1138define i64 @test13(<1 x i64> %a) nounwind readnone optsize ssp {
1139; CHECK: pabsb
1140entry:
1141  %0 = bitcast <1 x i64> %a to <8 x i8>
1142  %1 = bitcast <8 x i8> %0 to x86_mmx
1143  %2 = tail call x86_mmx @llvm.x86.ssse3.pabs.b(x86_mmx %1) nounwind readnone
1144  %3 = bitcast x86_mmx %2 to <8 x i8>
1145  %4 = bitcast <8 x i8> %3 to <1 x i64>
1146  %5 = extractelement <1 x i64> %4, i32 0
1147  ret i64 %5
1148}
1149
1150declare x86_mmx @llvm.x86.ssse3.psign.d(x86_mmx, x86_mmx) nounwind readnone
1151
1152define i64 @test12(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
1153; CHECK: psignd
1154entry:
1155  %0 = bitcast <1 x i64> %b to <2 x i32>
1156  %1 = bitcast <1 x i64> %a to <2 x i32>
1157  %2 = bitcast <2 x i32> %1 to x86_mmx
1158  %3 = bitcast <2 x i32> %0 to x86_mmx
1159  %4 = tail call x86_mmx @llvm.x86.ssse3.psign.d(x86_mmx %2, x86_mmx %3) nounwind readnone
1160  %5 = bitcast x86_mmx %4 to <2 x i32>
1161  %6 = bitcast <2 x i32> %5 to <1 x i64>
1162  %7 = extractelement <1 x i64> %6, i32 0
1163  ret i64 %7
1164}
1165
1166declare x86_mmx @llvm.x86.ssse3.psign.w(x86_mmx, x86_mmx) nounwind readnone
1167
1168define i64 @test11(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
1169; CHECK: psignw
1170entry:
1171  %0 = bitcast <1 x i64> %b to <4 x i16>
1172  %1 = bitcast <1 x i64> %a to <4 x i16>
1173  %2 = bitcast <4 x i16> %1 to x86_mmx
1174  %3 = bitcast <4 x i16> %0 to x86_mmx
1175  %4 = tail call x86_mmx @llvm.x86.ssse3.psign.w(x86_mmx %2, x86_mmx %3) nounwind readnone
1176  %5 = bitcast x86_mmx %4 to <4 x i16>
1177  %6 = bitcast <4 x i16> %5 to <1 x i64>
1178  %7 = extractelement <1 x i64> %6, i32 0
1179  ret i64 %7
1180}
1181
1182declare x86_mmx @llvm.x86.ssse3.psign.b(x86_mmx, x86_mmx) nounwind readnone
1183
1184define i64 @test10(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
1185; CHECK: psignb
1186entry:
1187  %0 = bitcast <1 x i64> %b to <8 x i8>
1188  %1 = bitcast <1 x i64> %a to <8 x i8>
1189  %2 = bitcast <8 x i8> %1 to x86_mmx
1190  %3 = bitcast <8 x i8> %0 to x86_mmx
1191  %4 = tail call x86_mmx @llvm.x86.ssse3.psign.b(x86_mmx %2, x86_mmx %3) nounwind readnone
1192  %5 = bitcast x86_mmx %4 to <8 x i8>
1193  %6 = bitcast <8 x i8> %5 to <1 x i64>
1194  %7 = extractelement <1 x i64> %6, i32 0
1195  ret i64 %7
1196}
1197
1198declare x86_mmx @llvm.x86.ssse3.pshuf.b(x86_mmx, x86_mmx) nounwind readnone
1199
1200define i64 @test9(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
1201; CHECK: pshufb
1202entry:
1203  %0 = bitcast <1 x i64> %b to <8 x i8>
1204  %1 = bitcast <1 x i64> %a to <8 x i8>
1205  %2 = bitcast <8 x i8> %1 to x86_mmx
1206  %3 = bitcast <8 x i8> %0 to x86_mmx
1207  %4 = tail call x86_mmx @llvm.x86.ssse3.pshuf.b(x86_mmx %2, x86_mmx %3) nounwind readnone
1208  %5 = bitcast x86_mmx %4 to <8 x i8>
1209  %6 = bitcast <8 x i8> %5 to <1 x i64>
1210  %7 = extractelement <1 x i64> %6, i32 0
1211  ret i64 %7
1212}
1213
1214declare x86_mmx @llvm.x86.ssse3.pmul.hr.sw(x86_mmx, x86_mmx) nounwind readnone
1215
1216define i64 @test8(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
1217; CHECK: pmulhrsw
1218entry:
1219  %0 = bitcast <1 x i64> %b to <4 x i16>
1220  %1 = bitcast <1 x i64> %a to <4 x i16>
1221  %2 = bitcast <4 x i16> %1 to x86_mmx
1222  %3 = bitcast <4 x i16> %0 to x86_mmx
1223  %4 = tail call x86_mmx @llvm.x86.ssse3.pmul.hr.sw(x86_mmx %2, x86_mmx %3) nounwind readnone
1224  %5 = bitcast x86_mmx %4 to <4 x i16>
1225  %6 = bitcast <4 x i16> %5 to <1 x i64>
1226  %7 = extractelement <1 x i64> %6, i32 0
1227  ret i64 %7
1228}
1229
1230declare x86_mmx @llvm.x86.ssse3.pmadd.ub.sw(x86_mmx, x86_mmx) nounwind readnone
1231
1232define i64 @test7(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
1233; CHECK: pmaddubsw
1234entry:
1235  %0 = bitcast <1 x i64> %b to <8 x i8>
1236  %1 = bitcast <1 x i64> %a to <8 x i8>
1237  %2 = bitcast <8 x i8> %1 to x86_mmx
1238  %3 = bitcast <8 x i8> %0 to x86_mmx
1239  %4 = tail call x86_mmx @llvm.x86.ssse3.pmadd.ub.sw(x86_mmx %2, x86_mmx %3) nounwind readnone
1240  %5 = bitcast x86_mmx %4 to <8 x i8>
1241  %6 = bitcast <8 x i8> %5 to <1 x i64>
1242  %7 = extractelement <1 x i64> %6, i32 0
1243  ret i64 %7
1244}
1245
1246declare x86_mmx @llvm.x86.ssse3.phsub.sw(x86_mmx, x86_mmx) nounwind readnone
1247
1248define i64 @test6(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
1249; CHECK: phsubsw
1250entry:
1251  %0 = bitcast <1 x i64> %b to <4 x i16>
1252  %1 = bitcast <1 x i64> %a to <4 x i16>
1253  %2 = bitcast <4 x i16> %1 to x86_mmx
1254  %3 = bitcast <4 x i16> %0 to x86_mmx
1255  %4 = tail call x86_mmx @llvm.x86.ssse3.phsub.sw(x86_mmx %2, x86_mmx %3) nounwind readnone
1256  %5 = bitcast x86_mmx %4 to <4 x i16>
1257  %6 = bitcast <4 x i16> %5 to <1 x i64>
1258  %7 = extractelement <1 x i64> %6, i32 0
1259  ret i64 %7
1260}
1261
1262declare x86_mmx @llvm.x86.ssse3.phsub.d(x86_mmx, x86_mmx) nounwind readnone
1263
1264define i64 @test5(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
1265; CHECK: phsubd
1266entry:
1267  %0 = bitcast <1 x i64> %b to <2 x i32>
1268  %1 = bitcast <1 x i64> %a to <2 x i32>
1269  %2 = bitcast <2 x i32> %1 to x86_mmx
1270  %3 = bitcast <2 x i32> %0 to x86_mmx
1271  %4 = tail call x86_mmx @llvm.x86.ssse3.phsub.d(x86_mmx %2, x86_mmx %3) nounwind readnone
1272  %5 = bitcast x86_mmx %4 to <2 x i32>
1273  %6 = bitcast <2 x i32> %5 to <1 x i64>
1274  %7 = extractelement <1 x i64> %6, i32 0
1275  ret i64 %7
1276}
1277
1278declare x86_mmx @llvm.x86.ssse3.phsub.w(x86_mmx, x86_mmx) nounwind readnone
1279
1280define i64 @test4(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
1281; CHECK: phsubw
1282entry:
1283  %0 = bitcast <1 x i64> %b to <4 x i16>
1284  %1 = bitcast <1 x i64> %a to <4 x i16>
1285  %2 = bitcast <4 x i16> %1 to x86_mmx
1286  %3 = bitcast <4 x i16> %0 to x86_mmx
1287  %4 = tail call x86_mmx @llvm.x86.ssse3.phsub.w(x86_mmx %2, x86_mmx %3) nounwind readnone
1288  %5 = bitcast x86_mmx %4 to <4 x i16>
1289  %6 = bitcast <4 x i16> %5 to <1 x i64>
1290  %7 = extractelement <1 x i64> %6, i32 0
1291  ret i64 %7
1292}
1293
1294declare x86_mmx @llvm.x86.ssse3.phadd.sw(x86_mmx, x86_mmx) nounwind readnone
1295
1296define i64 @test3(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
1297; CHECK: phaddsw
1298entry:
1299  %0 = bitcast <1 x i64> %b to <4 x i16>
1300  %1 = bitcast <1 x i64> %a to <4 x i16>
1301  %2 = bitcast <4 x i16> %1 to x86_mmx
1302  %3 = bitcast <4 x i16> %0 to x86_mmx
1303  %4 = tail call x86_mmx @llvm.x86.ssse3.phadd.sw(x86_mmx %2, x86_mmx %3) nounwind readnone
1304  %5 = bitcast x86_mmx %4 to <4 x i16>
1305  %6 = bitcast <4 x i16> %5 to <1 x i64>
1306  %7 = extractelement <1 x i64> %6, i32 0
1307  ret i64 %7
1308}
1309
1310declare x86_mmx @llvm.x86.ssse3.phadd.d(x86_mmx, x86_mmx) nounwind readnone
1311
1312define i64 @test2(<1 x i64> %a, <1 x i64> %b) nounwind readnone optsize ssp {
1313; CHECK: phaddd
1314entry:
1315  %0 = bitcast <1 x i64> %b to <2 x i32>
1316  %1 = bitcast <1 x i64> %a to <2 x i32>
1317  %2 = bitcast <2 x i32> %1 to x86_mmx
1318  %3 = bitcast <2 x i32> %0 to x86_mmx
1319  %4 = tail call x86_mmx @llvm.x86.ssse3.phadd.d(x86_mmx %2, x86_mmx %3) nounwind readnone
1320  %5 = bitcast x86_mmx %4 to <2 x i32>
1321  %6 = bitcast <2 x i32> %5 to <1 x i64>
1322  %7 = extractelement <1 x i64> %6, i32 0
1323  ret i64 %7
1324}
1325