Module: Mesa
Branch: main
Commit: 6e7a61df4c7e8b3f62d0927b7c129ebf70c832c8
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6e7a61df4c7e8b3f62d0927b7c129ebf70c832c8

Author: Job Noorman <[email protected]>
Date:   Sun Nov 12 20:18:12 2023 +0100

nir: add _safe variants of nir_foreach_reg_load/store

Signed-off-by: Job Noorman <[email protected]>
Reviewed-by: Rob Clark <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26175>

---

 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, &reg->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, &reg->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, &reg->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, &reg->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)
 {

Reply via email to