From 84d57e1fb1289b5705c18b3c689b4cadd3ed362a Mon Sep 17 00:00:00 2001 From: Mary Guillemard Date: Wed, 24 Jan 2024 09:13:33 +0100 Subject: [PATCH] nir: Move atomic_op_to_alu to common code Signed-off-by: Mary Guillemard Part-of: --- src/compiler/nir/nir.c | 41 ++++++++++++++++++ src/compiler/nir/nir.h | 3 ++ src/compiler/nir/nir_opt_uniform_atomics.c | 48 ++-------------------- 3 files changed, 48 insertions(+), 44 deletions(-) diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index a65c9b1ebab..6158a51e551 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -3517,3 +3517,44 @@ nir_block_contains_work(nir_block *block) return false; } + +nir_op +nir_atomic_op_to_alu(nir_atomic_op op) +{ + switch (op) { + case nir_atomic_op_iadd: + return nir_op_iadd; + case nir_atomic_op_imin: + return nir_op_imin; + case nir_atomic_op_umin: + return nir_op_umin; + case nir_atomic_op_imax: + return nir_op_imax; + case nir_atomic_op_umax: + return nir_op_umax; + case nir_atomic_op_iand: + return nir_op_iand; + case nir_atomic_op_ior: + return nir_op_ior; + case nir_atomic_op_ixor: + return nir_op_ixor; + case nir_atomic_op_fadd: + return nir_op_fadd; + case nir_atomic_op_fmin: + return nir_op_fmin; + case nir_atomic_op_fmax: + return nir_op_fmax; + + /* We don't handle exchanges or wraps */ + case nir_atomic_op_xchg: + case nir_atomic_op_cmpxchg: + case nir_atomic_op_fcmpxchg: + case nir_atomic_op_inc_wrap: + case nir_atomic_op_dec_wrap: + case nir_atomic_op_ordered_add_gfx12_amd: + return nir_num_opcodes; + } + + unreachable("Invalid nir_atomic_op"); +} + diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 737b6db1275..6575f5f00c1 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -1373,6 +1373,9 @@ nir_atomic_op_type(nir_atomic_op op) unreachable("Invalid nir_atomic_op"); } +nir_op +nir_atomic_op_to_alu(nir_atomic_op op); + /** Returns nir_op_vec or nir_op_mov if num_components == 1 * * This is subtly different from nir_op_is_vec() which returns false for diff --git a/src/compiler/nir/nir_opt_uniform_atomics.c b/src/compiler/nir/nir_opt_uniform_atomics.c index 4e1caa36ffb..bb3be35e079 100644 --- a/src/compiler/nir/nir_opt_uniform_atomics.c +++ b/src/compiler/nir/nir_opt_uniform_atomics.c @@ -39,46 +39,6 @@ #include "nir/nir.h" #include "nir/nir_builder.h" -static nir_op -atomic_op_to_alu(nir_atomic_op op) -{ - switch (op) { - case nir_atomic_op_iadd: - return nir_op_iadd; - case nir_atomic_op_imin: - return nir_op_imin; - case nir_atomic_op_umin: - return nir_op_umin; - case nir_atomic_op_imax: - return nir_op_imax; - case nir_atomic_op_umax: - return nir_op_umax; - case nir_atomic_op_iand: - return nir_op_iand; - case nir_atomic_op_ior: - return nir_op_ior; - case nir_atomic_op_ixor: - return nir_op_ixor; - case nir_atomic_op_fadd: - return nir_op_fadd; - case nir_atomic_op_fmin: - return nir_op_fmin; - case nir_atomic_op_fmax: - return nir_op_fmax; - - /* We don't handle exchanges or wraps */ - case nir_atomic_op_xchg: - case nir_atomic_op_cmpxchg: - case nir_atomic_op_fcmpxchg: - case nir_atomic_op_inc_wrap: - case nir_atomic_op_dec_wrap: - case nir_atomic_op_ordered_add_gfx12_amd: - return nir_num_opcodes; - } - - unreachable("Unknown atomic op"); -} - static nir_op parse_atomic_op(nir_intrinsic_instr *intr, unsigned *offset_src, unsigned *data_src, unsigned *offset2_src) @@ -88,26 +48,26 @@ parse_atomic_op(nir_intrinsic_instr *intr, unsigned *offset_src, *offset_src = 1; *data_src = 2; *offset2_src = *offset_src; - return atomic_op_to_alu(nir_intrinsic_atomic_op(intr)); + return nir_atomic_op_to_alu(nir_intrinsic_atomic_op(intr)); case nir_intrinsic_shared_atomic: case nir_intrinsic_global_atomic: case nir_intrinsic_deref_atomic: *offset_src = 0; *data_src = 1; *offset2_src = *offset_src; - return atomic_op_to_alu(nir_intrinsic_atomic_op(intr)); + return nir_atomic_op_to_alu(nir_intrinsic_atomic_op(intr)); case nir_intrinsic_global_atomic_amd: *offset_src = 0; *data_src = 1; *offset2_src = 2; - return atomic_op_to_alu(nir_intrinsic_atomic_op(intr)); + return nir_atomic_op_to_alu(nir_intrinsic_atomic_op(intr)); case nir_intrinsic_image_deref_atomic: case nir_intrinsic_image_atomic: case nir_intrinsic_bindless_image_atomic: *offset_src = 1; *data_src = 3; *offset2_src = *offset_src; - return atomic_op_to_alu(nir_intrinsic_atomic_op(intr)); + return nir_atomic_op_to_alu(nir_intrinsic_atomic_op(intr)); default: return nir_num_opcodes;