Module: Mesa Branch: staging/23.1 Commit: 140c7ab73d8ed4acba7825ca1a1a811829039bb3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=140c7ab73d8ed4acba7825ca1a1a811829039bb3
Author: Georg Lehmann <[email protected]> Date: Tue Sep 26 18:29:31 2023 +0200 aco: implement 64bit div find_lsb This can be selected for divergent subgroupBallotFindLSB. Reviewed-by: Rhys Perry <[email protected]> Cc: mesa-stable Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25407> (cherry picked from commit b91616e80049d8de911cda06874d1d26255bafe8) --- .pick_status.json | 2 +- src/amd/compiler/aco_instruction_selection.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 8b0afa330af..e0e277cef3f 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1084,7 +1084,7 @@ "description": "aco: implement 64bit div find_lsb", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index ee5e0623471..af481b52311 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -1763,6 +1763,13 @@ visit_alu_instr(isel_context* ctx, nir_alu_instr* instr) emit_vop1_instruction(ctx, instr, aco_opcode::v_ffbl_b32, dst); } else if (src.regClass() == s2) { bld.sop1(aco_opcode::s_ff1_i32_b64, Definition(dst), src); + } else if (src.regClass() == v2) { + Temp lo = bld.tmp(v1), hi = bld.tmp(v1); + bld.pseudo(aco_opcode::p_split_vector, Definition(lo), Definition(hi), src); + lo = bld.vop1(aco_opcode::v_ffbl_b32, bld.def(v1), lo); + hi = bld.vop1(aco_opcode::v_ffbl_b32, bld.def(v1), hi); + hi = uadd32_sat(bld, bld.def(v1), bld.copy(bld.def(s1), Operand::c32(32u)), hi); + bld.vop2(aco_opcode::v_min_u32, Definition(dst), lo, hi); } else { isel_err(&instr->instr, "Unimplemented NIR instr bit size"); }
