nir: Do opt_algebraic in reverse order.
Walking the SSA definitions in order means that we consider the smallest algebraic optimizations before larger optimizations. So if a smaller rule is part of a larger rule, the smaller one will happen first, preventing the larger one from happening. instructions in affected programs: 32721 -> 32611 (-0.34%) helped: 106 In programs whose nir_optimize loop count changes (129 of them): before: 1164 optimization loops after: 1071 optimization loops Of the 129 affected, 16 programs' optimization loop counts increased. Prevents regressions and annoyances in the next commits. Reviewed-by: Eduardo Lima Mitev <elima@igalia.com> Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
parent
a8f0960816
commit
7be8d07732
|
@ -216,7 +216,7 @@ ${pass_name}_block(nir_block *block, void *void_state)
|
|||
{
|
||||
struct opt_state *state = void_state;
|
||||
|
||||
nir_foreach_instr_safe(block, instr) {
|
||||
nir_foreach_instr_reverse_safe(block, instr) {
|
||||
if (instr->type != nir_instr_type_alu)
|
||||
continue;
|
||||
|
||||
|
@ -255,7 +255,7 @@ ${pass_name}_impl(nir_function_impl *impl, const bool *condition_flags)
|
|||
state.progress = false;
|
||||
state.condition_flags = condition_flags;
|
||||
|
||||
nir_foreach_block(impl, ${pass_name}_block, &state);
|
||||
nir_foreach_block_reverse(impl, ${pass_name}_block, &state);
|
||||
|
||||
if (state.progress)
|
||||
nir_metadata_preserve(impl, nir_metadata_block_index |
|
||||
|
|
Loading…
Reference in New Issue