xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/fp-int-conversions-direct-moves.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr8 -mtriple=powerpc64-unknown-unknown < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
5*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @_Z6testcff(float %arg) {
6*9880d681SAndroid Build Coastguard Workerentry:
7*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca float, align 4
8*9880d681SAndroid Build Coastguard Worker  store float %arg, float* %arg.addr, align 4
9*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %arg.addr, align 4
10*9880d681SAndroid Build Coastguard Worker  %conv = fptoui float %0 to i8
11*9880d681SAndroid Build Coastguard Worker  ret i8 %conv
12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z6testcff
13*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpsxws [[CONVREG01:[0-9]+]], 1
14*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrwz 3, [[CONVREG01]]
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
18*9880d681SAndroid Build Coastguard Workerdefine float @_Z6testfcc(i8 zeroext %arg) {
19*9880d681SAndroid Build Coastguard Workerentry:
20*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i8, align 1
21*9880d681SAndroid Build Coastguard Worker  store i8 %arg, i8* %arg.addr, align 1
22*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* %arg.addr, align 1
23*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i8 %0 to float
24*9880d681SAndroid Build Coastguard Worker  ret float %conv
25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z6testfcc
26*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrwz [[MOVEREG01:[0-9]+]], 3
27*9880d681SAndroid Build Coastguard Worker; CHECK: xscvuxdsp 1, [[MOVEREG01]]
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
31*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @_Z6testcdd(double %arg) {
32*9880d681SAndroid Build Coastguard Workerentry:
33*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca double, align 8
34*9880d681SAndroid Build Coastguard Worker  store double %arg, double* %arg.addr, align 8
35*9880d681SAndroid Build Coastguard Worker  %0 = load double, double* %arg.addr, align 8
36*9880d681SAndroid Build Coastguard Worker  %conv = fptoui double %0 to i8
37*9880d681SAndroid Build Coastguard Worker  ret i8 %conv
38*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z6testcdd
39*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpsxws [[CONVREG02:[0-9]+]], 1
40*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrwz 3, [[CONVREG02]]
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
44*9880d681SAndroid Build Coastguard Workerdefine double @_Z6testdcc(i8 zeroext %arg) {
45*9880d681SAndroid Build Coastguard Workerentry:
46*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i8, align 1
47*9880d681SAndroid Build Coastguard Worker  store i8 %arg, i8* %arg.addr, align 1
48*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* %arg.addr, align 1
49*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i8 %0 to double
50*9880d681SAndroid Build Coastguard Worker  ret double %conv
51*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z6testdcc
52*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrwz [[MOVEREG02:[0-9]+]], 3
53*9880d681SAndroid Build Coastguard Worker; CHECK: xscvuxddp 1, [[MOVEREG02]]
54*9880d681SAndroid Build Coastguard Worker}
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
57*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @_Z7testucff(float %arg) {
58*9880d681SAndroid Build Coastguard Workerentry:
59*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca float, align 4
60*9880d681SAndroid Build Coastguard Worker  store float %arg, float* %arg.addr, align 4
61*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %arg.addr, align 4
62*9880d681SAndroid Build Coastguard Worker  %conv = fptoui float %0 to i8
63*9880d681SAndroid Build Coastguard Worker  ret i8 %conv
64*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testucff
65*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpsxws [[CONVREG03:[0-9]+]], 1
66*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrwz 3, [[CONVREG03]]
67*9880d681SAndroid Build Coastguard Worker}
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
70*9880d681SAndroid Build Coastguard Workerdefine float @_Z7testfuch(i8 zeroext %arg) {
71*9880d681SAndroid Build Coastguard Workerentry:
72*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i8, align 1
73*9880d681SAndroid Build Coastguard Worker  store i8 %arg, i8* %arg.addr, align 1
74*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* %arg.addr, align 1
75*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i8 %0 to float
76*9880d681SAndroid Build Coastguard Worker  ret float %conv
77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testfuch
78*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrwz [[MOVEREG03:[0-9]+]], 3
79*9880d681SAndroid Build Coastguard Worker; CHECK: xscvuxdsp 1, [[MOVEREG03]]
80*9880d681SAndroid Build Coastguard Worker}
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
83*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @_Z7testucdd(double %arg) {
84*9880d681SAndroid Build Coastguard Workerentry:
85*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca double, align 8
86*9880d681SAndroid Build Coastguard Worker  store double %arg, double* %arg.addr, align 8
87*9880d681SAndroid Build Coastguard Worker  %0 = load double, double* %arg.addr, align 8
88*9880d681SAndroid Build Coastguard Worker  %conv = fptoui double %0 to i8
89*9880d681SAndroid Build Coastguard Worker  ret i8 %conv
90*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testucdd
91*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpsxws [[CONVREG04:[0-9]+]], 1
92*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrwz 3, [[CONVREG04]]
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
96*9880d681SAndroid Build Coastguard Workerdefine double @_Z7testduch(i8 zeroext %arg) {
97*9880d681SAndroid Build Coastguard Workerentry:
98*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i8, align 1
99*9880d681SAndroid Build Coastguard Worker  store i8 %arg, i8* %arg.addr, align 1
100*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* %arg.addr, align 1
101*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i8 %0 to double
102*9880d681SAndroid Build Coastguard Worker  ret double %conv
103*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testduch
104*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrwz [[MOVEREG04:[0-9]+]], 3
105*9880d681SAndroid Build Coastguard Worker; CHECK: xscvuxddp 1, [[MOVEREG04]]
106*9880d681SAndroid Build Coastguard Worker}
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
109*9880d681SAndroid Build Coastguard Workerdefine signext i16 @_Z6testsff(float %arg) {
110*9880d681SAndroid Build Coastguard Workerentry:
111*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca float, align 4
112*9880d681SAndroid Build Coastguard Worker  store float %arg, float* %arg.addr, align 4
113*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %arg.addr, align 4
114*9880d681SAndroid Build Coastguard Worker  %conv = fptosi float %0 to i16
115*9880d681SAndroid Build Coastguard Worker  ret i16 %conv
116*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z6testsff
117*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpsxws [[CONVREG05:[0-9]+]], 1
118*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrwz 3, [[CONVREG05]]
119*9880d681SAndroid Build Coastguard Worker}
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
122*9880d681SAndroid Build Coastguard Workerdefine float @_Z6testfss(i16 signext %arg) {
123*9880d681SAndroid Build Coastguard Workerentry:
124*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i16, align 2
125*9880d681SAndroid Build Coastguard Worker  store i16 %arg, i16* %arg.addr, align 2
126*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* %arg.addr, align 2
127*9880d681SAndroid Build Coastguard Worker  %conv = sitofp i16 %0 to float
128*9880d681SAndroid Build Coastguard Worker  ret float %conv
129*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z6testfss
130*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrwa [[MOVEREG05:[0-9]+]], 3
131*9880d681SAndroid Build Coastguard Worker; CHECK: xscvsxdsp 1, [[MOVEREG05]]
132*9880d681SAndroid Build Coastguard Worker}
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
135*9880d681SAndroid Build Coastguard Workerdefine signext i16 @_Z6testsdd(double %arg) {
136*9880d681SAndroid Build Coastguard Workerentry:
137*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca double, align 8
138*9880d681SAndroid Build Coastguard Worker  store double %arg, double* %arg.addr, align 8
139*9880d681SAndroid Build Coastguard Worker  %0 = load double, double* %arg.addr, align 8
140*9880d681SAndroid Build Coastguard Worker  %conv = fptosi double %0 to i16
141*9880d681SAndroid Build Coastguard Worker  ret i16 %conv
142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z6testsdd
143*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpsxws [[CONVREG06:[0-9]+]], 1
144*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrwz 3, [[CONVREG06]]
145*9880d681SAndroid Build Coastguard Worker}
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
148*9880d681SAndroid Build Coastguard Workerdefine double @_Z6testdss(i16 signext %arg) {
149*9880d681SAndroid Build Coastguard Workerentry:
150*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i16, align 2
151*9880d681SAndroid Build Coastguard Worker  store i16 %arg, i16* %arg.addr, align 2
152*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* %arg.addr, align 2
153*9880d681SAndroid Build Coastguard Worker  %conv = sitofp i16 %0 to double
154*9880d681SAndroid Build Coastguard Worker  ret double %conv
155*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z6testdss
156*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrwa [[MOVEREG06:[0-9]+]], 3
157*9880d681SAndroid Build Coastguard Worker; CHECK: xscvsxddp 1, [[MOVEREG06]]
158*9880d681SAndroid Build Coastguard Worker}
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
161*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @_Z7testusff(float %arg) {
162*9880d681SAndroid Build Coastguard Workerentry:
163*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca float, align 4
164*9880d681SAndroid Build Coastguard Worker  store float %arg, float* %arg.addr, align 4
165*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %arg.addr, align 4
166*9880d681SAndroid Build Coastguard Worker  %conv = fptoui float %0 to i16
167*9880d681SAndroid Build Coastguard Worker  ret i16 %conv
168*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testusff
169*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpsxws [[CONVREG07:[0-9]+]], 1
170*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrwz 3, [[CONVREG07]]
171*9880d681SAndroid Build Coastguard Worker}
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
174*9880d681SAndroid Build Coastguard Workerdefine float @_Z7testfust(i16 zeroext %arg) {
175*9880d681SAndroid Build Coastguard Workerentry:
176*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i16, align 2
177*9880d681SAndroid Build Coastguard Worker  store i16 %arg, i16* %arg.addr, align 2
178*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* %arg.addr, align 2
179*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i16 %0 to float
180*9880d681SAndroid Build Coastguard Worker  ret float %conv
181*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testfust
182*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrwz [[MOVEREG07:[0-9]+]], 3
183*9880d681SAndroid Build Coastguard Worker; CHECK: xscvuxdsp 1, [[MOVEREG07]]
184*9880d681SAndroid Build Coastguard Worker}
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
187*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @_Z7testusdd(double %arg) {
188*9880d681SAndroid Build Coastguard Workerentry:
189*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca double, align 8
190*9880d681SAndroid Build Coastguard Worker  store double %arg, double* %arg.addr, align 8
191*9880d681SAndroid Build Coastguard Worker  %0 = load double, double* %arg.addr, align 8
192*9880d681SAndroid Build Coastguard Worker  %conv = fptoui double %0 to i16
193*9880d681SAndroid Build Coastguard Worker  ret i16 %conv
194*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testusdd
195*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpsxws [[CONVREG08:[0-9]+]], 1
196*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrwz 3, [[CONVREG08]]
197*9880d681SAndroid Build Coastguard Worker}
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
200*9880d681SAndroid Build Coastguard Workerdefine double @_Z7testdust(i16 zeroext %arg) {
201*9880d681SAndroid Build Coastguard Workerentry:
202*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i16, align 2
203*9880d681SAndroid Build Coastguard Worker  store i16 %arg, i16* %arg.addr, align 2
204*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* %arg.addr, align 2
205*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i16 %0 to double
206*9880d681SAndroid Build Coastguard Worker  ret double %conv
207*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testdust
208*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrwz [[MOVEREG08:[0-9]+]], 3
209*9880d681SAndroid Build Coastguard Worker; CHECK: xscvuxddp 1, [[MOVEREG08]]
210*9880d681SAndroid Build Coastguard Worker}
211*9880d681SAndroid Build Coastguard Worker
212*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
213*9880d681SAndroid Build Coastguard Workerdefine signext i32 @_Z6testiff(float %arg) {
214*9880d681SAndroid Build Coastguard Workerentry:
215*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca float, align 4
216*9880d681SAndroid Build Coastguard Worker  store float %arg, float* %arg.addr, align 4
217*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %arg.addr, align 4
218*9880d681SAndroid Build Coastguard Worker  %conv = fptosi float %0 to i32
219*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
220*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z6testiff
221*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpsxws [[CONVREG09:[0-9]+]], 1
222*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrwz 3, [[CONVREG09]]
223*9880d681SAndroid Build Coastguard Worker}
224*9880d681SAndroid Build Coastguard Worker
225*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
226*9880d681SAndroid Build Coastguard Workerdefine float @_Z6testfii(i32 signext %arg) {
227*9880d681SAndroid Build Coastguard Workerentry:
228*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i32, align 4
229*9880d681SAndroid Build Coastguard Worker  store i32 %arg, i32* %arg.addr, align 4
230*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arg.addr, align 4
231*9880d681SAndroid Build Coastguard Worker  %conv = sitofp i32 %0 to float
232*9880d681SAndroid Build Coastguard Worker  ret float %conv
233*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z6testfii
234*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrwa [[MOVEREG09:[0-9]+]], 3
235*9880d681SAndroid Build Coastguard Worker; CHECK: xscvsxdsp 1, [[MOVEREG09]]
236*9880d681SAndroid Build Coastguard Worker}
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
239*9880d681SAndroid Build Coastguard Workerdefine signext i32 @_Z6testidd(double %arg) {
240*9880d681SAndroid Build Coastguard Workerentry:
241*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca double, align 8
242*9880d681SAndroid Build Coastguard Worker  store double %arg, double* %arg.addr, align 8
243*9880d681SAndroid Build Coastguard Worker  %0 = load double, double* %arg.addr, align 8
244*9880d681SAndroid Build Coastguard Worker  %conv = fptosi double %0 to i32
245*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
246*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z6testidd
247*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpsxws [[CONVREG10:[0-9]+]], 1
248*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrwz 3, [[CONVREG10]]
249*9880d681SAndroid Build Coastguard Worker}
250*9880d681SAndroid Build Coastguard Worker
251*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
252*9880d681SAndroid Build Coastguard Workerdefine double @_Z6testdii(i32 signext %arg) {
253*9880d681SAndroid Build Coastguard Workerentry:
254*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i32, align 4
255*9880d681SAndroid Build Coastguard Worker  store i32 %arg, i32* %arg.addr, align 4
256*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arg.addr, align 4
257*9880d681SAndroid Build Coastguard Worker  %conv = sitofp i32 %0 to double
258*9880d681SAndroid Build Coastguard Worker  ret double %conv
259*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z6testdii
260*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrwa [[MOVEREG10:[0-9]+]], 3
261*9880d681SAndroid Build Coastguard Worker; CHECK: xscvsxddp 1, [[MOVEREG10]]
262*9880d681SAndroid Build Coastguard Worker}
263*9880d681SAndroid Build Coastguard Worker
264*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
265*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @_Z7testuiff(float %arg) {
266*9880d681SAndroid Build Coastguard Workerentry:
267*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca float, align 4
268*9880d681SAndroid Build Coastguard Worker  store float %arg, float* %arg.addr, align 4
269*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %arg.addr, align 4
270*9880d681SAndroid Build Coastguard Worker  %conv = fptoui float %0 to i32
271*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
272*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testuiff
273*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpuxws [[CONVREG11:[0-9]+]], 1
274*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrwz 3, [[CONVREG11]]
275*9880d681SAndroid Build Coastguard Worker}
276*9880d681SAndroid Build Coastguard Worker
277*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
278*9880d681SAndroid Build Coastguard Workerdefine float @_Z7testfuij(i32 zeroext %arg) {
279*9880d681SAndroid Build Coastguard Workerentry:
280*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i32, align 4
281*9880d681SAndroid Build Coastguard Worker  store i32 %arg, i32* %arg.addr, align 4
282*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arg.addr, align 4
283*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i32 %0 to float
284*9880d681SAndroid Build Coastguard Worker  ret float %conv
285*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testfuij
286*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrwz [[MOVEREG11:[0-9]+]], 3
287*9880d681SAndroid Build Coastguard Worker; CHECK: xscvuxdsp 1, [[MOVEREG11]]
288*9880d681SAndroid Build Coastguard Worker}
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
291*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @_Z7testuidd(double %arg) {
292*9880d681SAndroid Build Coastguard Workerentry:
293*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca double, align 8
294*9880d681SAndroid Build Coastguard Worker  store double %arg, double* %arg.addr, align 8
295*9880d681SAndroid Build Coastguard Worker  %0 = load double, double* %arg.addr, align 8
296*9880d681SAndroid Build Coastguard Worker  %conv = fptoui double %0 to i32
297*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
298*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testuidd
299*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpuxws [[CONVREG12:[0-9]+]], 1
300*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrwz 3, [[CONVREG12]]
301*9880d681SAndroid Build Coastguard Worker}
302*9880d681SAndroid Build Coastguard Worker
303*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
304*9880d681SAndroid Build Coastguard Workerdefine double @_Z7testduij(i32 zeroext %arg) {
305*9880d681SAndroid Build Coastguard Workerentry:
306*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i32, align 4
307*9880d681SAndroid Build Coastguard Worker  store i32 %arg, i32* %arg.addr, align 4
308*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arg.addr, align 4
309*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i32 %0 to double
310*9880d681SAndroid Build Coastguard Worker  ret double %conv
311*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testduij
312*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrwz [[MOVEREG12:[0-9]+]], 3
313*9880d681SAndroid Build Coastguard Worker; CHECK: xscvuxddp 1, [[MOVEREG12]]
314*9880d681SAndroid Build Coastguard Worker}
315*9880d681SAndroid Build Coastguard Worker
316*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
317*9880d681SAndroid Build Coastguard Workerdefine i64 @_Z7testllff(float %arg) {
318*9880d681SAndroid Build Coastguard Workerentry:
319*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca float, align 4
320*9880d681SAndroid Build Coastguard Worker  store float %arg, float* %arg.addr, align 4
321*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %arg.addr, align 4
322*9880d681SAndroid Build Coastguard Worker  %conv = fptosi float %0 to i64
323*9880d681SAndroid Build Coastguard Worker  ret i64 %conv
324*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testllff
325*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpsxds [[CONVREG13:[0-9]+]], 1
326*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrd 3, [[CONVREG13]]
327*9880d681SAndroid Build Coastguard Worker}
328*9880d681SAndroid Build Coastguard Worker
329*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
330*9880d681SAndroid Build Coastguard Workerdefine float @_Z7testfllx(i64 %arg) {
331*9880d681SAndroid Build Coastguard Workerentry:
332*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i64, align 8
333*9880d681SAndroid Build Coastguard Worker  store i64 %arg, i64* %arg.addr, align 8
334*9880d681SAndroid Build Coastguard Worker  %0 = load i64, i64* %arg.addr, align 8
335*9880d681SAndroid Build Coastguard Worker  %conv = sitofp i64 %0 to float
336*9880d681SAndroid Build Coastguard Worker  ret float %conv
337*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:@_Z7testfllx
338*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrd [[MOVEREG13:[0-9]+]], 3
339*9880d681SAndroid Build Coastguard Worker; CHECK: xscvsxdsp 1, [[MOVEREG13]]
340*9880d681SAndroid Build Coastguard Worker}
341*9880d681SAndroid Build Coastguard Worker
342*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
343*9880d681SAndroid Build Coastguard Workerdefine i64 @_Z7testlldd(double %arg) {
344*9880d681SAndroid Build Coastguard Workerentry:
345*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca double, align 8
346*9880d681SAndroid Build Coastguard Worker  store double %arg, double* %arg.addr, align 8
347*9880d681SAndroid Build Coastguard Worker  %0 = load double, double* %arg.addr, align 8
348*9880d681SAndroid Build Coastguard Worker  %conv = fptosi double %0 to i64
349*9880d681SAndroid Build Coastguard Worker  ret i64 %conv
350*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testlldd
351*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpsxds [[CONVREG14:[0-9]+]], 1
352*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrd 3, [[CONVREG14]]
353*9880d681SAndroid Build Coastguard Worker}
354*9880d681SAndroid Build Coastguard Worker
355*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
356*9880d681SAndroid Build Coastguard Workerdefine double @_Z7testdllx(i64 %arg) {
357*9880d681SAndroid Build Coastguard Workerentry:
358*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i64, align 8
359*9880d681SAndroid Build Coastguard Worker  store i64 %arg, i64* %arg.addr, align 8
360*9880d681SAndroid Build Coastguard Worker  %0 = load i64, i64* %arg.addr, align 8
361*9880d681SAndroid Build Coastguard Worker  %conv = sitofp i64 %0 to double
362*9880d681SAndroid Build Coastguard Worker  ret double %conv
363*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z7testdllx
364*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrd [[MOVEREG14:[0-9]+]], 3
365*9880d681SAndroid Build Coastguard Worker; CHECK: xscvsxddp 1, [[MOVEREG14]]
366*9880d681SAndroid Build Coastguard Worker}
367*9880d681SAndroid Build Coastguard Worker
368*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
369*9880d681SAndroid Build Coastguard Workerdefine i64 @_Z8testullff(float %arg) {
370*9880d681SAndroid Build Coastguard Workerentry:
371*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca float, align 4
372*9880d681SAndroid Build Coastguard Worker  store float %arg, float* %arg.addr, align 4
373*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %arg.addr, align 4
374*9880d681SAndroid Build Coastguard Worker  %conv = fptoui float %0 to i64
375*9880d681SAndroid Build Coastguard Worker  ret i64 %conv
376*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z8testullff
377*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpuxds [[CONVREG15:[0-9]+]], 1
378*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrd 3, [[CONVREG15]]
379*9880d681SAndroid Build Coastguard Worker}
380*9880d681SAndroid Build Coastguard Worker
381*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
382*9880d681SAndroid Build Coastguard Workerdefine float @_Z8testfully(i64 %arg) {
383*9880d681SAndroid Build Coastguard Workerentry:
384*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i64, align 8
385*9880d681SAndroid Build Coastguard Worker  store i64 %arg, i64* %arg.addr, align 8
386*9880d681SAndroid Build Coastguard Worker  %0 = load i64, i64* %arg.addr, align 8
387*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i64 %0 to float
388*9880d681SAndroid Build Coastguard Worker  ret float %conv
389*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z8testfully
390*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrd [[MOVEREG15:[0-9]+]], 3
391*9880d681SAndroid Build Coastguard Worker; CHECK: xscvuxdsp 1, [[MOVEREG15]]
392*9880d681SAndroid Build Coastguard Worker}
393*9880d681SAndroid Build Coastguard Worker
394*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
395*9880d681SAndroid Build Coastguard Workerdefine i64 @_Z8testulldd(double %arg) {
396*9880d681SAndroid Build Coastguard Workerentry:
397*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca double, align 8
398*9880d681SAndroid Build Coastguard Worker  store double %arg, double* %arg.addr, align 8
399*9880d681SAndroid Build Coastguard Worker  %0 = load double, double* %arg.addr, align 8
400*9880d681SAndroid Build Coastguard Worker  %conv = fptoui double %0 to i64
401*9880d681SAndroid Build Coastguard Worker  ret i64 %conv
402*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z8testulldd
403*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpuxds [[CONVREG16:[0-9]+]], 1
404*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrd 3, [[CONVREG16]]
405*9880d681SAndroid Build Coastguard Worker}
406*9880d681SAndroid Build Coastguard Worker
407*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
408*9880d681SAndroid Build Coastguard Workerdefine double @_Z8testdully(i64 %arg) {
409*9880d681SAndroid Build Coastguard Workerentry:
410*9880d681SAndroid Build Coastguard Worker  %arg.addr = alloca i64, align 8
411*9880d681SAndroid Build Coastguard Worker  store i64 %arg, i64* %arg.addr, align 8
412*9880d681SAndroid Build Coastguard Worker  %0 = load i64, i64* %arg.addr, align 8
413*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i64 %0 to double
414*9880d681SAndroid Build Coastguard Worker  ret double %conv
415*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @_Z8testdully
416*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrd [[MOVEREG16:[0-9]+]], 3
417*9880d681SAndroid Build Coastguard Worker; CHECK: xscvuxddp 1, [[MOVEREG16]]
418*9880d681SAndroid Build Coastguard Worker}
419