mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 17:48:10 +02:00
nir/opt_if: Re-materialize derefs in use blocks before peeling loops
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107879 Cc: "18.2" <mesa-stable@lists.freedesktop.org>
This commit is contained in:
parent
0796c3934e
commit
864c780566
1 changed files with 7 additions and 6 deletions
|
|
@ -181,6 +181,13 @@ opt_peel_loop_initial_if(nir_loop *loop)
|
|||
}
|
||||
}
|
||||
|
||||
/* We're about to re-arrange a bunch of blocks so make sure that we don't
|
||||
* have deref uses which cross block boundaries. We don't want a deref
|
||||
* accidentally ending up in a phi.
|
||||
*/
|
||||
nir_rematerialize_derefs_in_use_blocks_impl(
|
||||
nir_cf_node_get_function(&loop->cf_node));
|
||||
|
||||
/* Before we do anything, convert the loop to LCSSA. We're about to
|
||||
* replace a bunch of SSA defs with registers and this will prevent any of
|
||||
* it from leaking outside the loop.
|
||||
|
|
@ -659,12 +666,6 @@ nir_opt_if(nir_shader *shader)
|
|||
*/
|
||||
nir_lower_regs_to_ssa_impl(function->impl);
|
||||
|
||||
/* Calling nir_convert_loop_to_lcssa() in opt_peel_loop_initial_if()
|
||||
* adds extra phi nodes which may not be valid if they're used for
|
||||
* something such as a deref. Remove any unneeded phis.
|
||||
*/
|
||||
nir_opt_remove_phis_impl(function->impl);
|
||||
|
||||
progress = true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue