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; }
