Module: Mesa Branch: staging/23.3 Commit: 3913722a7faaed74d579199e4b86d2f14013572f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3913722a7faaed74d579199e4b86d2f14013572f
Author: Rohan Garg <[email protected]> Date: Thu Nov 30 20:30:39 2023 +0100 intel/compiler: infer the number of operands using lsc_op_num_data_values nir_emit_global_atomic should utilize lsc_op_num_data_values to infer the number of operands for global atomic ops, following the same pattern as nir_emit_surface_atomic Fixes: 90a2137 ('intel/compiler: Use LSC opcode enum rather than legacy BRW_AOPs') Signed-off-by: Rohan Garg <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]> Reviewed-by: Lionel Landwerlin <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26432> (cherry picked from commit db6aaa691d05ef017b803d11cce4e341d1a98882) --- .pick_status.json | 2 +- src/intel/compiler/brw_fs_nir.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 134774af862..d46e808404d 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -914,7 +914,7 @@ "description": "intel/compiler: infer the number of operands using lsc_op_num_data_values", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "90a2137cd56179a2c65339b2b60991e0281c8995", "notes": null diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index 1ba548b31f6..b9f7366763b 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -6400,16 +6400,17 @@ fs_visitor::nir_emit_global_atomic(const fs_builder &bld, nir_intrinsic_instr *instr) { int op = lsc_aop_for_nir_intrinsic(instr); + int num_data = lsc_op_num_data_values(op); fs_reg dest = get_nir_def(instr->def); fs_reg addr = get_nir_src(instr->src[0]); fs_reg data; - if (op != LSC_OP_ATOMIC_INC && op != LSC_OP_ATOMIC_DEC) + if (num_data >= 1) data = expand_to_32bit(bld, get_nir_src(instr->src[1])); - if (op == LSC_OP_ATOMIC_CMPXCHG) { + if (num_data >= 2) { fs_reg tmp = bld.vgrf(data.type, 2); fs_reg sources[2] = { data,
