nir/opt_loop: rematerialize derefs instead of creating phis
Fixes NIR validation of hogwarts_legacy/00ac08423ad6e422.
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Fixes: 9995f336e6
("nir: add merge loop terminators optimisation")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29686>
This commit is contained in:
@@ -542,8 +542,12 @@ merge_terminators(nir_builder *b, nir_if *dest_if, nir_if *src_if)
|
||||
m_state.after_src_if = nir_after_cf_node(&src_if->cf_node);
|
||||
m_state.old_break_block = break_blk;
|
||||
m_state.continue_block = continue_blk_c.block;
|
||||
nir_foreach_instr(instr, m_state.continue_block) {
|
||||
nir_foreach_def(instr, insert_phis_after_terminator_merge, &m_state);
|
||||
/* Use _safe because nir_rematerialize_deref_in_use_blocks might remove dead derefs. */
|
||||
nir_foreach_instr_reverse_safe(instr, m_state.continue_block) {
|
||||
if (instr->type == nir_instr_type_deref)
|
||||
nir_rematerialize_deref_in_use_blocks(nir_instr_as_deref(instr));
|
||||
else
|
||||
nir_foreach_def(instr, insert_phis_after_terminator_merge, &m_state);
|
||||
}
|
||||
|
||||
b->cursor = nir_before_src(&dest_if->condition);
|
||||
|
Reference in New Issue
Block a user