On Apr 12, 2016 10:16 AM, "Connor Abbott" <[email protected]> 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
> <[email protected]> wrote:
> > From: Iago Toral Quiroga <[email protected]>
> >
> > 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
> > [email protected]
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to