xref: /llvm-project/llvm/test/CodeGen/NVPTX/flo.ll (revision 8ff60c4d47530bb5e86cb6ba46aeaf2af770d57f)
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