[Mesa-dev] [PATCH 3/5] nir: Do opt_algebraic in reverse order.

Ian Romanick idr at freedesktop.org
Mon Feb 8 23:57:42 UTC 2016


On 02/04/2016 05:47 PM, Matt Turner wrote:
> 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.

Doesn't that just mean that our "larger pattern" space is somehow
incompletely?  This seems to indicate that applications could (but
probably don't?) open-code these patterns and we'll miss them.

> instructions in affected programs: 32721 -> 32611 (-0.34%)
> helped: 106
> 
> Prevents regressions and annoyances in the next commits.
> ---
>  src/compiler/nir/nir_algebraic.py | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/src/compiler/nir/nir_algebraic.py b/src/compiler/nir/nir_algebraic.py
> index a30652f..77ad35e 100644
> --- a/src/compiler/nir/nir_algebraic.py
> +++ b/src/compiler/nir/nir_algebraic.py
> @@ -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 |
> 



More information about the mesa-dev mailing list