xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/mmx-fold-load.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mattr=+mmx,+sse2 | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine i64 @t0(<1 x i64>* %a, i32* %b) {
4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t0:
5*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
6*9880d681SAndroid Build Coastguard Worker; CHECK:         movq (%[[REG1:[a-z]+]]), %mm0
7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    psllq (%[[REG2:[a-z]+]]), %mm0
8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
10*9880d681SAndroid Build Coastguard Workerentry:
11*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <1 x i64>* %a to x86_mmx*
12*9880d681SAndroid Build Coastguard Worker  %1 = load x86_mmx, x86_mmx* %0, align 8
13*9880d681SAndroid Build Coastguard Worker  %2 = load i32, i32* %b, align 4
14*9880d681SAndroid Build Coastguard Worker  %3 = tail call x86_mmx @llvm.x86.mmx.pslli.q(x86_mmx %1, i32 %2)
15*9880d681SAndroid Build Coastguard Worker  %4 = bitcast x86_mmx %3 to i64
16*9880d681SAndroid Build Coastguard Worker  ret i64 %4
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.pslli.q(x86_mmx, i32)
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerdefine i64 @t1(<1 x i64>* %a, i32* %b) {
21*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t1:
22*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
23*9880d681SAndroid Build Coastguard Worker; CHECK:         movq (%[[REG1]]), %mm0
24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    psrlq (%[[REG2]]), %mm0
25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
27*9880d681SAndroid Build Coastguard Workerentry:
28*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <1 x i64>* %a to x86_mmx*
29*9880d681SAndroid Build Coastguard Worker  %1 = load x86_mmx, x86_mmx* %0, align 8
30*9880d681SAndroid Build Coastguard Worker  %2 = load i32, i32* %b, align 4
31*9880d681SAndroid Build Coastguard Worker  %3 = tail call x86_mmx @llvm.x86.mmx.psrli.q(x86_mmx %1, i32 %2)
32*9880d681SAndroid Build Coastguard Worker  %4 = bitcast x86_mmx %3 to i64
33*9880d681SAndroid Build Coastguard Worker  ret i64 %4
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrli.q(x86_mmx, i32)
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerdefine i64 @t2(<1 x i64>* %a, i32* %b) {
38*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t2:
39*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
40*9880d681SAndroid Build Coastguard Worker; CHECK:         movq (%[[REG1]]), %mm0
41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    psllw (%[[REG2]]), %mm0
42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
44*9880d681SAndroid Build Coastguard Workerentry:
45*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <1 x i64>* %a to x86_mmx*
46*9880d681SAndroid Build Coastguard Worker  %1 = load x86_mmx, x86_mmx* %0, align 8
47*9880d681SAndroid Build Coastguard Worker  %2 = load i32, i32* %b, align 4
48*9880d681SAndroid Build Coastguard Worker  %3 = tail call x86_mmx @llvm.x86.mmx.pslli.w(x86_mmx %1, i32 %2)
49*9880d681SAndroid Build Coastguard Worker  %4 = bitcast x86_mmx %3 to i64
50*9880d681SAndroid Build Coastguard Worker  ret i64 %4
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.pslli.w(x86_mmx, i32)
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerdefine i64 @t3(<1 x i64>* %a, i32* %b) {
55*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t3:
56*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
57*9880d681SAndroid Build Coastguard Worker; CHECK:         movq (%[[REG1]]), %mm0
58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    psrlw (%[[REG2]]), %mm0
59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
61*9880d681SAndroid Build Coastguard Workerentry:
62*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <1 x i64>* %a to x86_mmx*
63*9880d681SAndroid Build Coastguard Worker  %1 = load x86_mmx, x86_mmx* %0, align 8
64*9880d681SAndroid Build Coastguard Worker  %2 = load i32, i32* %b, align 4
65*9880d681SAndroid Build Coastguard Worker  %3 = tail call x86_mmx @llvm.x86.mmx.psrli.w(x86_mmx %1, i32 %2)
66*9880d681SAndroid Build Coastguard Worker  %4 = bitcast x86_mmx %3 to i64
67*9880d681SAndroid Build Coastguard Worker  ret i64 %4
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrli.w(x86_mmx, i32)
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Workerdefine i64 @t4(<1 x i64>* %a, i32* %b) {
72*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t4:
73*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
74*9880d681SAndroid Build Coastguard Worker; CHECK:         movq (%[[REG1]]), %mm0
75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    pslld (%[[REG2]]), %mm0
76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
78*9880d681SAndroid Build Coastguard Workerentry:
79*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <1 x i64>* %a to x86_mmx*
80*9880d681SAndroid Build Coastguard Worker  %1 = load x86_mmx, x86_mmx* %0, align 8
81*9880d681SAndroid Build Coastguard Worker  %2 = load i32, i32* %b, align 4
82*9880d681SAndroid Build Coastguard Worker  %3 = tail call x86_mmx @llvm.x86.mmx.pslli.d(x86_mmx %1, i32 %2)
83*9880d681SAndroid Build Coastguard Worker  %4 = bitcast x86_mmx %3 to i64
84*9880d681SAndroid Build Coastguard Worker  ret i64 %4
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.pslli.d(x86_mmx, i32)
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Workerdefine i64 @t5(<1 x i64>* %a, i32* %b) {
89*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t5:
90*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
91*9880d681SAndroid Build Coastguard Worker; CHECK:         movq (%[[REG1]]), %mm0
92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    psrld (%[[REG2]]), %mm0
93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
95*9880d681SAndroid Build Coastguard Workerentry:
96*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <1 x i64>* %a to x86_mmx*
97*9880d681SAndroid Build Coastguard Worker  %1 = load x86_mmx, x86_mmx* %0, align 8
98*9880d681SAndroid Build Coastguard Worker  %2 = load i32, i32* %b, align 4
99*9880d681SAndroid Build Coastguard Worker  %3 = tail call x86_mmx @llvm.x86.mmx.psrli.d(x86_mmx %1, i32 %2)
100*9880d681SAndroid Build Coastguard Worker  %4 = bitcast x86_mmx %3 to i64
101*9880d681SAndroid Build Coastguard Worker  ret i64 %4
102*9880d681SAndroid Build Coastguard Worker}
103*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrli.d(x86_mmx, i32)
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Workerdefine i64 @t6(<1 x i64>* %a, i32* %b) {
106*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t6:
107*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
108*9880d681SAndroid Build Coastguard Worker; CHECK:         movq (%[[REG1]]), %mm0
109*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    psraw (%[[REG2]]), %mm0
110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
112*9880d681SAndroid Build Coastguard Workerentry:
113*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <1 x i64>* %a to x86_mmx*
114*9880d681SAndroid Build Coastguard Worker  %1 = load x86_mmx, x86_mmx* %0, align 8
115*9880d681SAndroid Build Coastguard Worker  %2 = load i32, i32* %b, align 4
116*9880d681SAndroid Build Coastguard Worker  %3 = tail call x86_mmx @llvm.x86.mmx.psrai.w(x86_mmx %1, i32 %2)
117*9880d681SAndroid Build Coastguard Worker  %4 = bitcast x86_mmx %3 to i64
118*9880d681SAndroid Build Coastguard Worker  ret i64 %4
119*9880d681SAndroid Build Coastguard Worker}
120*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrai.w(x86_mmx, i32)
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Workerdefine i64 @t7(<1 x i64>* %a, i32* %b) {
123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t7:
124*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
125*9880d681SAndroid Build Coastguard Worker; CHECK:         movq (%[[REG1]]), %mm0
126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    psrad (%[[REG2]]), %mm0
127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
129*9880d681SAndroid Build Coastguard Workerentry:
130*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <1 x i64>* %a to x86_mmx*
131*9880d681SAndroid Build Coastguard Worker  %1 = load x86_mmx, x86_mmx* %0, align 8
132*9880d681SAndroid Build Coastguard Worker  %2 = load i32, i32* %b, align 4
133*9880d681SAndroid Build Coastguard Worker  %3 = tail call x86_mmx @llvm.x86.mmx.psrai.d(x86_mmx %1, i32 %2)
134*9880d681SAndroid Build Coastguard Worker  %4 = bitcast x86_mmx %3 to i64
135*9880d681SAndroid Build Coastguard Worker  ret i64 %4
136*9880d681SAndroid Build Coastguard Worker}
137*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrai.d(x86_mmx, i32)
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Workerdefine i64 @tt0(x86_mmx %t, x86_mmx* %q) {
140*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt0:
141*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
142*9880d681SAndroid Build Coastguard Worker; CHECK:    paddb (%[[REG3:[a-z]+]]), %mm0
143*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    emms
145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
146*9880d681SAndroid Build Coastguard Workerentry:
147*9880d681SAndroid Build Coastguard Worker  %v = load x86_mmx, x86_mmx* %q
148*9880d681SAndroid Build Coastguard Worker  %u = tail call x86_mmx @llvm.x86.mmx.padd.b(x86_mmx %t, x86_mmx %v)
149*9880d681SAndroid Build Coastguard Worker  %s = bitcast x86_mmx %u to i64
150*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.mmx.emms()
151*9880d681SAndroid Build Coastguard Worker  ret i64 %s
152*9880d681SAndroid Build Coastguard Worker}
153*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.padd.b(x86_mmx, x86_mmx)
154*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.mmx.emms()
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Workerdefine i64 @tt1(x86_mmx %t, x86_mmx* %q) {
157*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt1:
158*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
159*9880d681SAndroid Build Coastguard Worker; CHECK:    paddw (%[[REG3]]), %mm0
160*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
161*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    emms
162*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
163*9880d681SAndroid Build Coastguard Workerentry:
164*9880d681SAndroid Build Coastguard Worker  %v = load x86_mmx, x86_mmx* %q
165*9880d681SAndroid Build Coastguard Worker  %u = tail call x86_mmx @llvm.x86.mmx.padd.w(x86_mmx %t, x86_mmx %v)
166*9880d681SAndroid Build Coastguard Worker  %s = bitcast x86_mmx %u to i64
167*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.mmx.emms()
168*9880d681SAndroid Build Coastguard Worker  ret i64 %s
169*9880d681SAndroid Build Coastguard Worker}
170*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.padd.w(x86_mmx, x86_mmx)
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Workerdefine i64 @tt2(x86_mmx %t, x86_mmx* %q) {
173*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt2:
174*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
175*9880d681SAndroid Build Coastguard Worker; CHECK:    paddd (%[[REG3]]), %mm0
176*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
177*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    emms
178*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
179*9880d681SAndroid Build Coastguard Workerentry:
180*9880d681SAndroid Build Coastguard Worker  %v = load x86_mmx, x86_mmx* %q
181*9880d681SAndroid Build Coastguard Worker  %u = tail call x86_mmx @llvm.x86.mmx.padd.d(x86_mmx %t, x86_mmx %v)
182*9880d681SAndroid Build Coastguard Worker  %s = bitcast x86_mmx %u to i64
183*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.mmx.emms()
184*9880d681SAndroid Build Coastguard Worker  ret i64 %s
185*9880d681SAndroid Build Coastguard Worker}
186*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.padd.d(x86_mmx, x86_mmx)
187*9880d681SAndroid Build Coastguard Worker
188*9880d681SAndroid Build Coastguard Workerdefine i64 @tt3(x86_mmx %t, x86_mmx* %q) {
189*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt3:
190*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
191*9880d681SAndroid Build Coastguard Worker; CHECK:    paddq (%[[REG3]]), %mm0
192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
193*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    emms
194*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
195*9880d681SAndroid Build Coastguard Workerentry:
196*9880d681SAndroid Build Coastguard Worker  %v = load x86_mmx, x86_mmx* %q
197*9880d681SAndroid Build Coastguard Worker  %u = tail call x86_mmx @llvm.x86.mmx.padd.q(x86_mmx %t, x86_mmx %v)
198*9880d681SAndroid Build Coastguard Worker  %s = bitcast x86_mmx %u to i64
199*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.mmx.emms()
200*9880d681SAndroid Build Coastguard Worker  ret i64 %s
201*9880d681SAndroid Build Coastguard Worker}
202*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.padd.q(x86_mmx, x86_mmx)
203*9880d681SAndroid Build Coastguard Worker
204*9880d681SAndroid Build Coastguard Workerdefine i64 @tt4(x86_mmx %t, x86_mmx* %q) {
205*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt4:
206*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
207*9880d681SAndroid Build Coastguard Worker; CHECK:    paddusb (%[[REG3]]), %mm0
208*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
209*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    emms
210*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
211*9880d681SAndroid Build Coastguard Workerentry:
212*9880d681SAndroid Build Coastguard Worker  %v = load x86_mmx, x86_mmx* %q
213*9880d681SAndroid Build Coastguard Worker  %u = tail call x86_mmx @llvm.x86.mmx.paddus.b(x86_mmx %t, x86_mmx %v)
214*9880d681SAndroid Build Coastguard Worker  %s = bitcast x86_mmx %u to i64
215*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.mmx.emms()
216*9880d681SAndroid Build Coastguard Worker  ret i64 %s
217*9880d681SAndroid Build Coastguard Worker}
218*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.paddus.b(x86_mmx, x86_mmx)
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Workerdefine i64 @tt5(x86_mmx %t, x86_mmx* %q) {
221*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt5:
222*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
223*9880d681SAndroid Build Coastguard Worker; CHECK:    paddusw (%[[REG3]]), %mm0
224*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    emms
226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
227*9880d681SAndroid Build Coastguard Workerentry:
228*9880d681SAndroid Build Coastguard Worker  %v = load x86_mmx, x86_mmx* %q
229*9880d681SAndroid Build Coastguard Worker  %u = tail call x86_mmx @llvm.x86.mmx.paddus.w(x86_mmx %t, x86_mmx %v)
230*9880d681SAndroid Build Coastguard Worker  %s = bitcast x86_mmx %u to i64
231*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.mmx.emms()
232*9880d681SAndroid Build Coastguard Worker  ret i64 %s
233*9880d681SAndroid Build Coastguard Worker}
234*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.paddus.w(x86_mmx, x86_mmx)
235*9880d681SAndroid Build Coastguard Worker
236*9880d681SAndroid Build Coastguard Workerdefine i64 @tt6(x86_mmx %t, x86_mmx* %q) {
237*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt6:
238*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
239*9880d681SAndroid Build Coastguard Worker; CHECK:    psrlw (%[[REG3]]), %mm0
240*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
241*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    emms
242*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
243*9880d681SAndroid Build Coastguard Workerentry:
244*9880d681SAndroid Build Coastguard Worker  %v = load x86_mmx, x86_mmx* %q
245*9880d681SAndroid Build Coastguard Worker  %u = tail call x86_mmx @llvm.x86.mmx.psrl.w(x86_mmx %t, x86_mmx %v)
246*9880d681SAndroid Build Coastguard Worker  %s = bitcast x86_mmx %u to i64
247*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.mmx.emms()
248*9880d681SAndroid Build Coastguard Worker  ret i64 %s
249*9880d681SAndroid Build Coastguard Worker}
250*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrl.w(x86_mmx, x86_mmx)
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Workerdefine i64 @tt7(x86_mmx %t, x86_mmx* %q) {
253*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt7:
254*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
255*9880d681SAndroid Build Coastguard Worker; CHECK:    psrld (%[[REG3]]), %mm0
256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
257*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    emms
258*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
259*9880d681SAndroid Build Coastguard Workerentry:
260*9880d681SAndroid Build Coastguard Worker  %v = load x86_mmx, x86_mmx* %q
261*9880d681SAndroid Build Coastguard Worker  %u = tail call x86_mmx @llvm.x86.mmx.psrl.d(x86_mmx %t, x86_mmx %v)
262*9880d681SAndroid Build Coastguard Worker  %s = bitcast x86_mmx %u to i64
263*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.mmx.emms()
264*9880d681SAndroid Build Coastguard Worker  ret i64 %s
265*9880d681SAndroid Build Coastguard Worker}
266*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrl.d(x86_mmx, x86_mmx)
267*9880d681SAndroid Build Coastguard Worker
268*9880d681SAndroid Build Coastguard Workerdefine i64 @tt8(x86_mmx %t, x86_mmx* %q) {
269*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: tt8:
270*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:{{.*}} %entry
271*9880d681SAndroid Build Coastguard Worker; CHECK:    psrlq (%[[REG3]]), %mm0
272*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movd %mm0, %rax
273*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    emms
274*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
275*9880d681SAndroid Build Coastguard Workerentry:
276*9880d681SAndroid Build Coastguard Worker  %v = load x86_mmx, x86_mmx* %q
277*9880d681SAndroid Build Coastguard Worker  %u = tail call x86_mmx @llvm.x86.mmx.psrl.q(x86_mmx %t, x86_mmx %v)
278*9880d681SAndroid Build Coastguard Worker  %s = bitcast x86_mmx %u to i64
279*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.mmx.emms()
280*9880d681SAndroid Build Coastguard Worker  ret i64 %s
281*9880d681SAndroid Build Coastguard Worker}
282*9880d681SAndroid Build Coastguard Workerdeclare x86_mmx @llvm.x86.mmx.psrl.q(x86_mmx, x86_mmx)
283