xref: /llvm-project/llvm/test/CodeGen/NVPTX/convert-sm89.ll (revision 7e2eb0f83e1cf6861c8fd1f038a88a8ddd851c34)
1; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_89 -mattr=+ptx81 | FileCheck %s
2; RUN: %if ptxas-12.1 %{ llc < %s -mtriple=nvptx64 -mcpu=sm_89 -mattr=+ptx81 | %ptxas-verify -arch=sm_89 %}
3
4; CHECK-LABEL: cvt_rn_e4m3x2_f32
5define i16 @cvt_rn_e4m3x2_f32(float %f1, float %f2) {
6; CHECK: cvt.rn.satfinite.e4m3x2.f32
7  %val = call i16 @llvm.nvvm.ff.to.e4m3x2.rn(float %f1, float %f2);
8  ret i16 %val
9}
10
11; CHECK-LABEL: cvt_rn_relu_e4m3x2_f32
12define i16 @cvt_rn_relu_e4m3x2_f32(float %f1, float %f2) {
13; CHECK: cvt.rn.satfinite.relu.e4m3x2.f32
14  %val = call i16 @llvm.nvvm.ff.to.e4m3x2.rn.relu(float %f1, float %f2);
15  ret i16 %val
16}
17
18; CHECK-LABEL: cvt_rn_e5m2x2_f32
19define i16 @cvt_rn_e5m2x2_f32(float %f1, float %f2) {
20; CHECK: cvt.rn.satfinite.e5m2x2.f32
21  %val = call i16 @llvm.nvvm.ff.to.e5m2x2.rn(float %f1, float %f2);
22  ret i16 %val
23}
24
25; CHECK-LABEL: cvt_rn_relu_e5m2x2_f32
26define i16 @cvt_rn_relu_e5m2x2_f32(float %f1, float %f2) {
27; CHECK: cvt.rn.satfinite.relu.e5m2x2.f32
28  %val = call i16 @llvm.nvvm.ff.to.e5m2x2.rn.relu(float %f1, float %f2);
29  ret i16 %val
30}
31
32; CHECK-LABEL: cvt_rn_e4m3x2_f16x2
33define i16 @cvt_rn_e4m3x2_f16x2(<2 x half> %in) {
34; CHECK: cvt.rn.satfinite.e4m3x2.f16x2
35  %val = call i16 @llvm.nvvm.f16x2.to.e4m3x2.rn(<2 x half> %in);
36  ret i16 %val
37}
38
39; CHECK-LABEL: cvt_rn_relu_e4m3x2_f16x2
40define i16 @cvt_rn_relu_e4m3x2_f16x2(<2 x half> %in) {
41; CHECK: cvt.rn.satfinite.relu.e4m3x2.f16x2
42  %val = call i16 @llvm.nvvm.f16x2.to.e4m3x2.rn.relu(<2 x half> %in);
43  ret i16 %val
44}
45
46; CHECK-LABEL: cvt_rn_e5m2x2_f16x2
47define i16 @cvt_rn_e5m2x2_f16x2(<2 x half> %in) {
48; CHECK: cvt.rn.satfinite.e5m2x2.f16x2
49  %val = call i16 @llvm.nvvm.f16x2.to.e5m2x2.rn(<2 x half> %in);
50  ret i16 %val
51}
52
53; CHECK-LABEL: cvt_rn_relu_e5m2x2_f16x2
54define i16 @cvt_rn_relu_e5m2x2_f16x2(<2 x half> %in) {
55; CHECK: cvt.rn.satfinite.relu.e5m2x2.f16x2
56  %val = call i16 @llvm.nvvm.f16x2.to.e5m2x2.rn.relu(<2 x half> %in);
57  ret i16 %val
58}
59
60; CHECK-LABEL: cvt_rn_f16x2_e4m3x2
61define <2 x half> @cvt_rn_f16x2_e4m3x2(i16 %in) {
62; CHECK: cvt.rn.f16x2.e4m3x2
63  %val = call <2 x half> @llvm.nvvm.e4m3x2.to.f16x2.rn(i16 %in);
64  ret <2 x half> %val
65}
66
67; CHECK-LABEL: cvt_rn_relu_f16x2_e4m3x2
68define <2 x half> @cvt_rn_relu_f16x2_e4m3x2(i16 %in) {
69; CHECK: cvt.rn.relu.f16x2.e4m3x2
70  %val = call <2 x half> @llvm.nvvm.e4m3x2.to.f16x2.rn.relu(i16 %in);
71  ret <2 x half> %val
72}
73
74; CHECK-LABEL: cvt_rn_f16x2_e5m2x2
75define <2 x half> @cvt_rn_f16x2_e5m2x2(i16 %in) {
76; CHECK: cvt.rn.f16x2.e5m2x2
77  %val = call <2 x half> @llvm.nvvm.e5m2x2.to.f16x2.rn(i16 %in);
78  ret <2 x half> %val
79}
80
81; CHECK-LABEL: cvt_rn_relu_f16x2_e5m2x2
82define <2 x half> @cvt_rn_relu_f16x2_e5m2x2(i16 %in) {
83; CHECK: cvt.rn.relu.f16x2.e5m2x2
84  %val = call <2 x half> @llvm.nvvm.e5m2x2.to.f16x2.rn.relu(i16 %in);
85  ret <2 x half> %val
86}
87
88; CHECK-LABEL: cvt_rna_satfinite_tf32_f32
89define i32 @cvt_rna_satfinite_tf32_f32(float %f1) {
90; CHECK: cvt.rna.satfinite.tf32.f32
91  %val = call i32 @llvm.nvvm.f2tf32.rna.satfinite(float %f1)
92  ret i32 %val
93}
94