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 <alyssa@rosenzweig.io>
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Acked-by: Faith Ekstrand <faith.ekstrand@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24671>
This commit is contained in:
Alyssa Rosenzweig
2023-08-15 09:59:01 -04:00
parent e1622dcca1
commit 4753ce7d72
2 changed files with 8 additions and 6 deletions
@@ -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;
}
@@ -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;
}