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

Author: Alyssa Rosenzweig <[email protected]>
Date:   Tue Aug 15 09:59:01 2023 -0400

lima/pp: Do not use union undefined behaviour

It is invalid to read parent_instr for an if-use (or parent_if for a
non-if-use). Make sure we read the right one when handling if-uses.

Signed-off-by: Alyssa Rosenzweig <[email protected]>
Reviewed-by: Rhys Perry <[email protected]>
Acked-by: Faith Ekstrand <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24671>

---

 src/gallium/drivers/lima/ir/lima_nir_duplicate_consts.c    | 7 ++++---
 src/gallium/drivers/lima/ir/lima_nir_duplicate_intrinsic.c | 7 ++++---
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/lima/ir/lima_nir_duplicate_consts.c 
b/src/gallium/drivers/lima/ir/lima_nir_duplicate_consts.c
index 05da5f1facc..d6d6c44d72b 100644
--- a/src/gallium/drivers/lima/ir/lima_nir_duplicate_consts.c
+++ b/src/gallium/drivers/lima/ir/lima_nir_duplicate_consts.c
@@ -55,12 +55,13 @@ lima_nir_duplicate_load_const(nir_builder *b, 
nir_load_const_instr *load)
    }
 
    last_dupl = NULL;
-   last_parent_instr = NULL;
+   nir_if *last_parent_if = NULL;
 
    nir_foreach_if_use_safe(use_src, &load->def) {
       nir_load_const_instr *dupl;
+      nir_if *nif = use_src->parent_if;
 
-      if (last_parent_instr != use_src->parent_instr) {
+      if (last_parent_if != nif) {
          /* if 'if use', clone where it is */
          b->cursor = nir_before_instr(&load->instr);
 
@@ -76,7 +77,7 @@ lima_nir_duplicate_load_const(nir_builder *b, 
nir_load_const_instr *load)
       }
 
       nir_src_rewrite(&use_src->parent_if->condition, &dupl->def);
-      last_parent_instr = use_src->parent_instr;
+      last_parent_if = nif;
       last_dupl = dupl;
    }
 
diff --git a/src/gallium/drivers/lima/ir/lima_nir_duplicate_intrinsic.c 
b/src/gallium/drivers/lima/ir/lima_nir_duplicate_intrinsic.c
index 469c7c1adcc..e9440f95d15 100644
--- a/src/gallium/drivers/lima/ir/lima_nir_duplicate_intrinsic.c
+++ b/src/gallium/drivers/lima/ir/lima_nir_duplicate_intrinsic.c
@@ -59,12 +59,13 @@ lima_nir_duplicate_intrinsic(nir_builder *b, 
nir_intrinsic_instr *itr,
    }
 
    last_dupl = NULL;
-   last_parent_instr = NULL;
+   nir_if *last_parent_if = NULL;
 
    nir_foreach_if_use_safe(use_src, &itr->def) {
       nir_intrinsic_instr *dupl;
+      nir_if *nif = use_src->parent_if;
 
-      if (last_parent_instr != use_src->parent_instr) {
+      if (last_parent_if != nif) {
          /* if 'if use', clone where it is */
          b->cursor = nir_before_instr(&itr->instr);
          dupl = nir_intrinsic_instr_create(b->shader, op);
@@ -83,7 +84,7 @@ lima_nir_duplicate_intrinsic(nir_builder *b, 
nir_intrinsic_instr *itr,
       }
 
       nir_src_rewrite(&use_src->parent_if->condition, &dupl->def);
-      last_parent_instr = use_src->parent_instr;
+      last_parent_if = nif;
       last_dupl = dupl;
    }
 

Reply via email to