[Mesa-dev] [PATCH 12/13] nir: add pack_double_2x32_split_y opcode

Jason Ekstrand jason at jlekstrand.net
Tue Apr 12 22:26:26 UTC 2016


On Apr 12, 2016 10:16 AM, "Connor Abbott" <cwabbott0 at gmail.com> wrote:
>
> I'm not sure I'm so comfortable with this. For one, this is the sort
> of thing the backend can (and should) do. Why should be be adding
> stuff at the NIR level to help the backend's copy propagation pass?
> And perhaps more importantly, why should we be adding stuff at the NIR
> level to workaround the lack of spilling support for doubles? I know
> it's more difficult to implement than normal spilling, but it just
> feels dirty to workaround it because some tests happen to use too many
> registers.
>
> Jason, what do you think?

Agreed.  The solution to spilling problems is to fix spilling.  At first I
thought this *might* be a good idea but thinking a bit more, I have to
agree with Connor. The only thing this does is short-cut part of the
use-def graph in such a way as to make RA happier.

> On Tue, Apr 12, 2016 at 4:05 AM, Samuel Iglesias Gonsálvez
> <siglesias at igalia.com> wrote:
> > From: Iago Toral Quiroga <itoral at igalia.com>
> >
> > This is useful when we only need to modify the high 32-bit chunk of a
double.
> > This is a common case, because this is the part that encodes the
exponent
> > which we manipulate in some double lowering passes. Although we can
accomplish
> > the same by using pack_double_2x32, this new opcode is better for
register
> > pressure, since we don't have to unpack both parts of the double and
keep
> > the low 32-bits around until we can recombine the new exponent.
> >
> > We will use this opcode in the set_exponent() function of the double
lowering
> > pass and with that we will fix spilling issues in some dmat4 divide
> > piglit tests on Intel.
> > ---
> >  src/compiler/nir/nir_opcodes.py | 14 ++++++++++++++
> >  1 file changed, 14 insertions(+)
> >
> > diff --git a/src/compiler/nir/nir_opcodes.py
b/src/compiler/nir/nir_opcodes.py
> > index 9f62e08..f92dd8d 100644
> > --- a/src/compiler/nir/nir_opcodes.py
> > +++ b/src/compiler/nir/nir_opcodes.py
> > @@ -276,6 +276,20 @@ di.i2 = src0.y;
> >  dst.x = di.u64;
> >  """)
> >
> > +opcode("pack_double_2x32_split_y", 0, tuint64, [0, 0], [tuint64,
tuint32], "", """
> > +union {
> > +    uint64_t u64;
> > +    struct {
> > +        uint32_t i1;
> > +        uint32_t i2;
> > +    };
> > +} di;
> > +
> > +di.u64 = src0;
> > +di.i1 = src1;
> > +dst = di.u64;
> > +""")
> > +
> >  unop_horiz("unpack_double_2x32", 2, tuint32, 1, tuint64, """
> >  union {
> >      uint64_t u64;
> > --
> > 2.5.0
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160412/63a973b2/attachment.html>


More information about the mesa-dev mailing list