Perhaps change the subject? On Fri, May 10, 2019 at 12:08 PM Alyssa Rosenzweig <[email protected]> wrote: > > This allows algebraic optimizations to check if the argument accesses > multiple distinct components of a vector. So a swizzle like "xyz" will > return true, but "yyy" will return false, as will a scalar. This can be > useful for optimizations on vector processors, where a convergent > swizzle can be done in one clock (replicating as if a scalar) but a > divergent one must be scalarized. In these cases, it is useful to > optimize differently based on whether the swizzle diverges. (Use case is > the "csel" condition on Midgard).
I might rephrase it as """ csel on Midgard requires a scalar condition, so add a function to enable lowering csel for cases where the condition is non-scalar. """ Your call. (But either way, get rid of the divergent/convergent references.) > > Signed-off-by: Alyssa Rosenzweig <[email protected]> > Cc: Jason Ekstrand <[email protected]> > Cc: Ilia Mirkin <[email protected]> > --- > src/compiler/nir/nir_search_helpers.h | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/src/compiler/nir/nir_search_helpers.h > b/src/compiler/nir/nir_search_helpers.h > index 1624508993d..8e26739a3ce 100644 > --- a/src/compiler/nir/nir_search_helpers.h > +++ b/src/compiler/nir/nir_search_helpers.h > @@ -143,6 +143,23 @@ is_not_const(nir_alu_instr *instr, unsigned src, UNUSED > unsigned num_components, > return !nir_src_is_const(instr->src[src].src); > } > > +/* I.e. the vector's swizzle actually accesses multiple channels. True for > + * xyzw, false for wwww, false for w */ > + > +static inline bool > +is_non_scalar_swizzle(nir_alu_instr *instr, UNUSED unsigned src, > + unsigned num_components, const uint8_t *swizzle) > +{ > + unsigned first_component = swizzle[0]; > + > + for (unsigned i = 1; i < num_components; ++i) { > + if (swizzle[i] != first_component) > + return true; > + } > + > + return false; > +} > + > static inline bool > is_used_more_than_once(nir_alu_instr *instr) > { > -- > 2.20.1 > _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
