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]+}};
9 %a = fptoui float %x to i16
12 define i16 @cvt_u16_f64(double %x) {
13 ; CHECK: cvt.rzi.u16.f64 %rs{{[0-9]+}}, %fd{{[0-9]+}};
15 %a = fptoui double %x to i16
18 define i32 @cvt_u32_f32(float %x) {
19 ; CHECK: cvt.rzi.u32.f32 %r{{[0-9]+}}, %f{{[0-9]+}};
21 %a = fptoui float %x to i32
24 define i32 @cvt_u32_f64(double %x) {
25 ; CHECK: cvt.rzi.u32.f64 %r{{[0-9]+}}, %fd{{[0-9]+}};
27 %a = fptoui double %x to i32
30 define i64 @cvt_u64_f32(float %x) {
31 ; CHECK: cvt.rzi.u64.f32 %rd{{[0-9]+}}, %f{{[0-9]+}};
33 %a = fptoui float %x to i64
36 define i64 @cvt_u64_f64(double %x) {
37 ; CHECK: cvt.rzi.u64.f64 %rd{{[0-9]+}}, %fd{{[0-9]+}};
39 %a = fptoui double %x to i64
43 define float @cvt_f32_i16(i16 %x) {
44 ; CHECK: cvt.rn.f32.u16 %f{{[0-9]+}}, %rs{{[0-9]+}};
46 %a = uitofp i16 %x to float
49 define float @cvt_f32_i32(i32 %x) {
50 ; CHECK: cvt.rn.f32.u32 %f{{[0-9]+}}, %r{{[0-9]+}};
52 %a = uitofp i32 %x to float
55 define float @cvt_f32_i64(i64 %x) {
56 ; CHECK: cvt.rn.f32.u64 %f{{[0-9]+}}, %rd{{[0-9]+}};
58 %a = uitofp i64 %x to float
61 define double @cvt_f64_i16(i16 %x) {
62 ; CHECK: cvt.rn.f64.u16 %fd{{[0-9]+}}, %rs{{[0-9]+}};
64 %a = uitofp i16 %x to double
67 define double @cvt_f64_i32(i32 %x) {
68 ; CHECK: cvt.rn.f64.u32 %fd{{[0-9]+}}, %r{{[0-9]+}};
70 %a = uitofp i32 %x to double
73 define double @cvt_f64_i64(i64 %x) {
74 ; CHECK: cvt.rn.f64.u64 %fd{{[0-9]+}}, %rd{{[0-9]+}};
76 %a = uitofp i64 %x to double
80 define float @cvt_f32_f64(double %x) {
81 ; CHECK: cvt.rn.f32.f64 %f{{[0-9]+}}, %fd{{[0-9]+}};
83 %a = fptrunc double %x to float
86 define double @cvt_f64_f32(float %x) {
87 ; CHECK: cvt.f64.f32 %fd{{[0-9]+}}, %f{{[0-9]+}};
89 %a = fpext float %x to double
93 define float @cvt_f32_s16(i16 %x) {
94 ; CHECK: cvt.rn.f32.s16 %f{{[0-9]+}}, %rs{{[0-9]+}}
96 %a = sitofp i16 %x to float
99 define float @cvt_f32_s32(i32 %x) {
100 ; CHECK: cvt.rn.f32.s32 %f{{[0-9]+}}, %r{{[0-9]+}}
102 %a = sitofp i32 %x to float
105 define float @cvt_f32_s64(i64 %x) {
106 ; CHECK: cvt.rn.f32.s64 %f{{[0-9]+}}, %rd{{[0-9]+}}
108 %a = sitofp i64 %x to float
111 define double @cvt_f64_s16(i16 %x) {
112 ; CHECK: cvt.rn.f64.s16 %fd{{[0-9]+}}, %rs{{[0-9]+}}
114 %a = sitofp i16 %x to double
117 define double @cvt_f64_s32(i32 %x) {
118 ; CHECK: cvt.rn.f64.s32 %fd{{[0-9]+}}, %r{{[0-9]+}}
120 %a = sitofp i32 %x to double
123 define double @cvt_f64_s64(i64 %x) {
124 ; CHECK: cvt.rn.f64.s64 %fd{{[0-9]+}}, %rd{{[0-9]+}}
126 %a = sitofp i64 %x to double
130 define i16 @cvt_s16_f32(float %x) {
131 ; CHECK: cvt.rzi.s16.f32 %rs{{[0-9]+}}, %f{{[0-9]+}};
133 %a = fptosi float %x to i16
136 define i16 @cvt_s16_f64(double %x) {
137 ; CHECK: cvt.rzi.s16.f64 %rs{{[0-9]+}}, %fd{{[0-9]+}};
139 %a = fptosi double %x to i16
142 define i32 @cvt_s32_f32(float %x) {
143 ; CHECK: cvt.rzi.s32.f32 %r{{[0-9]+}}, %f{{[0-9]+}};
145 %a = fptosi float %x to i32
148 define i32 @cvt_s32_f64(double %x) {
149 ; CHECK: cvt.rzi.s32.f64 %r{{[0-9]+}}, %fd{{[0-9]+}};
151 %a = fptosi double %x to i32
154 define i64 @cvt_s64_f32(float %x) {
155 ; CHECK: cvt.rzi.s64.f32 %rd{{[0-9]+}}, %f{{[0-9]+}};
157 %a = fptosi float %x to i64
160 define i64 @cvt_s64_f64(double %x) {
161 ; CHECK: cvt.rzi.s64.f64 %rd{{[0-9]+}}, %fd{{[0-9]+}};
163 %a = fptosi double %x to i64