From 6e7a61df4c7e8b3f62d0927b7c129ebf70c832c8 Mon Sep 17 00:00:00 2001 From: Job Noorman Date: Sun, 12 Nov 2023 20:18:12 +0100 Subject: [PATCH] nir: add _safe variants of nir_foreach_reg_load/store Signed-off-by: Job Noorman Reviewed-by: Rob Clark Part-of: --- src/.clang-format | 2 ++ src/compiler/nir/nir.h | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/.clang-format b/src/.clang-format index 8b806c4d972..b19bb8a68f1 100644 --- a/src/.clang-format +++ b/src/.clang-format @@ -121,7 +121,9 @@ ForEachMacros: - nir_foreach_reg_decl - nir_foreach_reg_decl_safe - nir_foreach_reg_load + - nir_foreach_reg_load_safe - nir_foreach_reg_store + - nir_foreach_reg_store_safe - nir_foreach_if_use - nir_foreach_if_use_safe diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 497a5717855..23246e1577d 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -6575,12 +6575,24 @@ nir_is_store_reg(nir_intrinsic_instr *intr) nir_foreach_use(load, ®->def) \ if (nir_is_load_reg(nir_instr_as_intrinsic(nir_src_parent_instr(load)))) +#define nir_foreach_reg_load_safe(load, reg) \ + assert(reg->intrinsic == nir_intrinsic_decl_reg); \ + \ + nir_foreach_use_safe(load, ®->def) \ + if (nir_is_load_reg(nir_instr_as_intrinsic(nir_src_parent_instr(load)))) + #define nir_foreach_reg_store(store, reg) \ assert(reg->intrinsic == nir_intrinsic_decl_reg); \ \ nir_foreach_use(store, ®->def) \ if (nir_is_store_reg(nir_instr_as_intrinsic(nir_src_parent_instr(store)))) +#define nir_foreach_reg_store_safe(store, reg) \ + assert(reg->intrinsic == nir_intrinsic_decl_reg); \ + \ + nir_foreach_use_safe(store, ®->def) \ + if (nir_is_store_reg(nir_instr_as_intrinsic(nir_src_parent_instr(store)))) + static inline nir_intrinsic_instr * nir_load_reg_for_def(const nir_def *def) {