[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / llvm / test / CodeGen / MSP430 / libcalls.ll
blobb6e24db6c551abf3a8d89d9c13467d6f4d15907f
1 ; RUN: llc -O0 < %s | FileCheck %s
3 target datalayout = "e-p:16:16:16-i8:8:8-i16:16:16-i32:16:32-n8:16-a0:16:16"
4 target triple = "msp430---elf"
6 @g_double = global double 123.0, align 8
7 @g_float = global float 123.0, align 8
8 @g_i32 = global i32 123, align 8
9 @g_i64 = global i64 456, align 8
10 @g_i16 = global i16 789, align 8
12 define float @d2f() #0 {
13 entry:
14 ; CHECK: d2f:
16 ; CHECK: call #__mspabi_cvtdf
17   %0 = load volatile double, double* @g_double, align 8
18   %1 = fptrunc double %0 to float
20   ret float %1
23 define double @f2d() #0 {
24 entry:
25 ; CHECK: f2d:
27 ; CHECK: call #__mspabi_cvtfd
28   %0 = load volatile float, float* @g_float, align 8
29   %1 = fpext float %0 to double
31   ret double %1
34 define i32 @d2l() #0 {
35 entry:
36 ; CHECK: d2l:
38 ; CHECK: call #__mspabi_fixdli
39   %0 = load volatile double, double* @g_double, align 8
40   %1 = fptosi double %0 to i32
42   ret i32 %1
45 define i64 @d2ll() #0 {
46 entry:
47 ; CHECK: d2ll:
49 ; CHECK: call #__mspabi_fixdlli
50   %0 = load volatile double, double* @g_double, align 8
51   %1 = fptosi double %0 to i64
53   ret i64 %1
56 define i32 @d2ul() #0 {
57 entry:
58 ; CHECK: d2ul:
60 ; CHECK: call #__mspabi_fixdul
61   %0 = load volatile double, double* @g_double, align 8
62   %1 = fptoui double %0 to i32
64   ret i32 %1
67 define i64 @d2ull() #0 {
68 entry:
69 ; CHECK: d2ull:
71 ; CHECK: call #__mspabi_fixdull
72   %0 = load volatile double, double* @g_double, align 8
73   %1 = fptoui double %0 to i64
75   ret i64 %1
78 define i32 @f2l() #0 {
79 entry:
80 ; CHECK: f2l:
82 ; CHECK: call #__mspabi_fixfli
83   %0 = load volatile float, float* @g_float, align 8
84   %1 = fptosi float %0 to i32
86   ret i32 %1
89 define i64 @f2ll() #0 {
90 entry:
91 ; CHECK: f2ll:
93 ; CHECK: call #__mspabi_fixflli
94   %0 = load volatile float, float* @g_float, align 8
95   %1 = fptosi float %0 to i64
97   ret i64 %1
100 define i32 @f2ul() #0 {
101 entry:
102 ; CHECK: f2ul:
104 ; CHECK: call #__mspabi_fixful
105   %0 = load volatile float, float* @g_float, align 8
106   %1 = fptoui float %0 to i32
108   ret i32 %1
111 define i64 @f2ull() #0 {
112 entry:
113 ; CHECK: f2ull:
115 ; CHECK: call #__mspabi_fixfull
116   %0 = load volatile float, float* @g_float, align 8
117   %1 = fptoui float %0 to i64
119   ret i64 %1
122 define double @l2d() #0 {
123 entry:
124 ; CHECK: l2d:
126 ; CHECK: call #__mspabi_fltlid
127   %0 = load volatile i32, i32* @g_i32, align 8
128   %1 = sitofp i32 %0 to double
130   ret double %1
133 define double @ll2d() #0 {
134 entry:
135 ; CHECK: ll2d:
137 ; CHECK: call #__mspabi_fltllid
138   %0 = load volatile i64, i64* @g_i64, align 8
139   %1 = sitofp i64 %0 to double
141   ret double %1
144 define double @ul2d() #0 {
145 entry:
146 ; CHECK: ul2d:
148 ; CHECK: call #__mspabi_fltuld
149   %0 = load volatile i32, i32* @g_i32, align 8
150   %1 = uitofp i32 %0 to double
152   ret double %1
155 define double @ull2d() #0 {
156 entry:
157 ; CHECK: ull2d:
159 ; CHECK: call #__mspabi_fltulld
160   %0 = load volatile i64, i64* @g_i64, align 8
161   %1 = uitofp i64 %0 to double
163   ret double %1
166 define float @l2f() #0 {
167 entry:
168 ; CHECK: l2f:
170 ; CHECK: call #__mspabi_fltlif
171   %0 = load volatile i32, i32* @g_i32, align 8
172   %1 = sitofp i32 %0 to float
174   ret float %1
177 define float @ll2f() #0 {
178 entry:
179 ; CHECK: ll2f:
181 ; CHECK: call #__mspabi_fltllif
182   %0 = load volatile i64, i64* @g_i64, align 8
183   %1 = sitofp i64 %0 to float
185   ret float %1
188 define float @ul2f() #0 {
189 entry:
190 ; CHECK: ul2f:
192 ; CHECK: call #__mspabi_fltulf
193   %0 = load volatile i32, i32* @g_i32, align 8
194   %1 = uitofp i32 %0 to float
196   ret float %1
199 define float @ull2f() #0 {
200 entry:
201 ; CHECK: ull2f:
203 ; CHECK: call #__mspabi_fltullf
204   %0 = load volatile i64, i64* @g_i64, align 8
205   %1 = uitofp i64 %0 to float
207   ret float %1
210 define i1 @cmpd_oeq() #0 {
211 entry:
212 ; CHECK: cmpd_oeq:
214 ; CHECK: call #__mspabi_cmpd
215   %0 = load volatile double, double* @g_double, align 8
216   %1 = fcmp oeq double %0, 123.0
218   ret i1 %1
221 define i1 @cmpd_une() #0 {
222 entry:
223 ; CHECK: cmpd_une:
225 ; CHECK: call #__mspabi_cmpd
226   %0 = load volatile double, double* @g_double, align 8
227   %1 = fcmp une double %0, 123.0
229   ret i1 %1
232 define i1 @cmpd_oge() #0 {
233 entry:
234 ; CHECK: cmpd_oge:
236 ; CHECK: call #__mspabi_cmpd
237   %0 = load volatile double, double* @g_double, align 8
238   %1 = fcmp oge double %0, 123.0
240   ret i1 %1
243 define i1 @cmpd_olt() #0 {
244 entry:
245 ; CHECK: cmpd_olt:
247 ; CHECK: call #__mspabi_cmpd
248   %0 = load volatile double, double* @g_double, align 8
249   %1 = fcmp olt double %0, 123.0
251   ret i1 %1
254 define i1 @cmpd_ole() #0 {
255 entry:
256 ; CHECK: cmpd_ole:
258 ; CHECK: call #__mspabi_cmpd
259   %0 = load volatile double, double* @g_double, align 8
260   %1 = fcmp ole double %0, 123.0
262   ret i1 %1
265 define i1 @cmpd_ogt() #0 {
266 entry:
267 ; CHECK: cmpd_ogt:
269 ; CHECK: call #__mspabi_cmpd
270   %0 = load volatile double, double* @g_double, align 8
271   %1 = fcmp ogt double %0, 123.0
273   ret i1 %1
276 define i1 @cmpf_oeq() #0 {
277 entry:
278 ; CHECK: cmpf_oeq:
280 ; CHECK: call #__mspabi_cmpf
281   %0 = load volatile float, float* @g_float, align 8
282   %1 = fcmp oeq float %0, 123.0
284   ret i1 %1
287 define i1 @cmpf_une() #0 {
288 entry:
289 ; CHECK: cmpf_une:
291 ; CHECK: call #__mspabi_cmpf
292   %0 = load volatile float, float* @g_float, align 8
293   %1 = fcmp une float %0, 123.0
295   ret i1 %1
298 define i1 @cmpf_oge() #0 {
299 entry:
300 ; CHECK: cmpf_oge:
302 ; CHECK: call #__mspabi_cmpf
303   %0 = load volatile float, float* @g_float, align 8
304   %1 = fcmp oge float %0, 123.0
306   ret i1 %1
309 define i1 @cmpf_olt() #0 {
310 entry:
311 ; CHECK: cmpf_olt:
313 ; CHECK: call #__mspabi_cmpf
314   %0 = load volatile float, float* @g_float, align 8
315   %1 = fcmp olt float %0, 123.0
317   ret i1 %1
320 define i1 @cmpf_ole() #0 {
321 entry:
322 ; CHECK: cmpf_ole:
324 ; CHECK: call #__mspabi_cmpf
325   %0 = load volatile float, float* @g_float, align 8
326   %1 = fcmp ole float %0, 123.0
328   ret i1 %1
331 define i1 @cmpf_ogt() #0 {
332 entry:
333 ; CHECK: cmpf_ogt:
335 ; CHECK: call #__mspabi_cmpf
336   %0 = load volatile float, float* @g_float, align 8
337   %1 = fcmp ogt float %0, 123.0
339   ret i1 %1
342 define double @addd() #0 {
343 entry:
344 ; CHECK: addd:
346 ; CHECK: call #__mspabi_addd
347   %0 = load volatile double, double* @g_double, align 8
348   %1 = fadd double %0, 123.0
350   ret double %1
353 define float @addf() #0 {
354 entry:
355 ; CHECK: addf:
357 ; CHECK: call #__mspabi_addf
358   %0 = load volatile float, float* @g_float, align 8
359   %1 = fadd float %0, 123.0
361   ret float %1
364 define double @divd() #0 {
365 entry:
366 ; CHECK: divd:
368 ; CHECK: call #__mspabi_divd
369   %0 = load volatile double, double* @g_double, align 8
370   %1 = fdiv double %0, 123.0
372   ret double %1
375 define float @divf() #0 {
376 entry:
377 ; CHECK: divf:
379 ; CHECK: call #__mspabi_divf
380   %0 = load volatile float, float* @g_float, align 8
381   %1 = fdiv float %0, 123.0
383   ret float %1
386 define double @mpyd() #0 {
387 entry:
388 ; CHECK: mpyd:
390 ; CHECK: call #__mspabi_mpyd
391   %0 = load volatile double, double* @g_double, align 8
392   %1 = fmul double %0, 123.0
394   ret double %1
397 define float @mpyf() #0 {
398 entry:
399 ; CHECK: mpyf:
401 ; CHECK: call #__mspabi_mpyf
402   %0 = load volatile float, float* @g_float, align 8
403   %1 = fmul float %0, 123.0
405   ret float %1
408 define double @subd() #0 {
409 entry:
410 ; CHECK: subd:
412 ; CHECK: call #__mspabi_subd
413   %0 = load volatile double, double* @g_double, align 8
414   %1 = fsub double %0, %0
416   ret double %1
419 define float @subf() #0 {
420 entry:
421 ; CHECK: subf:
423 ; CHECK: call #__mspabi_subf
424   %0 = load volatile float, float* @g_float, align 8
425   %1 = fsub float %0, %0
427   ret float %1
430 define i16 @divi() #0 {
431 entry:
432 ; CHECK: divi:
434 ; CHECK: call #__mspabi_divi
435   %0 = load volatile i16, i16* @g_i16, align 8
436   %1 = load volatile i16, i16* @g_i16, align 8
437   %2 = sdiv i16 %0, %1
439   ret i16 %2
442 define i32 @divli() #0 {
443 entry:
444 ; CHECK: divli:
446 ; CHECK: call #__mspabi_divli
447   %0 = load volatile i32, i32* @g_i32, align 8
448   %1 = load volatile i32, i32* @g_i32, align 8
449   %2 = sdiv i32 %0, %1
451   ret i32 %2
454 define i64 @divlli() #0 {
455 entry:
456 ; CHECK: divlli:
458 ; CHECK: call #__mspabi_divlli
459   %0 = load volatile i64, i64* @g_i64, align 8
460   %1 = load volatile i64, i64* @g_i64, align 8
461   %2 = sdiv i64 %0, %1
463   ret i64 %2
466 define i16 @divu() #0 {
467 entry:
468 ; CHECK: divu:
470 ; CHECK: call #__mspabi_divu
471   %0 = load volatile i16, i16* @g_i16, align 8
472   %1 = load volatile i16, i16* @g_i16, align 8
473   %2 = udiv i16 %0, %1
475   ret i16 %2
478 define i32 @divul() #0 {
479 entry:
480 ; CHECK: divul:
482 ; CHECK: call #__mspabi_divul
483   %0 = load volatile i32, i32* @g_i32, align 8
484   %1 = load volatile i32, i32* @g_i32, align 8
485   %2 = udiv i32 %0, %1
487   ret i32 %2
490 define i64 @divull() #0 {
491 entry:
492 ; CHECK: divull:
494 ; CHECK: call #__mspabi_divull
495   %0 = load volatile i64, i64* @g_i64, align 8
496   %1 = load volatile i64, i64* @g_i64, align 8
497   %2 = udiv i64 %0, %1
499   ret i64 %2
502 define i16 @remi() #0 {
503 entry:
504 ; CHECK: remi:
506 ; CHECK: call #__mspabi_remi
507   %0 = load volatile i16, i16* @g_i16, align 8
508   %1 = load volatile i16, i16* @g_i16, align 8
509   %2 = srem i16 %0, %1
511   ret i16 %2
514 define i32 @remli() #0 {
515 entry:
516 ; CHECK: remli:
518 ; CHECK: call #__mspabi_remli
519   %0 = load volatile i32, i32* @g_i32, align 8
520   %1 = load volatile i32, i32* @g_i32, align 8
521   %2 = srem i32 %0, %1
523   ret i32 %2
526 define i64 @remlli() #0 {
527 entry:
528 ; CHECK: remlli:
530 ; CHECK: call #__mspabi_remlli
531   %0 = load volatile i64, i64* @g_i64, align 8
532   %1 = load volatile i64, i64* @g_i64, align 8
533   %2 = srem i64 %0, %1
535   ret i64 %2
538 define i16 @remu() #0 {
539 entry:
540 ; CHECK: remu:
542 ; CHECK: call #__mspabi_remu
543   %0 = load volatile i16, i16* @g_i16, align 8
544   %1 = load volatile i16, i16* @g_i16, align 8
545   %2 = urem i16 %0, %1
547   ret i16 %2
550 define i32 @remul() #0 {
551 entry:
552 ; CHECK: remul:
554 ; CHECK: call #__mspabi_remul
555   %0 = load volatile i32, i32* @g_i32, align 8
556   %1 = load volatile i32, i32* @g_i32, align 8
557   %2 = urem i32 %0, %1
559   ret i32 %2
562 define i64 @remull() #0 {
563 entry:
564 ; CHECK: remull:
566 ; CHECK: call #__mspabi_remull
567   %0 = load volatile i64, i64* @g_i64, align 8
568   %1 = load volatile i64, i64* @g_i64, align 8
569   %2 = urem i64 %0, %1
571   ret i64 %2
574 define i16 @mpyi() #0 {
575 entry:
576 ; CHECK: mpyi:
578 ; CHECK: call #__mspabi_mpyi
579   %0 = load volatile i16, i16* @g_i16, align 8
580   %1 = mul i16 %0, %0
582   ret i16 %1
585 define i32 @mpyli() #0 {
586 entry:
587 ; CHECK: mpyli:
589 ; CHECK: call #__mspabi_mpyl
590   %0 = load volatile i32, i32* @g_i32, align 8
591   %1 = mul i32 %0, %0
593   ret i32 %1
596 define i64 @mpylli() #0 {
597 entry:
598 ; CHECK: mpylli:
600 ; CHECK: call #__mspabi_mpyll
601   %0 = load volatile i64, i64* @g_i64, align 8
602   %1 = mul i64 %0, %0
604   ret i64 %1
607 @i = external global i32, align 2
609 define i32 @srll() #0 {
610 entry:
611 ; CHECK-LABEL: srll:
612 ; CHECK: call #__mspabi_srll
613   %0 = load volatile i32, i32* @g_i32, align 2
614   %1 = load volatile i32, i32* @i, align 2
615   %shr = lshr i32 %0, %1
617   ret i32 %shr
620 define i32 @sral() #0 {
621 entry:
622 ; CHECK-LABEL: sral:
623 ; CHECK: call #__mspabi_sral
624   %0 = load volatile i32, i32* @g_i32, align 2
625   %1 = load volatile i32, i32* @i, align 2
626   %shr = ashr i32 %0, %1
628   ret i32 %shr
631 define i32 @slll() #0 {
632 entry:
633 ; CHECK-LABEL: slll:
634 ; CHECK: call #__mspabi_slll
635   %0 = load volatile i32, i32* @g_i32, align 2
636   %1 = load volatile i32, i32* @i, align 2
637   %shr = shl i32 %0, %1
639   ret i32 %shr
642 attributes #0 = { nounwind }