mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-19 12:10:36 +01:00
radeonsi: Only call nir_lower_var_copies at the end of the opt loop
In283ad85944, radeonsi started using nir_find_var_copies. However, it was also calling nir_lower_var_copies in the optimization loop and the two can end up fighting. The simple solution is to wait to lower copies until the end of the optimization loop. Fixes:283ad85944Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3550 Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6841>
This commit is contained in:
parent
7971918924
commit
472a20c5fc
1 changed files with 4 additions and 14 deletions
|
|
@ -496,23 +496,11 @@ static void si_nir_opts(struct si_screen *sscreen, struct nir_shader *nir, bool
|
|||
bool lower_phis_to_scalar = false;
|
||||
|
||||
if (first) {
|
||||
bool opt_find_array_copies = false;
|
||||
|
||||
NIR_PASS(progress, nir, nir_split_array_vars, nir_var_function_temp);
|
||||
NIR_PASS(lower_alu_to_scalar, nir, nir_shrink_vec_array_vars, nir_var_function_temp);
|
||||
NIR_PASS(opt_find_array_copies, nir, nir_opt_find_array_copies);
|
||||
NIR_PASS(progress, nir, nir_opt_copy_prop_vars);
|
||||
|
||||
/* Call nir_lower_var_copies() to remove any copies introduced
|
||||
* by nir_opt_find_array_copies().
|
||||
*/
|
||||
if (opt_find_array_copies)
|
||||
NIR_PASS(progress, nir, nir_lower_var_copies);
|
||||
progress |= opt_find_array_copies;
|
||||
} else {
|
||||
NIR_PASS(progress, nir, nir_opt_copy_prop_vars);
|
||||
NIR_PASS(progress, nir, nir_opt_find_array_copies);
|
||||
}
|
||||
|
||||
NIR_PASS(progress, nir, nir_opt_copy_prop_vars);
|
||||
NIR_PASS(progress, nir, nir_opt_dead_write_vars);
|
||||
|
||||
NIR_PASS(lower_alu_to_scalar, nir, nir_opt_trivial_continues);
|
||||
|
|
@ -564,6 +552,8 @@ static void si_nir_opts(struct si_screen *sscreen, struct nir_shader *nir, bool
|
|||
if (sscreen->info.has_packed_math_16bit)
|
||||
NIR_PASS(progress, nir, nir_opt_vectorize, NULL, NULL);
|
||||
} while (progress);
|
||||
|
||||
NIR_PASS_V(nir, nir_lower_var_copies);
|
||||
}
|
||||
|
||||
static int type_size_vec4(const struct glsl_type *type, bool bindless)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue