Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(482)

Side by Side Diff: tests_lit/llvm2ice_tests/fp.convert.ll

Issue 1266263003: Add the ARM32 FP register table entries, simple arith, and args. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: format more Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tests_lit/llvm2ice_tests/fp.cmp.ll ('k') | tests_lit/llvm2ice_tests/fp.load_store.ll » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 ; This tries to be a comprehensive test of f32 and f64 convert operations.
2 ; The CHECK lines are only checking for basic instruction patterns
3 ; that should be present regardless of the optimization level, so
4 ; there are no special OPTM1 match lines.
5
6 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 | FileCheck %s
7 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 | FileCheck %s
8
9 define internal float @fptrunc(double %a) {
10 entry:
11 %conv = fptrunc double %a to float
12 ret float %conv
13 }
14 ; CHECK-LABEL: fptrunc
15 ; CHECK: cvtsd2ss
16 ; CHECK: fld
17
18 define internal double @fpext(float %a) {
19 entry:
20 %conv = fpext float %a to double
21 ret double %conv
22 }
23 ; CHECK-LABEL: fpext
24 ; CHECK: cvtss2sd
25 ; CHECK: fld
26
27 define internal i64 @doubleToSigned64(double %a) {
28 entry:
29 %conv = fptosi double %a to i64
30 ret i64 %conv
31 }
32 ; CHECK-LABEL: doubleToSigned64
33 ; CHECK: call {{.*}} R_{{.*}} __Sz_fptosi_f64_i64
34
35 define internal i64 @floatToSigned64(float %a) {
36 entry:
37 %conv = fptosi float %a to i64
38 ret i64 %conv
39 }
40 ; CHECK-LABEL: floatToSigned64
41 ; CHECK: call {{.*}} R_{{.*}} __Sz_fptosi_f32_i64
42
43 define internal i64 @doubleToUnsigned64(double %a) {
44 entry:
45 %conv = fptoui double %a to i64
46 ret i64 %conv
47 }
48 ; CHECK-LABEL: doubleToUnsigned64
49 ; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f64_i64
50
51 define internal i64 @floatToUnsigned64(float %a) {
52 entry:
53 %conv = fptoui float %a to i64
54 ret i64 %conv
55 }
56 ; CHECK-LABEL: floatToUnsigned64
57 ; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f32_i64
58
59 define internal i32 @doubleToSigned32(double %a) {
60 entry:
61 %conv = fptosi double %a to i32
62 ret i32 %conv
63 }
64 ; CHECK-LABEL: doubleToSigned32
65 ; CHECK: cvttsd2si
66
67 define internal i32 @doubleToSigned32Const() {
68 entry:
69 %conv = fptosi double 867.5309 to i32
70 ret i32 %conv
71 }
72 ; CHECK-LABEL: doubleToSigned32Const
73 ; CHECK: cvttsd2si
74
75 define internal i32 @floatToSigned32(float %a) {
76 entry:
77 %conv = fptosi float %a to i32
78 ret i32 %conv
79 }
80 ; CHECK-LABEL: floatToSigned32
81 ; CHECK: cvttss2si
82
83 define internal i32 @doubleToUnsigned32(double %a) {
84 entry:
85 %conv = fptoui double %a to i32
86 ret i32 %conv
87 }
88 ; CHECK-LABEL: doubleToUnsigned32
89 ; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f64_i32
90
91 define internal i32 @floatToUnsigned32(float %a) {
92 entry:
93 %conv = fptoui float %a to i32
94 ret i32 %conv
95 }
96 ; CHECK-LABEL: floatToUnsigned32
97 ; CHECK: call {{.*}} R_{{.*}} __Sz_fptoui_f32_i32
98
99 define internal i32 @doubleToSigned16(double %a) {
100 entry:
101 %conv = fptosi double %a to i16
102 %conv.ret_ext = sext i16 %conv to i32
103 ret i32 %conv.ret_ext
104 }
105 ; CHECK-LABEL: doubleToSigned16
106 ; CHECK: cvttsd2si
107 ; CHECK: movsx
108
109 define internal i32 @floatToSigned16(float %a) {
110 entry:
111 %conv = fptosi float %a to i16
112 %conv.ret_ext = sext i16 %conv to i32
113 ret i32 %conv.ret_ext
114 }
115 ; CHECK-LABEL: floatToSigned16
116 ; CHECK: cvttss2si
117 ; CHECK: movsx
118
119 define internal i32 @doubleToUnsigned16(double %a) {
120 entry:
121 %conv = fptoui double %a to i16
122 %conv.ret_ext = zext i16 %conv to i32
123 ret i32 %conv.ret_ext
124 }
125 ; CHECK-LABEL: doubleToUnsigned16
126 ; CHECK: cvttsd2si
127 ; CHECK: movzx
128
129 define internal i32 @floatToUnsigned16(float %a) {
130 entry:
131 %conv = fptoui float %a to i16
132 %conv.ret_ext = zext i16 %conv to i32
133 ret i32 %conv.ret_ext
134 }
135 ; CHECK-LABEL: floatToUnsigned16
136 ; CHECK: cvttss2si
137 ; CHECK: movzx
138
139 define internal i32 @doubleToSigned8(double %a) {
140 entry:
141 %conv = fptosi double %a to i8
142 %conv.ret_ext = sext i8 %conv to i32
143 ret i32 %conv.ret_ext
144 }
145 ; CHECK-LABEL: doubleToSigned8
146 ; CHECK: cvttsd2si
147 ; CHECK: movsx
148
149 define internal i32 @floatToSigned8(float %a) {
150 entry:
151 %conv = fptosi float %a to i8
152 %conv.ret_ext = sext i8 %conv to i32
153 ret i32 %conv.ret_ext
154 }
155 ; CHECK-LABEL: floatToSigned8
156 ; CHECK: cvttss2si
157 ; CHECK: movsx
158
159 define internal i32 @doubleToUnsigned8(double %a) {
160 entry:
161 %conv = fptoui double %a to i8
162 %conv.ret_ext = zext i8 %conv to i32
163 ret i32 %conv.ret_ext
164 }
165 ; CHECK-LABEL: doubleToUnsigned8
166 ; CHECK: cvttsd2si
167 ; CHECK: movzx
168
169 define internal i32 @floatToUnsigned8(float %a) {
170 entry:
171 %conv = fptoui float %a to i8
172 %conv.ret_ext = zext i8 %conv to i32
173 ret i32 %conv.ret_ext
174 }
175 ; CHECK-LABEL: floatToUnsigned8
176 ; CHECK: cvttss2si
177 ; CHECK: movzx
178
179 define internal i32 @doubleToUnsigned1(double %a) {
180 entry:
181 %tobool = fptoui double %a to i1
182 %tobool.ret_ext = zext i1 %tobool to i32
183 ret i32 %tobool.ret_ext
184 }
185 ; CHECK-LABEL: doubleToUnsigned1
186 ; CHECK: cvttsd2si
187 ; CHECK: and eax,0x1
188
189 define internal i32 @floatToUnsigned1(float %a) {
190 entry:
191 %tobool = fptoui float %a to i1
192 %tobool.ret_ext = zext i1 %tobool to i32
193 ret i32 %tobool.ret_ext
194 }
195 ; CHECK-LABEL: floatToUnsigned1
196 ; CHECK: cvttss2si
197 ; CHECK: and eax,0x1
198
199 define internal double @signed64ToDouble(i64 %a) {
200 entry:
201 %conv = sitofp i64 %a to double
202 ret double %conv
203 }
204 ; CHECK-LABEL: signed64ToDouble
205 ; CHECK: call {{.*}} R_{{.*}} __Sz_sitofp_i64_f64
206 ; CHECK: fstp QWORD
207
208 define internal float @signed64ToFloat(i64 %a) {
209 entry:
210 %conv = sitofp i64 %a to float
211 ret float %conv
212 }
213 ; CHECK-LABEL: signed64ToFloat
214 ; CHECK: call {{.*}} R_{{.*}} __Sz_sitofp_i64_f32
215 ; CHECK: fstp DWORD
216
217 define internal double @unsigned64ToDouble(i64 %a) {
218 entry:
219 %conv = uitofp i64 %a to double
220 ret double %conv
221 }
222 ; CHECK-LABEL: unsigned64ToDouble
223 ; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i64_f64
224 ; CHECK: fstp
225
226 define internal float @unsigned64ToFloat(i64 %a) {
227 entry:
228 %conv = uitofp i64 %a to float
229 ret float %conv
230 }
231 ; CHECK-LABEL: unsigned64ToFloat
232 ; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i64_f32
233 ; CHECK: fstp
234
235 define internal double @unsigned64ToDoubleConst() {
236 entry:
237 %conv = uitofp i64 12345678901234 to double
238 ret double %conv
239 }
240 ; CHECK-LABEL: unsigned64ToDouble
241 ; CHECK: mov DWORD PTR [esp+0x4],0xb3a
242 ; CHECK: mov DWORD PTR [esp],0x73ce2ff2
243 ; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i64_f64
244 ; CHECK: fstp
245
246 define internal double @signed32ToDouble(i32 %a) {
247 entry:
248 %conv = sitofp i32 %a to double
249 ret double %conv
250 }
251 ; CHECK-LABEL: signed32ToDouble
252 ; CHECK: cvtsi2sd
253 ; CHECK: fld
254
255 define internal double @signed32ToDoubleConst() {
256 entry:
257 %conv = sitofp i32 123 to double
258 ret double %conv
259 }
260 ; CHECK-LABEL: signed32ToDoubleConst
261 ; CHECK: cvtsi2sd {{.*[^1]}}
262 ; CHECK: fld
263
264 define internal float @signed32ToFloat(i32 %a) {
265 entry:
266 %conv = sitofp i32 %a to float
267 ret float %conv
268 }
269 ; CHECK-LABEL: signed32ToFloat
270 ; CHECK: cvtsi2ss
271 ; CHECK: fld
272
273 define internal double @unsigned32ToDouble(i32 %a) {
274 entry:
275 %conv = uitofp i32 %a to double
276 ret double %conv
277 }
278 ; CHECK-LABEL: unsigned32ToDouble
279 ; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i32_f64
280 ; CHECK: fstp QWORD
281
282 define internal float @unsigned32ToFloat(i32 %a) {
283 entry:
284 %conv = uitofp i32 %a to float
285 ret float %conv
286 }
287 ; CHECK-LABEL: unsigned32ToFloat
288 ; CHECK: call {{.*}} R_{{.*}} __Sz_uitofp_i32_f32
289 ; CHECK: fstp DWORD
290
291 define internal double @signed16ToDouble(i32 %a) {
292 entry:
293 %a.arg_trunc = trunc i32 %a to i16
294 %conv = sitofp i16 %a.arg_trunc to double
295 ret double %conv
296 }
297 ; CHECK-LABEL: signed16ToDouble
298 ; CHECK: cvtsi2sd
299 ; CHECK: fld QWORD
300
301 define internal float @signed16ToFloat(i32 %a) {
302 entry:
303 %a.arg_trunc = trunc i32 %a to i16
304 %conv = sitofp i16 %a.arg_trunc to float
305 ret float %conv
306 }
307 ; CHECK-LABEL: signed16ToFloat
308 ; CHECK: cvtsi2ss
309 ; CHECK: fld DWORD
310
311 define internal double @unsigned16ToDouble(i32 %a) {
312 entry:
313 %a.arg_trunc = trunc i32 %a to i16
314 %conv = uitofp i16 %a.arg_trunc to double
315 ret double %conv
316 }
317 ; CHECK-LABEL: unsigned16ToDouble
318 ; CHECK: cvtsi2sd
319 ; CHECK: fld
320
321 define internal double @unsigned16ToDoubleConst() {
322 entry:
323 %conv = uitofp i16 12345 to double
324 ret double %conv
325 }
326 ; CHECK-LABEL: unsigned16ToDoubleConst
327 ; CHECK: cvtsi2sd
328 ; CHECK: fld
329
330 define internal float @unsigned16ToFloat(i32 %a) {
331 entry:
332 %a.arg_trunc = trunc i32 %a to i16
333 %conv = uitofp i16 %a.arg_trunc to float
334 ret float %conv
335 }
336 ; CHECK-LABEL: unsigned16ToFloat
337 ; CHECK: cvtsi2ss
338 ; CHECK: fld
339
340 define internal double @signed8ToDouble(i32 %a) {
341 entry:
342 %a.arg_trunc = trunc i32 %a to i8
343 %conv = sitofp i8 %a.arg_trunc to double
344 ret double %conv
345 }
346 ; CHECK-LABEL: signed8ToDouble
347 ; CHECK: cvtsi2sd
348 ; CHECK: fld
349
350 define internal float @signed8ToFloat(i32 %a) {
351 entry:
352 %a.arg_trunc = trunc i32 %a to i8
353 %conv = sitofp i8 %a.arg_trunc to float
354 ret float %conv
355 }
356 ; CHECK-LABEL: signed8ToFloat
357 ; CHECK: cvtsi2ss
358 ; CHECK: fld
359
360 define internal double @unsigned8ToDouble(i32 %a) {
361 entry:
362 %a.arg_trunc = trunc i32 %a to i8
363 %conv = uitofp i8 %a.arg_trunc to double
364 ret double %conv
365 }
366 ; CHECK-LABEL: unsigned8ToDouble
367 ; CHECK: cvtsi2sd
368 ; CHECK: fld
369
370 define internal float @unsigned8ToFloat(i32 %a) {
371 entry:
372 %a.arg_trunc = trunc i32 %a to i8
373 %conv = uitofp i8 %a.arg_trunc to float
374 ret float %conv
375 }
376 ; CHECK-LABEL: unsigned8ToFloat
377 ; CHECK: cvtsi2ss
378 ; CHECK: fld
379
380 define internal double @unsigned1ToDouble(i32 %a) {
381 entry:
382 %a.arg_trunc = trunc i32 %a to i1
383 %conv = uitofp i1 %a.arg_trunc to double
384 ret double %conv
385 }
386 ; CHECK-LABEL: unsigned1ToDouble
387 ; CHECK: cvtsi2sd
388 ; CHECK: fld
389
390 define internal float @unsigned1ToFloat(i32 %a) {
391 entry:
392 %a.arg_trunc = trunc i32 %a to i1
393 %conv = uitofp i1 %a.arg_trunc to float
394 ret float %conv
395 }
396 ; CHECK-LABEL: unsigned1ToFloat
397 ; CHECK: cvtsi2ss
398 ; CHECK: fld
399
400 define internal float @int32BitcastToFloat(i32 %a) {
401 entry:
402 %conv = bitcast i32 %a to float
403 ret float %conv
404 }
405 ; CHECK-LABEL: int32BitcastToFloat
406 ; CHECK: mov
407
408 define internal float @int32BitcastToFloatConst() {
409 entry:
410 %conv = bitcast i32 8675309 to float
411 ret float %conv
412 }
413 ; CHECK-LABEL: int32BitcastToFloatConst
414 ; CHECK: mov
415
416 define internal double @int64BitcastToDouble(i64 %a) {
417 entry:
418 %conv = bitcast i64 %a to double
419 ret double %conv
420 }
421 ; CHECK-LABEL: int64BitcastToDouble
422 ; CHECK: mov
423
424 define internal double @int64BitcastToDoubleConst() {
425 entry:
426 %conv = bitcast i64 9035768 to double
427 ret double %conv
428 }
429 ; CHECK-LABEL: int64BitcastToDoubleConst
430 ; CHECK: mov
OLDNEW
« no previous file with comments | « tests_lit/llvm2ice_tests/fp.cmp.ll ('k') | tests_lit/llvm2ice_tests/fp.load_store.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698