Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / NVPTX / convert-fp.ll
blobd46c8d1afd775e0e2508346a2b350bf563af6924
1 ; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
2 ; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 | FileCheck %s
3 ; RUN: %if ptxas && !ptxas-12.0 %{ llc < %s -march=nvptx -mcpu=sm_20 | %ptxas-verify %}
4 ; RUN: %if ptxas %{ llc < %s -march=nvptx64 -mcpu=sm_20 | %ptxas-verify %}
6 define i16 @cvt_u16_f32(float %x) {
7 ; CHECK: cvt.rzi.u16.f32 %rs{{[0-9]+}}, %f{{[0-9]+}};
8 ; CHECK: ret;
9   %a = fptoui float %x to i16
10   ret i16 %a
12 define i16 @cvt_u16_f64(double %x) {
13 ; CHECK: cvt.rzi.u16.f64 %rs{{[0-9]+}}, %fd{{[0-9]+}};
14 ; CHECK: ret;
15   %a = fptoui double %x to i16
16   ret i16 %a
18 define i32 @cvt_u32_f32(float %x) {
19 ; CHECK: cvt.rzi.u32.f32 %r{{[0-9]+}}, %f{{[0-9]+}};
20 ; CHECK: ret;
21   %a = fptoui float %x to i32
22   ret i32 %a
24 define i32 @cvt_u32_f64(double %x) {
25 ; CHECK: cvt.rzi.u32.f64 %r{{[0-9]+}}, %fd{{[0-9]+}};
26 ; CHECK: ret;
27   %a = fptoui double %x to i32
28   ret i32 %a
30 define i64 @cvt_u64_f32(float %x) {
31 ; CHECK: cvt.rzi.u64.f32 %rd{{[0-9]+}}, %f{{[0-9]+}};
32 ; CHECK: ret;
33   %a = fptoui float %x to i64
34   ret i64 %a
36 define i64 @cvt_u64_f64(double %x) {
37 ; CHECK: cvt.rzi.u64.f64 %rd{{[0-9]+}}, %fd{{[0-9]+}};
38 ; CHECK: ret;
39   %a = fptoui double %x to i64
40   ret i64 %a
43 define float @cvt_f32_i16(i16 %x) {
44 ; CHECK: cvt.rn.f32.u16 %f{{[0-9]+}}, %rs{{[0-9]+}};
45 ; CHECK: ret;
46   %a = uitofp i16 %x to float
47   ret float %a
49 define float @cvt_f32_i32(i32 %x) {
50 ; CHECK: cvt.rn.f32.u32 %f{{[0-9]+}}, %r{{[0-9]+}};
51 ; CHECK: ret;
52   %a = uitofp i32 %x to float
53   ret float %a
55 define float @cvt_f32_i64(i64 %x) {
56 ; CHECK: cvt.rn.f32.u64 %f{{[0-9]+}}, %rd{{[0-9]+}};
57 ; CHECK: ret;
58   %a = uitofp i64 %x to float
59   ret float %a
61 define double @cvt_f64_i16(i16 %x) {
62 ; CHECK: cvt.rn.f64.u16 %fd{{[0-9]+}}, %rs{{[0-9]+}};
63 ; CHECK: ret;
64   %a = uitofp i16 %x to double
65   ret double %a
67 define double @cvt_f64_i32(i32 %x) {
68 ; CHECK: cvt.rn.f64.u32 %fd{{[0-9]+}}, %r{{[0-9]+}};
69 ; CHECK: ret;
70   %a = uitofp i32 %x to double
71   ret double %a
73 define double @cvt_f64_i64(i64 %x) {
74 ; CHECK: cvt.rn.f64.u64 %fd{{[0-9]+}}, %rd{{[0-9]+}};
75 ; CHECK: ret;
76   %a = uitofp i64 %x to double
77   ret double %a
80 define float @cvt_f32_f64(double %x) {
81 ; CHECK: cvt.rn.f32.f64 %f{{[0-9]+}}, %fd{{[0-9]+}};
82 ; CHECK: ret;
83   %a = fptrunc double %x to float
84   ret float %a
86 define double @cvt_f64_f32(float %x) {
87 ; CHECK: cvt.f64.f32 %fd{{[0-9]+}}, %f{{[0-9]+}};
88 ; CHECK: ret;
89   %a = fpext float %x to double
90   ret double %a
93 define float @cvt_f32_s16(i16 %x) {
94 ; CHECK: cvt.rn.f32.s16 %f{{[0-9]+}}, %rs{{[0-9]+}}
95 ; CHECK: ret
96   %a = sitofp i16 %x to float
97   ret float %a
99 define float @cvt_f32_s32(i32 %x) {
100 ; CHECK: cvt.rn.f32.s32 %f{{[0-9]+}}, %r{{[0-9]+}}
101 ; CHECK: ret
102   %a = sitofp i32 %x to float
103   ret float %a
105 define float @cvt_f32_s64(i64 %x) {
106 ; CHECK: cvt.rn.f32.s64 %f{{[0-9]+}}, %rd{{[0-9]+}}
107 ; CHECK: ret
108   %a = sitofp i64 %x to float
109   ret float %a
111 define double @cvt_f64_s16(i16 %x) {
112 ; CHECK: cvt.rn.f64.s16 %fd{{[0-9]+}}, %rs{{[0-9]+}}
113 ; CHECK: ret
114   %a = sitofp i16 %x to double
115   ret double %a
117 define double @cvt_f64_s32(i32 %x) {
118 ; CHECK: cvt.rn.f64.s32 %fd{{[0-9]+}}, %r{{[0-9]+}}
119 ; CHECK: ret
120   %a = sitofp i32 %x to double
121   ret double %a
123 define double @cvt_f64_s64(i64 %x) {
124 ; CHECK: cvt.rn.f64.s64 %fd{{[0-9]+}}, %rd{{[0-9]+}}
125 ; CHECK: ret
126   %a = sitofp i64 %x to double
127   ret double %a
130 define i16 @cvt_s16_f32(float %x) {
131 ; CHECK: cvt.rzi.s16.f32 %rs{{[0-9]+}}, %f{{[0-9]+}};
132 ; CHECK: ret;
133   %a = fptosi float %x to i16
134   ret i16 %a
136 define i16 @cvt_s16_f64(double %x) {
137 ; CHECK: cvt.rzi.s16.f64 %rs{{[0-9]+}}, %fd{{[0-9]+}};
138 ; CHECK: ret;
139   %a = fptosi double %x to i16
140   ret i16 %a
142 define i32 @cvt_s32_f32(float %x) {
143 ; CHECK: cvt.rzi.s32.f32 %r{{[0-9]+}}, %f{{[0-9]+}};
144 ; CHECK: ret;
145   %a = fptosi float %x to i32
146   ret i32 %a
148 define i32 @cvt_s32_f64(double %x) {
149 ; CHECK: cvt.rzi.s32.f64 %r{{[0-9]+}}, %fd{{[0-9]+}};
150 ; CHECK: ret;
151   %a = fptosi double %x to i32
152   ret i32 %a
154 define i64 @cvt_s64_f32(float %x) {
155 ; CHECK: cvt.rzi.s64.f32 %rd{{[0-9]+}}, %f{{[0-9]+}};
156 ; CHECK: ret;
157   %a = fptosi float %x to i64
158   ret i64 %a
160 define i64 @cvt_s64_f64(double %x) {
161 ; CHECK: cvt.rzi.s64.f64 %rd{{[0-9]+}}, %fd{{[0-9]+}};
162 ; CHECK: ret;
163   %a = fptosi double %x to i64
164   ret i64 %a