1*8ff60c4dSAlex MacLean; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2*8ff60c4dSAlex MacLean; RUN: llc < %s | FileCheck %s 3*8ff60c4dSAlex MacLean; RUN: %if ptxas %{ llc < %s | %ptxas-verify %} 4*8ff60c4dSAlex MacLean 5*8ff60c4dSAlex MacLeantarget triple = "nvptx64-nvidia-cuda" 6*8ff60c4dSAlex MacLean 7*8ff60c4dSAlex MacLeandefine i32 @flo_1(i32 %a) { 8*8ff60c4dSAlex MacLean; CHECK-LABEL: flo_1( 9*8ff60c4dSAlex MacLean; CHECK: { 10*8ff60c4dSAlex MacLean; CHECK-NEXT: .reg .b32 %r<3>; 11*8ff60c4dSAlex MacLean; CHECK-EMPTY: 12*8ff60c4dSAlex MacLean; CHECK-NEXT: // %bb.0: 13*8ff60c4dSAlex MacLean; CHECK-NEXT: ld.param.u32 %r1, [flo_1_param_0]; 14*8ff60c4dSAlex MacLean; CHECK-NEXT: bfind.s32 %r2, %r1; 15*8ff60c4dSAlex MacLean; CHECK-NEXT: st.param.b32 [func_retval0], %r2; 16*8ff60c4dSAlex MacLean; CHECK-NEXT: ret; 17*8ff60c4dSAlex MacLean %r = call i32 @llvm.nvvm.flo.s.i32(i32 %a, i1 false) 18*8ff60c4dSAlex MacLean ret i32 %r 19*8ff60c4dSAlex MacLean} 20*8ff60c4dSAlex MacLean 21*8ff60c4dSAlex MacLean 22*8ff60c4dSAlex MacLeandefine i32 @flo_2(i32 %a) { 23*8ff60c4dSAlex MacLean; CHECK-LABEL: flo_2( 24*8ff60c4dSAlex MacLean; CHECK: { 25*8ff60c4dSAlex MacLean; CHECK-NEXT: .reg .b32 %r<3>; 26*8ff60c4dSAlex MacLean; CHECK-EMPTY: 27*8ff60c4dSAlex MacLean; CHECK-NEXT: // %bb.0: 28*8ff60c4dSAlex MacLean; CHECK-NEXT: ld.param.u32 %r1, [flo_2_param_0]; 29*8ff60c4dSAlex MacLean; CHECK-NEXT: bfind.shiftamt.s32 %r2, %r1; 30*8ff60c4dSAlex MacLean; CHECK-NEXT: st.param.b32 [func_retval0], %r2; 31*8ff60c4dSAlex MacLean; CHECK-NEXT: ret; 32*8ff60c4dSAlex MacLean %r = call i32 @llvm.nvvm.flo.s.i32(i32 %a, i1 true) 33*8ff60c4dSAlex MacLean ret i32 %r 34*8ff60c4dSAlex MacLean} 35*8ff60c4dSAlex MacLean 36*8ff60c4dSAlex MacLeandefine i32 @flo_3(i32 %a) { 37*8ff60c4dSAlex MacLean; CHECK-LABEL: flo_3( 38*8ff60c4dSAlex MacLean; CHECK: { 39*8ff60c4dSAlex MacLean; CHECK-NEXT: .reg .b32 %r<3>; 40*8ff60c4dSAlex MacLean; CHECK-EMPTY: 41*8ff60c4dSAlex MacLean; CHECK-NEXT: // %bb.0: 42*8ff60c4dSAlex MacLean; CHECK-NEXT: ld.param.u32 %r1, [flo_3_param_0]; 43*8ff60c4dSAlex MacLean; CHECK-NEXT: bfind.u32 %r2, %r1; 44*8ff60c4dSAlex MacLean; CHECK-NEXT: st.param.b32 [func_retval0], %r2; 45*8ff60c4dSAlex MacLean; CHECK-NEXT: ret; 46*8ff60c4dSAlex MacLean %r = call i32 @llvm.nvvm.flo.u.i32(i32 %a, i1 false) 47*8ff60c4dSAlex MacLean ret i32 %r 48*8ff60c4dSAlex MacLean} 49*8ff60c4dSAlex MacLean 50*8ff60c4dSAlex MacLean 51*8ff60c4dSAlex MacLeandefine i32 @flo_4(i32 %a) { 52*8ff60c4dSAlex MacLean; CHECK-LABEL: flo_4( 53*8ff60c4dSAlex MacLean; CHECK: { 54*8ff60c4dSAlex MacLean; CHECK-NEXT: .reg .b32 %r<3>; 55*8ff60c4dSAlex MacLean; CHECK-EMPTY: 56*8ff60c4dSAlex MacLean; CHECK-NEXT: // %bb.0: 57*8ff60c4dSAlex MacLean; CHECK-NEXT: ld.param.u32 %r1, [flo_4_param_0]; 58*8ff60c4dSAlex MacLean; CHECK-NEXT: bfind.shiftamt.u32 %r2, %r1; 59*8ff60c4dSAlex MacLean; CHECK-NEXT: st.param.b32 [func_retval0], %r2; 60*8ff60c4dSAlex MacLean; CHECK-NEXT: ret; 61*8ff60c4dSAlex MacLean %r = call i32 @llvm.nvvm.flo.u.i32(i32 %a, i1 true) 62*8ff60c4dSAlex MacLean ret i32 %r 63*8ff60c4dSAlex MacLean} 64*8ff60c4dSAlex MacLean 65*8ff60c4dSAlex MacLean 66*8ff60c4dSAlex MacLean 67*8ff60c4dSAlex MacLeandefine i32 @flo_5(i64 %a) { 68*8ff60c4dSAlex MacLean; CHECK-LABEL: flo_5( 69*8ff60c4dSAlex MacLean; CHECK: { 70*8ff60c4dSAlex MacLean; CHECK-NEXT: .reg .b32 %r<2>; 71*8ff60c4dSAlex MacLean; CHECK-NEXT: .reg .b64 %rd<2>; 72*8ff60c4dSAlex MacLean; CHECK-EMPTY: 73*8ff60c4dSAlex MacLean; CHECK-NEXT: // %bb.0: 74*8ff60c4dSAlex MacLean; CHECK-NEXT: ld.param.u64 %rd1, [flo_5_param_0]; 75*8ff60c4dSAlex MacLean; CHECK-NEXT: bfind.s64 %r1, %rd1; 76*8ff60c4dSAlex MacLean; CHECK-NEXT: st.param.b32 [func_retval0], %r1; 77*8ff60c4dSAlex MacLean; CHECK-NEXT: ret; 78*8ff60c4dSAlex MacLean %r = call i32 @llvm.nvvm.flo.s.i64(i64 %a, i1 false) 79*8ff60c4dSAlex MacLean ret i32 %r 80*8ff60c4dSAlex MacLean} 81*8ff60c4dSAlex MacLean 82*8ff60c4dSAlex MacLean 83*8ff60c4dSAlex MacLeandefine i32 @flo_6(i64 %a) { 84*8ff60c4dSAlex MacLean; CHECK-LABEL: flo_6( 85*8ff60c4dSAlex MacLean; CHECK: { 86*8ff60c4dSAlex MacLean; CHECK-NEXT: .reg .b32 %r<2>; 87*8ff60c4dSAlex MacLean; CHECK-NEXT: .reg .b64 %rd<2>; 88*8ff60c4dSAlex MacLean; CHECK-EMPTY: 89*8ff60c4dSAlex MacLean; CHECK-NEXT: // %bb.0: 90*8ff60c4dSAlex MacLean; CHECK-NEXT: ld.param.u64 %rd1, [flo_6_param_0]; 91*8ff60c4dSAlex MacLean; CHECK-NEXT: bfind.shiftamt.s64 %r1, %rd1; 92*8ff60c4dSAlex MacLean; CHECK-NEXT: st.param.b32 [func_retval0], %r1; 93*8ff60c4dSAlex MacLean; CHECK-NEXT: ret; 94*8ff60c4dSAlex MacLean %r = call i32 @llvm.nvvm.flo.s.i64(i64 %a, i1 true) 95*8ff60c4dSAlex MacLean ret i32 %r 96*8ff60c4dSAlex MacLean} 97*8ff60c4dSAlex MacLean 98*8ff60c4dSAlex MacLeandefine i32 @flo_7(i64 %a) { 99*8ff60c4dSAlex MacLean; CHECK-LABEL: flo_7( 100*8ff60c4dSAlex MacLean; CHECK: { 101*8ff60c4dSAlex MacLean; CHECK-NEXT: .reg .b32 %r<2>; 102*8ff60c4dSAlex MacLean; CHECK-NEXT: .reg .b64 %rd<2>; 103*8ff60c4dSAlex MacLean; CHECK-EMPTY: 104*8ff60c4dSAlex MacLean; CHECK-NEXT: // %bb.0: 105*8ff60c4dSAlex MacLean; CHECK-NEXT: ld.param.u64 %rd1, [flo_7_param_0]; 106*8ff60c4dSAlex MacLean; CHECK-NEXT: bfind.u64 %r1, %rd1; 107*8ff60c4dSAlex MacLean; CHECK-NEXT: st.param.b32 [func_retval0], %r1; 108*8ff60c4dSAlex MacLean; CHECK-NEXT: ret; 109*8ff60c4dSAlex MacLean %r = call i32 @llvm.nvvm.flo.u.i64(i64 %a, i1 false) 110*8ff60c4dSAlex MacLean ret i32 %r 111*8ff60c4dSAlex MacLean} 112*8ff60c4dSAlex MacLean 113*8ff60c4dSAlex MacLean 114*8ff60c4dSAlex MacLeandefine i32 @flo_8(i64 %a) { 115*8ff60c4dSAlex MacLean; CHECK-LABEL: flo_8( 116*8ff60c4dSAlex MacLean; CHECK: { 117*8ff60c4dSAlex MacLean; CHECK-NEXT: .reg .b32 %r<2>; 118*8ff60c4dSAlex MacLean; CHECK-NEXT: .reg .b64 %rd<2>; 119*8ff60c4dSAlex MacLean; CHECK-EMPTY: 120*8ff60c4dSAlex MacLean; CHECK-NEXT: // %bb.0: 121*8ff60c4dSAlex MacLean; CHECK-NEXT: ld.param.u64 %rd1, [flo_8_param_0]; 122*8ff60c4dSAlex MacLean; CHECK-NEXT: bfind.shiftamt.u64 %r1, %rd1; 123*8ff60c4dSAlex MacLean; CHECK-NEXT: st.param.b32 [func_retval0], %r1; 124*8ff60c4dSAlex MacLean; CHECK-NEXT: ret; 125*8ff60c4dSAlex MacLean %r = call i32 @llvm.nvvm.flo.u.i64(i64 %a, i1 true) 126*8ff60c4dSAlex MacLean ret i32 %r 127*8ff60c4dSAlex MacLean} 128*8ff60c4dSAlex MacLean 129*8ff60c4dSAlex MacLeandeclare i32 @llvm.nvvm.flo.s.i32(i32, i1) 130*8ff60c4dSAlex MacLeandeclare i32 @llvm.nvvm.flo.u.i32(i32, i1) 131*8ff60c4dSAlex MacLeandeclare i32 @llvm.nvvm.flo.s.i64(i64, i1) 132*8ff60c4dSAlex MacLeandeclare i32 @llvm.nvvm.flo.u.i64(i64, i1) 133