xref: /llvm-project/llvm/test/CodeGen/ARM/fpconv.ll (revision 651bdb96b16d4e522f4611b60103234b1f890b24)
1; RUN: llc -mtriple=arm-eabi -mattr=+vfp2 %s -o - | FileCheck %s --check-prefix=CHECK-VFP
2; RUN: llc -mtriple=arm-apple-darwin %s -o - | FileCheck %s
3; RUN: llc -mtriple=armv8r-none-none-eabi -mattr=+neon,+fp-armv8 %s -o - | FileCheck %s --check-prefix=CHECK-VFP
4; RUN: llc -mtriple=armv8r-none-none-eabi %s -o - | FileCheck %s --check-prefix=CHECK-VFP-SP
5
6define float @f1(double %x) {
7;CHECK-VFP-LABEL: f1:
8;CHECK-VFP: vcvt.f32.f64
9;CHECK-VFP-SP-LABEL: f1:
10;CHECK-VFP-SP: bl __aeabi_d2f
11;CHECK-LABEL: f1:
12;CHECK: truncdfsf2
13entry:
14	%tmp1 = fptrunc double %x to float		; <float> [#uses=1]
15	ret float %tmp1
16}
17
18define double @f2(float %x) {
19;CHECK-VFP-LABEL: f2:
20;CHECK-VFP: vcvt.f64.f32
21;CHECK-VFP-SP-LABEL: f2:
22;CHECK-VFP-SP: bl __aeabi_f2d
23;CHECK-LABEL: f2:
24;CHECK: extendsfdf2
25entry:
26	%tmp1 = fpext float %x to double		; <double> [#uses=1]
27	ret double %tmp1
28}
29
30define i32 @f3(float %x) {
31;CHECK-VFP-LABEL: f3:
32;CHECK-VFP: vcvt.s32.f32
33;CHECK-VFP-SP-LABEL: f3:
34;CHECK-VFP-SP: vcvt.s32.f32
35;CHECK-LABEL: f3:
36;CHECK: fixsfsi
37entry:
38	%tmp = fptosi float %x to i32		; <i32> [#uses=1]
39	ret i32 %tmp
40}
41
42define i32 @f4(float %x) {
43;CHECK-VFP-LABEL: f4:
44;CHECK-VFP: vcvt.u32.f32
45;CHECK-VFP-SP-LABEL: f4:
46;CHECK-VFP-SP: vcvt.u32.f32
47;CHECK-LABEL: f4:
48;CHECK: fixunssfsi
49entry:
50	%tmp = fptoui float %x to i32		; <i32> [#uses=1]
51	ret i32 %tmp
52}
53
54define i32 @f5(double %x) {
55;CHECK-VFP-LABEL: f5:
56;CHECK-VFP: vcvt.s32.f64
57;CHECK-VFP-SP-LABEL: f5:
58;CHECK-VFP-SP: bl __aeabi_d2iz
59;CHECK-LABEL: f5:
60;CHECK: fixdfsi
61entry:
62	%tmp = fptosi double %x to i32		; <i32> [#uses=1]
63	ret i32 %tmp
64}
65
66define i32 @f6(double %x) {
67;CHECK-VFP-LABEL: f6:
68;CHECK-VFP: vcvt.u32.f64
69;CHECK-VFP-SP-LABEL: f6:
70;CHECK-VFP-SP: bl __aeabi_d2uiz
71;CHECK-LABEL: f6:
72;CHECK: fixunsdfsi
73entry:
74	%tmp = fptoui double %x to i32		; <i32> [#uses=1]
75	ret i32 %tmp
76}
77
78define float @f7(i32 %a) {
79;CHECK-VFP-LABEL: f7:
80;CHECK-VFP: vcvt.f32.s32
81;CHECK-VFP-SP-LABEL: f7:
82;CHECK-VFP-SP: vcvt.f32.s32
83;CHECK-LABEL: f7:
84;CHECK: floatsisf
85entry:
86	%tmp = sitofp i32 %a to float		; <float> [#uses=1]
87	ret float %tmp
88}
89
90define double @f8(i32 %a) {
91;CHECK-VFP-LABEL: f8:
92;CHECK-VFP: vcvt.f64.s32
93;CHECK-VFP-SP-LABEL: f8:
94;CHECK-VFP-SP: bl __aeabi_i2d
95;CHECK-LABEL: f8:
96;CHECK: floatsidf
97entry:
98	%tmp = sitofp i32 %a to double		; <double> [#uses=1]
99	ret double %tmp
100}
101
102define float @f9(i32 %a) {
103;CHECK-VFP-LABEL: f9:
104;CHECK-VFP: vcvt.f32.u32
105;CHECK-VFP-SP-LABEL: f9:
106;CHECK-VFP-SP: vcvt.f32.u32
107;CHECK-LABEL: f9:
108;CHECK: floatunsisf
109entry:
110	%tmp = uitofp i32 %a to float		; <float> [#uses=1]
111	ret float %tmp
112}
113
114define double @f10(i32 %a) {
115;CHECK-VFP-LABEL: f10:
116;CHECK-VFP: vcvt.f64.u32
117;CHECK-VFP-SP-LABEL: f10:
118;CHECK-VFP-SP: bl __aeabi_ui2d
119;CHECK-LABEL: f10:
120;CHECK: floatunsidf
121entry:
122	%tmp = uitofp i32 %a to double		; <double> [#uses=1]
123	ret double %tmp
124}
125