; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 ; RUN: opt < %s -passes=instsimplify -march=nvptx64 -S | FileCheck %s ; Test constant-folding for various NVVM unary arithmetic intrinsics. ;############################################################### ;# Ceil # ;############################################################### define double @test_ceil_d_1_25() { ; CHECK-LABEL: define double @test_ceil_d_1_25() { ; CHECK-NEXT: ret double 2.000000e+00 ; %res = call double @llvm.nvvm.ceil.d(double 1.25) ret double %res } define float @test_ceil_f_1_25() { ; CHECK-LABEL: define float @test_ceil_f_1_25() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.ceil.f(float 1.25) ret float %res } define float @test_ceil_ftz_f_1_25() { ; CHECK-LABEL: define float @test_ceil_ftz_f_1_25() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.ceil.ftz.f(float 1.25) ret float %res } define double @test_ceil_d_pos_subnorm() { ; CHECK-LABEL: define double @test_ceil_d_pos_subnorm() { ; CHECK-NEXT: ret double 1.000000e+00 ; %res = call double @llvm.nvvm.ceil.d(double 0x380FFFFFC0000000) ret double %res } define float @test_ceil_f_pos_subnorm() { ; CHECK-LABEL: define float @test_ceil_f_pos_subnorm() { ; CHECK-NEXT: ret float 1.000000e+00 ; %res = call float @llvm.nvvm.ceil.f(float 0x380FFFFFC0000000) ret float %res } define float @test_ceil_ftz_f_pos_subnorm() { ; CHECK-LABEL: define float @test_ceil_ftz_f_pos_subnorm() { ; CHECK-NEXT: ret float 0.000000e+00 ; %res = call float @llvm.nvvm.ceil.ftz.f(float 0x380FFFFFC0000000) ret float %res } ;############################################################### ;# FAbs # ;############################################################### define float @test_fabs_neg_1_5() { ; CHECK-LABEL: define float @test_fabs_neg_1_5() { ; CHECK-NEXT: ret float 1.500000e+00 ; %res = call float @llvm.nvvm.fabs(float -1.5) ret float %res } define float @test_fabs_ftz_neg_1_5() { ; CHECK-LABEL: define float @test_fabs_ftz_neg_1_5() { ; CHECK-NEXT: ret float 1.500000e+00 ; %res = call float @llvm.nvvm.fabs.ftz(float -1.5) ret float %res } define float @test_fabs_1_25() { ; CHECK-LABEL: define float @test_fabs_1_25() { ; CHECK-NEXT: ret float 1.250000e+00 ; %res = call float @llvm.nvvm.fabs(float 1.25) ret float %res } define float @test_fabs_ftz_1_25() { ; CHECK-LABEL: define float @test_fabs_ftz_1_25() { ; CHECK-NEXT: ret float 1.250000e+00 ; %res = call float @llvm.nvvm.fabs.ftz(float 1.25) ret float %res } define float @test_fabs_neg_subnorm() { ; CHECK-LABEL: define float @test_fabs_neg_subnorm() { ; CHECK-NEXT: ret float 0x380FFFFFC0000000 ; %res = call float @llvm.nvvm.fabs(float 0xB80FFFFFC0000000) ret float %res } define float @test_fabs_ftz_neg_subnorm() { ; CHECK-LABEL: define float @test_fabs_ftz_neg_subnorm() { ; CHECK-NEXT: ret float 0.000000e+00 ; %res = call float @llvm.nvvm.fabs.ftz(float 0xB80FFFFFC0000000) ret float %res } define float @test_fabs_pos_subnorm() { ; CHECK-LABEL: define float @test_fabs_pos_subnorm() { ; CHECK-NEXT: ret float 0x380FFFFFC0000000 ; %res = call float @llvm.nvvm.fabs(float 0x380FFFFFC0000000) ret float %res } define float @test_fabs_ftz_pos_subnorm() { ; CHECK-LABEL: define float @test_fabs_ftz_pos_subnorm() { ; CHECK-NEXT: ret float 0.000000e+00 ; %res = call float @llvm.nvvm.fabs.ftz(float 0x380FFFFFC0000000) ret float %res } ;############################################################### ;# Floor # ;############################################################### define double @test_floor_d_1_25() { ; CHECK-LABEL: define double @test_floor_d_1_25() { ; CHECK-NEXT: ret double 1.000000e+00 ; %res = call double @llvm.nvvm.floor.d(double 1.25) ret double %res } define float @test_floor_f_1_25() { ; CHECK-LABEL: define float @test_floor_f_1_25() { ; CHECK-NEXT: ret float 1.000000e+00 ; %res = call float @llvm.nvvm.floor.f(float 1.25) ret float %res } define float @test_floor_ftz_f_1_25() { ; CHECK-LABEL: define float @test_floor_ftz_f_1_25() { ; CHECK-NEXT: ret float 1.000000e+00 ; %res = call float @llvm.nvvm.floor.ftz.f(float 1.25) ret float %res } define double @test_floor_d_neg_subnorm() { ; CHECK-LABEL: define double @test_floor_d_neg_subnorm() { ; CHECK-NEXT: ret double -1.000000e+00 ; %res = call double @llvm.nvvm.floor.d(double 0xB80FFFFFC0000000) ret double %res } define float @test_floor_f_neg_subnorm() { ; CHECK-LABEL: define float @test_floor_f_neg_subnorm() { ; CHECK-NEXT: ret float -1.000000e+00 ; %res = call float @llvm.nvvm.floor.f(float 0xB80FFFFFC0000000) ret float %res } define float @test_floor_ftz_f_neg_subnorm() { ; CHECK-LABEL: define float @test_floor_ftz_f_neg_subnorm() { ; CHECK-NEXT: ret float -0.000000e+00 ; %res = call float @llvm.nvvm.floor.ftz.f(float 0xB80FFFFFC0000000) ret float %res } ;############################################################### ;# Rcp # ;############################################################### ;+-------------------------------------------------------------+ ;| rcp_rm | ;+-------------------------------------------------------------+ define double @test_rcp_rm_d_0_5() { ; CHECK-LABEL: define double @test_rcp_rm_d_0_5() { ; CHECK-NEXT: ret double 2.000000e+00 ; %res = call double @llvm.nvvm.rcp.rm.d(double 0.5) ret double %res } define float @test_rcp_rm_f_0_5() { ; CHECK-LABEL: define float @test_rcp_rm_f_0_5() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.rcp.rm.f(float 0.5) ret float %res } define float @test_rcp_rm_ftz_f_0_5() { ; CHECK-LABEL: define float @test_rcp_rm_ftz_f_0_5() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.rcp.rm.ftz.f(float 0.5) ret float %res } define double @test_rcp_rm_d_neg_subnorm() { ; CHECK-LABEL: define double @test_rcp_rm_d_neg_subnorm() { ; CHECK-NEXT: ret double 0xC7D0000020000041 ; %res = call double @llvm.nvvm.rcp.rm.d(double 0xB80FFFFFC0000000) ret double %res } define float @test_rcp_rm_f_neg_subnorm() { ; CHECK-LABEL: define float @test_rcp_rm_f_neg_subnorm() { ; CHECK-NEXT: ret float 0xC7D0000040000000 ; %res = call float @llvm.nvvm.rcp.rm.f(float 0xB80FFFFFC0000000) ret float %res } define float @test_rcp_rm_ftz_f_neg_subnorm() { ; CHECK-LABEL: define float @test_rcp_rm_ftz_f_neg_subnorm() { ; CHECK-NEXT: [[RES:%.*]] = call float @llvm.nvvm.rcp.rm.ftz.f(float 0xB80FFFFFC0000000) ; CHECK-NEXT: ret float [[RES]] ; %res = call float @llvm.nvvm.rcp.rm.ftz.f(float 0xB80FFFFFC0000000) ret float %res } ;+-------------------------------------------------------------+ ;| rcp_rn | ;+-------------------------------------------------------------+ define double @test_rcp_rn_d_0_5() { ; CHECK-LABEL: define double @test_rcp_rn_d_0_5() { ; CHECK-NEXT: ret double 2.000000e+00 ; %res = call double @llvm.nvvm.rcp.rn.d(double 0.5) ret double %res } define float @test_rcp_rn_f_0_5() { ; CHECK-LABEL: define float @test_rcp_rn_f_0_5() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.rcp.rn.f(float 0.5) ret float %res } define float @test_rcp_rn_ftz_f_0_5() { ; CHECK-LABEL: define float @test_rcp_rn_ftz_f_0_5() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.rcp.rn.ftz.f(float 0.5) ret float %res } define double @test_rcp_rn_d_neg_subnorm() { ; CHECK-LABEL: define double @test_rcp_rn_d_neg_subnorm() { ; CHECK-NEXT: ret double 0xC7D0000020000040 ; %res = call double @llvm.nvvm.rcp.rn.d(double 0xB80FFFFFC0000000) ret double %res } define float @test_rcp_rn_f_neg_subnorm() { ; CHECK-LABEL: define float @test_rcp_rn_f_neg_subnorm() { ; CHECK-NEXT: ret float 0xC7D0000020000000 ; %res = call float @llvm.nvvm.rcp.rn.f(float 0xB80FFFFFC0000000) ret float %res } define float @test_rcp_rn_ftz_f_neg_subnorm() { ; CHECK-LABEL: define float @test_rcp_rn_ftz_f_neg_subnorm() { ; CHECK-NEXT: [[RES:%.*]] = call float @llvm.nvvm.rcp.rn.ftz.f(float 0xB80FFFFFC0000000) ; CHECK-NEXT: ret float [[RES]] ; %res = call float @llvm.nvvm.rcp.rn.ftz.f(float 0xB80FFFFFC0000000) ret float %res } ;+-------------------------------------------------------------+ ;| rcp_rp | ;+-------------------------------------------------------------+ define double @test_rcp_rp_d_0_5() { ; CHECK-LABEL: define double @test_rcp_rp_d_0_5() { ; CHECK-NEXT: ret double 2.000000e+00 ; %res = call double @llvm.nvvm.rcp.rp.d(double 0.5) ret double %res } define float @test_rcp_rp_f_0_5() { ; CHECK-LABEL: define float @test_rcp_rp_f_0_5() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.rcp.rp.f(float 0.5) ret float %res } define float @test_rcp_rp_ftz_f_0_5() { ; CHECK-LABEL: define float @test_rcp_rp_ftz_f_0_5() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.rcp.rp.ftz.f(float 0.5) ret float %res } define double @test_rcp_rp_d_neg_subnorm() { ; CHECK-LABEL: define double @test_rcp_rp_d_neg_subnorm() { ; CHECK-NEXT: ret double 0xC7D0000020000040 ; %res = call double @llvm.nvvm.rcp.rp.d(double 0xB80FFFFFC0000000) ret double %res } define float @test_rcp_rp_f_neg_subnorm() { ; CHECK-LABEL: define float @test_rcp_rp_f_neg_subnorm() { ; CHECK-NEXT: ret float 0xC7D0000020000000 ; %res = call float @llvm.nvvm.rcp.rp.f(float 0xB80FFFFFC0000000) ret float %res } define float @test_rcp_rp_ftz_f_neg_subnorm() { ; CHECK-LABEL: define float @test_rcp_rp_ftz_f_neg_subnorm() { ; CHECK-NEXT: [[RES:%.*]] = call float @llvm.nvvm.rcp.rp.ftz.f(float 0xB80FFFFFC0000000) ; CHECK-NEXT: ret float [[RES]] ; %res = call float @llvm.nvvm.rcp.rp.ftz.f(float 0xB80FFFFFC0000000) ret float %res } ;+-------------------------------------------------------------+ ;| rcp_rz | ;+-------------------------------------------------------------+ define double @test_rcp_rz_d_0_5() { ; CHECK-LABEL: define double @test_rcp_rz_d_0_5() { ; CHECK-NEXT: ret double 2.000000e+00 ; %res = call double @llvm.nvvm.rcp.rz.d(double 0.5) ret double %res } define float @test_rcp_rz_f_0_5() { ; CHECK-LABEL: define float @test_rcp_rz_f_0_5() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.rcp.rz.f(float 0.5) ret float %res } define float @test_rcp_rz_ftz_f_0_5() { ; CHECK-LABEL: define float @test_rcp_rz_ftz_f_0_5() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.rcp.rz.ftz.f(float 0.5) ret float %res } define double @test_rcp_rz_d_neg_subnorm() { ; CHECK-LABEL: define double @test_rcp_rz_d_neg_subnorm() { ; CHECK-NEXT: ret double 0xC7D0000020000040 ; %res = call double @llvm.nvvm.rcp.rz.d(double 0xB80FFFFFC0000000) ret double %res } define float @test_rcp_rz_f_neg_subnorm() { ; CHECK-LABEL: define float @test_rcp_rz_f_neg_subnorm() { ; CHECK-NEXT: ret float 0xC7D0000020000000 ; %res = call float @llvm.nvvm.rcp.rz.f(float 0xB80FFFFFC0000000) ret float %res } define float @test_rcp_rz_ftz_f_neg_subnorm() { ; CHECK-LABEL: define float @test_rcp_rz_ftz_f_neg_subnorm() { ; CHECK-NEXT: [[RES:%.*]] = call float @llvm.nvvm.rcp.rz.ftz.f(float 0xB80FFFFFC0000000) ; CHECK-NEXT: ret float [[RES]] ; %res = call float @llvm.nvvm.rcp.rz.ftz.f(float 0xB80FFFFFC0000000) ret float %res } ;############################################################### ;# Round # ;############################################################### define double @test_round_d_neg_1_5() { ; CHECK-LABEL: define double @test_round_d_neg_1_5() { ; CHECK-NEXT: ret double -2.000000e+00 ; %res = call double @llvm.nvvm.round.d(double -1.5) ret double %res } define float @test_round_f_neg_1_5() { ; CHECK-LABEL: define float @test_round_f_neg_1_5() { ; CHECK-NEXT: ret float -2.000000e+00 ; %res = call float @llvm.nvvm.round.f(float -1.5) ret float %res } define float @test_round_ftz_f_neg_1_5() { ; CHECK-LABEL: define float @test_round_ftz_f_neg_1_5() { ; CHECK-NEXT: ret float -2.000000e+00 ; %res = call float @llvm.nvvm.round.ftz.f(float -1.5) ret float %res } define double @test_round_d_2_5() { ; CHECK-LABEL: define double @test_round_d_2_5() { ; CHECK-NEXT: ret double 2.000000e+00 ; %res = call double @llvm.nvvm.round.d(double 2.5) ret double %res } define float @test_round_f_2_5() { ; CHECK-LABEL: define float @test_round_f_2_5() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.round.f(float 2.5) ret float %res } define float @test_round_ftz_f_2_5() { ; CHECK-LABEL: define float @test_round_ftz_f_2_5() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.round.ftz.f(float 2.5) ret float %res } define double @test_round_d_neg_2_5() { ; CHECK-LABEL: define double @test_round_d_neg_2_5() { ; CHECK-NEXT: ret double -2.000000e+00 ; %res = call double @llvm.nvvm.round.d(double -2.5) ret double %res } define float @test_round_f_neg_2_5() { ; CHECK-LABEL: define float @test_round_f_neg_2_5() { ; CHECK-NEXT: ret float -2.000000e+00 ; %res = call float @llvm.nvvm.round.f(float -2.5) ret float %res } define float @test_round_ftz_f_neg_2_5() { ; CHECK-LABEL: define float @test_round_ftz_f_neg_2_5() { ; CHECK-NEXT: ret float -2.000000e+00 ; %res = call float @llvm.nvvm.round.ftz.f(float -2.5) ret float %res } define double @test_round_d_neg_subnorm() { ; CHECK-LABEL: define double @test_round_d_neg_subnorm() { ; CHECK-NEXT: ret double -0.000000e+00 ; %res = call double @llvm.nvvm.round.d(double 0xB80FFFFFC0000000) ret double %res } define float @test_round_f_neg_subnorm() { ; CHECK-LABEL: define float @test_round_f_neg_subnorm() { ; CHECK-NEXT: ret float -0.000000e+00 ; %res = call float @llvm.nvvm.round.f(float 0xB80FFFFFC0000000) ret float %res } define float @test_round_ftz_f_neg_subnorm() { ; CHECK-LABEL: define float @test_round_ftz_f_neg_subnorm() { ; CHECK-NEXT: ret float -0.000000e+00 ; %res = call float @llvm.nvvm.round.ftz.f(float 0xB80FFFFFC0000000) ret float %res } ;############################################################### ;# Saturate # ;############################################################### define double @test_saturate_d_1_25() { ; CHECK-LABEL: define double @test_saturate_d_1_25() { ; CHECK-NEXT: ret double 1.000000e+00 ; %res = call double @llvm.nvvm.saturate.d(double 1.25) ret double %res } define float @test_saturate_f_1_25() { ; CHECK-LABEL: define float @test_saturate_f_1_25() { ; CHECK-NEXT: ret float 1.000000e+00 ; %res = call float @llvm.nvvm.saturate.f(float 1.25) ret float %res } define float @test_saturate_ftz_f_1_25() { ; CHECK-LABEL: define float @test_saturate_ftz_f_1_25() { ; CHECK-NEXT: ret float 1.000000e+00 ; %res = call float @llvm.nvvm.saturate.ftz.f(float 1.25) ret float %res } define double @test_saturate_d_neg_1_25() { ; CHECK-LABEL: define double @test_saturate_d_neg_1_25() { ; CHECK-NEXT: ret double 0.000000e+00 ; %res = call double @llvm.nvvm.saturate.d(double -1.25) ret double %res } define float @test_saturate_f_neg_1_25() { ; CHECK-LABEL: define float @test_saturate_f_neg_1_25() { ; CHECK-NEXT: ret float 0.000000e+00 ; %res = call float @llvm.nvvm.saturate.f(float -1.25) ret float %res } define float @test_saturate_ftz_f_neg_1_25() { ; CHECK-LABEL: define float @test_saturate_ftz_f_neg_1_25() { ; CHECK-NEXT: ret float 0.000000e+00 ; %res = call float @llvm.nvvm.saturate.ftz.f(float -1.25) ret float %res } define double @test_saturate_d_0_5() { ; CHECK-LABEL: define double @test_saturate_d_0_5() { ; CHECK-NEXT: ret double 5.000000e-01 ; %res = call double @llvm.nvvm.saturate.d(double 0.5) ret double %res } define float @test_saturate_f_0_5() { ; CHECK-LABEL: define float @test_saturate_f_0_5() { ; CHECK-NEXT: ret float 5.000000e-01 ; %res = call float @llvm.nvvm.saturate.f(float 0.5) ret float %res } define float @test_saturate_ftz_f_0_5() { ; CHECK-LABEL: define float @test_saturate_ftz_f_0_5() { ; CHECK-NEXT: ret float 5.000000e-01 ; %res = call float @llvm.nvvm.saturate.ftz.f(float 0.5) ret float %res } define double @test_saturate_d_pos_subnorm() { ; CHECK-LABEL: define double @test_saturate_d_pos_subnorm() { ; CHECK-NEXT: ret double 0x380FFFFFC0000000 ; %res = call double @llvm.nvvm.saturate.d(double 0x380FFFFFC0000000) ret double %res } define float @test_saturate_f_pos_subnorm() { ; CHECK-LABEL: define float @test_saturate_f_pos_subnorm() { ; CHECK-NEXT: ret float 0x380FFFFFC0000000 ; %res = call float @llvm.nvvm.saturate.f(float 0x380FFFFFC0000000) ret float %res } define float @test_saturate_ftz_f_pos_subnorm() { ; CHECK-LABEL: define float @test_saturate_ftz_f_pos_subnorm() { ; CHECK-NEXT: ret float 0.000000e+00 ; %res = call float @llvm.nvvm.saturate.ftz.f(float 0x380FFFFFC0000000) ret float %res } ;############################################################### ;# Sqrt # ;############################################################### define float @test_sqrt_f_4() { ; CHECK-LABEL: define float @test_sqrt_f_4() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.sqrt.f(float 4.0) ret float %res } define float @test_sqrt_rn_f_4() { ; CHECK-LABEL: define float @test_sqrt_rn_f_4() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.sqrt.rn.f(float 4.0) ret float %res } define double @test_sqrt_rn_d_4() { ; CHECK-LABEL: define double @test_sqrt_rn_d_4() { ; CHECK-NEXT: ret double 2.000000e+00 ; %res = call double @llvm.nvvm.sqrt.rn.d(double 4.0) ret double %res } define float @test_sqrt_rn_ftz_f_4() { ; CHECK-LABEL: define float @test_sqrt_rn_ftz_f_4() { ; CHECK-NEXT: ret float 2.000000e+00 ; %res = call float @llvm.nvvm.sqrt.rn.ftz.f(float 4.0) ret float %res } define float @test_sqrt_f_pos_subnorm() { ; CHECK-LABEL: define float @test_sqrt_f_pos_subnorm() { ; CHECK-NEXT: ret float 0x3BFFFFFFE0000000 ; %res = call float @llvm.nvvm.sqrt.f(float 0x380FFFFFC0000000) ret float %res } define float @test_sqrt_rn_f_pos_subnorm() { ; CHECK-LABEL: define float @test_sqrt_rn_f_pos_subnorm() { ; CHECK-NEXT: ret float 0x3BFFFFFFE0000000 ; %res = call float @llvm.nvvm.sqrt.rn.f(float 0x380FFFFFC0000000) ret float %res } define double @test_sqrt_rn_d_pos_subnorm() { ; CHECK-LABEL: define double @test_sqrt_rn_d_pos_subnorm() { ; CHECK-NEXT: ret double 0x3BFFFFFFDFFFFFF0 ; %res = call double @llvm.nvvm.sqrt.rn.d(double 0x380FFFFFC0000000) ret double %res } define float @test_sqrt_rn_ftz_f_pos_subnorm() { ; CHECK-LABEL: define float @test_sqrt_rn_ftz_f_pos_subnorm() { ; CHECK-NEXT: ret float 0.000000e+00 ; %res = call float @llvm.nvvm.sqrt.rn.ftz.f(float 0x380FFFFFC0000000) ret float %res } declare double @llvm.nvvm.ceil.d(double) declare float @llvm.nvvm.ceil.f(float) declare float @llvm.nvvm.ceil.ftz.f(float) declare float @llvm.nvvm.fabs(float) declare float @llvm.nvvm.fabs.ftz(float) declare double @llvm.nvvm.floor.d(double) declare float @llvm.nvvm.floor.f(float) declare float @llvm.nvvm.floor.ftz.f(float) declare double @llvm.nvvm.rcp.rm.d(double) declare float @llvm.nvvm.rcp.rm.f(float) declare float @llvm.nvvm.rcp.rm.ftz.f(float) declare double @llvm.nvvm.rcp.rn.d(double) declare float @llvm.nvvm.rcp.rn.f(float) declare float @llvm.nvvm.rcp.rn.ftz.f(float) declare double @llvm.nvvm.rcp.rp.d(double) declare float @llvm.nvvm.rcp.rp.f(float) declare float @llvm.nvvm.rcp.rp.ftz.f(float) declare double @llvm.nvvm.rcp.rz.d(double) declare float @llvm.nvvm.rcp.rz.f(float) declare float @llvm.nvvm.rcp.rz.ftz.f(float) declare double @llvm.nvvm.round.d(double) declare float @llvm.nvvm.round.f(float) declare float @llvm.nvvm.round.ftz.f(float) declare double @llvm.nvvm.saturate.d(double) declare float @llvm.nvvm.saturate.f(float) declare float @llvm.nvvm.saturate.ftz.f(float) declare float @llvm.nvvm.sqrt.f(float) declare double @llvm.nvvm.sqrt.rn.d(double) declare float @llvm.nvvm.sqrt.rn.f(float) declare float @llvm.nvvm.sqrt.rn.ftz.f(float)