[Mesa-dev] [PATCH 3/4] nir: support to flatten_all in peephole-select
Rob Clark
robdclark at gmail.com
Wed Apr 1 06:02:03 PDT 2015
On Tue, Mar 31, 2015 at 7:08 PM, Matt Turner <mattst88 at gmail.com> wrote:
> On Tue, Mar 31, 2015 at 3:57 PM, Rob Clark <robdclark at gmail.com> wrote:
>> From: Rob Clark <robclark at freedesktop.org>
>>
>> Freedreno and vc4 want this behavior for the time being (until we have
>> real flow control). Even after that, we probably want to turn this into
>> some sort of driver tunable threshold, since for at least some hardware,
>> reasonably large if/else is best flattend rather than having divergent
>> flow control.
>>
>> NOTE: wasn't sure about some of the additional restrictions in
>> block_check_for_allowed_instrs().. are there some other cases where
>> I might need to fix things up in order to be guaranteed to be able to
>> flatten?
>>
>> NOTE: drop vc4 hunk if this is merged first, ofc
>>
>> Signed-off-by: Rob Clark <robclark at freedesktop.org>
>> ---
>> src/gallium/drivers/vc4/vc4_program.c | 2 +-
>> src/glsl/nir/nir.h | 2 +-
>> src/glsl/nir/nir_opt_peephole_select.c | 21 +++++++++++++++------
>> src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 2 +-
>> 4 files changed, 18 insertions(+), 9 deletions(-)
>>
>> diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c
>> index db51665..09896ce 100644
>> --- a/src/gallium/drivers/vc4/vc4_program.c
>> +++ b/src/gallium/drivers/vc4/vc4_program.c
>> @@ -1673,7 +1673,7 @@ vc4_optimize_nir(struct nir_shader *s)
>> progress = nir_copy_prop(s) || progress;
>> progress = nir_opt_dce(s) || progress;
>> progress = nir_opt_cse(s) || progress;
>> - progress = nir_opt_peephole_select(s) || progress;
>> + progress = nir_opt_peephole_select(s, true) || progress;
>
> I really hate boolean arguments. Could we make this parameter a
> "flags" enum and pass a readable name?
hmm, well my thinking was that it someday becomes a threshold (rather
than a boolean) when someone has a clever idea about how to quantify
how aggressive we want the pass to be about flattening things out. I
don't think that fits very well as a bitmask. Not sure if that
changes your opinion about using a bitmask.
Possibly a config struct, if we wanted to eventually have multiple
different thresholds (# of instructions, nesting depth, etc) would be
a better option, if you are simply trying to avoid fixing up the
handful of call sites later.
BR,
-R
More information about the mesa-dev
mailing list