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