Re: [Mesa-dev] [PATCH v4 19/28] i965/vec4: fix SIMD-width lowering for VEC4_OPCODE_FROM_DOUBLE

2017-03-23 Thread Samuel Iglesias Gonsálvez
On Thu, 2017-03-23 at 12:14 -0700, Francisco Jerez wrote:
> Samuel Iglesias Gonsálvez  writes:
> 
> > On Wed, 2017-03-22 at 15:55 -0700, Francisco Jerez wrote:
> > > Samuel Iglesias Gonsálvez  writes:
> > > 
> > > > Now the VEC4_OPCODE_FROM_DOUBLE's destination data is written
> > > > with
> > > > stride 2. We need to take into account this when doing the
> > > > split
> > > > so we don't overwrite data.
> > > > 
> > > 
> > > You should probably fix the destination type of your
> > > VEC4_OPCODE_FROM_DOUBLE instructions in PATCH 17 instead so you
> > > don't
> > > need to special-case VEC4_OPCODE_FROM_DOUBLE in this lowering
> > > pass.
> > > 
> > 
> > I don't think this would work. Do you mean to set the destination
> > type
> > to double, so horiz_offset() works fine here without any change?
> > 
> 
> Yes, double (or 64-bit integer) would be more appropriate than float,
> because the opcode writes 64 bit-wide components, so using F as
> destination type will inevitably confuse the optimizer.
> 

Yes

> > Then in the generator's code for VEC4_OPCODE_FROM_DOUBLE, I would
> > need
> > to retype the destination to... I don't know to which type because
> > it
> > was lost.
> > 
> 
> It would make a lot more sense to rename these after the destination
> type (e.g. VEC4_OPCODE_TO_F32), since the conversion origin type is
> fully determined by the source type encoded in the IR instruction,
> but
> the destination type is not.
> 

Right. I am going to write a patch to split this instruction in one per
type.

Sam

> > Sam
> > 
> > > > Signed-off-by: Samuel Iglesias Gonsálvez 
> > > > ---
> > > >  src/intel/compiler/brw_vec4.cpp | 7 ++-
> > > >  1 file changed, 6 insertions(+), 1 deletion(-)
> > > > 
> > > > diff --git a/src/intel/compiler/brw_vec4.cpp
> > > > b/src/intel/compiler/brw_vec4.cpp
> > > > index b26f8035811..f4eea954404 100644
> > > > --- a/src/intel/compiler/brw_vec4.cpp
> > > > +++ b/src/intel/compiler/brw_vec4.cpp
> > > > @@ -2198,6 +2198,7 @@ vec4_visitor::lower_simd_width()
> > > >   linst->group = channel_offset;
> > > >   linst->size_written = size_written;
> > > >  
> > > > + bool d2f_pass = (inst->opcode ==
> > > > VEC4_OPCODE_FROM_DOUBLE
> > > > && n > 0);
> > > >   /* Compute split dst region */
> > > >   dst_reg dst;
> > > >   if (needs_temp) {
> > > > @@ -2212,7 +2213,11 @@ vec4_visitor::lower_simd_width()
> > > > inst->insert_before(block, copy);
> > > >  }
> > > >   } else {
> > > > -dst = horiz_offset(inst->dst, channel_offset);
> > > > +/* d2x conversion is done with a destination's
> > > > stride
> > > > of 2. We need
> > > > + * to take into account when splitting it.
> > > > + */
> > > > +unsigned stride = d2f_pass ? 2 : 1;
> > > > +dst = horiz_offset(inst->dst, stride *
> > > > channel_offset);
> > > >   }
> > > >   linst->dst = dst;
> > > >  
> > > > -- 
> > > > 2.11.0
> > > > 
> > > > ___
> > > > mesa-dev mailing list
> > > > mesa-dev@lists.freedesktop.org
> > > > https://lists.freedesktop.org/mailman/listinfo/mesa-dev

signature.asc
Description: This is a digitally signed message part
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v4 19/28] i965/vec4: fix SIMD-width lowering for VEC4_OPCODE_FROM_DOUBLE

2017-03-23 Thread Francisco Jerez
Samuel Iglesias Gonsálvez  writes:

> On Wed, 2017-03-22 at 15:55 -0700, Francisco Jerez wrote:
>> Samuel Iglesias Gonsálvez  writes:
>> 
>> > Now the VEC4_OPCODE_FROM_DOUBLE's destination data is written with
>> > stride 2. We need to take into account this when doing the split
>> > so we don't overwrite data.
>> > 
>> 
>> You should probably fix the destination type of your
>> VEC4_OPCODE_FROM_DOUBLE instructions in PATCH 17 instead so you don't
>> need to special-case VEC4_OPCODE_FROM_DOUBLE in this lowering pass.
>> 
>
> I don't think this would work. Do you mean to set the destination type
> to double, so horiz_offset() works fine here without any change?
>

Yes, double (or 64-bit integer) would be more appropriate than float,
because the opcode writes 64 bit-wide components, so using F as
destination type will inevitably confuse the optimizer.

> Then in the generator's code for VEC4_OPCODE_FROM_DOUBLE, I would need
> to retype the destination to... I don't know to which type because it
> was lost.
>
It would make a lot more sense to rename these after the destination
type (e.g. VEC4_OPCODE_TO_F32), since the conversion origin type is
fully determined by the source type encoded in the IR instruction, but
the destination type is not.

> Sam
>
>> > Signed-off-by: Samuel Iglesias Gonsálvez 
>> > ---
>> >  src/intel/compiler/brw_vec4.cpp | 7 ++-
>> >  1 file changed, 6 insertions(+), 1 deletion(-)
>> > 
>> > diff --git a/src/intel/compiler/brw_vec4.cpp
>> > b/src/intel/compiler/brw_vec4.cpp
>> > index b26f8035811..f4eea954404 100644
>> > --- a/src/intel/compiler/brw_vec4.cpp
>> > +++ b/src/intel/compiler/brw_vec4.cpp
>> > @@ -2198,6 +2198,7 @@ vec4_visitor::lower_simd_width()
>> >   linst->group = channel_offset;
>> >   linst->size_written = size_written;
>> >  
>> > + bool d2f_pass = (inst->opcode == VEC4_OPCODE_FROM_DOUBLE
>> > && n > 0);
>> >   /* Compute split dst region */
>> >   dst_reg dst;
>> >   if (needs_temp) {
>> > @@ -2212,7 +2213,11 @@ vec4_visitor::lower_simd_width()
>> > inst->insert_before(block, copy);
>> >  }
>> >   } else {
>> > -dst = horiz_offset(inst->dst, channel_offset);
>> > +/* d2x conversion is done with a destination's stride
>> > of 2. We need
>> > + * to take into account when splitting it.
>> > + */
>> > +unsigned stride = d2f_pass ? 2 : 1;
>> > +dst = horiz_offset(inst->dst, stride *
>> > channel_offset);
>> >   }
>> >   linst->dst = dst;
>> >  
>> > -- 
>> > 2.11.0
>> > 
>> > ___
>> > mesa-dev mailing list
>> > mesa-dev@lists.freedesktop.org
>> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev


signature.asc
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v4 19/28] i965/vec4: fix SIMD-width lowering for VEC4_OPCODE_FROM_DOUBLE

2017-03-23 Thread Samuel Iglesias Gonsálvez
On Wed, 2017-03-22 at 15:55 -0700, Francisco Jerez wrote:
> Samuel Iglesias Gonsálvez  writes:
> 
> > Now the VEC4_OPCODE_FROM_DOUBLE's destination data is written with
> > stride 2. We need to take into account this when doing the split
> > so we don't overwrite data.
> > 
> 
> You should probably fix the destination type of your
> VEC4_OPCODE_FROM_DOUBLE instructions in PATCH 17 instead so you don't
> need to special-case VEC4_OPCODE_FROM_DOUBLE in this lowering pass.
> 

I don't think this would work. Do you mean to set the destination type
to double, so horiz_offset() works fine here without any change?

Then in the generator's code for VEC4_OPCODE_FROM_DOUBLE, I would need
to retype the destination to... I don't know to which type because it
was lost.

Sam

> > Signed-off-by: Samuel Iglesias Gonsálvez 
> > ---
> >  src/intel/compiler/brw_vec4.cpp | 7 ++-
> >  1 file changed, 6 insertions(+), 1 deletion(-)
> > 
> > diff --git a/src/intel/compiler/brw_vec4.cpp
> > b/src/intel/compiler/brw_vec4.cpp
> > index b26f8035811..f4eea954404 100644
> > --- a/src/intel/compiler/brw_vec4.cpp
> > +++ b/src/intel/compiler/brw_vec4.cpp
> > @@ -2198,6 +2198,7 @@ vec4_visitor::lower_simd_width()
> >   linst->group = channel_offset;
> >   linst->size_written = size_written;
> >  
> > + bool d2f_pass = (inst->opcode == VEC4_OPCODE_FROM_DOUBLE
> > && n > 0);
> >   /* Compute split dst region */
> >   dst_reg dst;
> >   if (needs_temp) {
> > @@ -2212,7 +2213,11 @@ vec4_visitor::lower_simd_width()
> > inst->insert_before(block, copy);
> >  }
> >   } else {
> > -dst = horiz_offset(inst->dst, channel_offset);
> > +/* d2x conversion is done with a destination's stride
> > of 2. We need
> > + * to take into account when splitting it.
> > + */
> > +unsigned stride = d2f_pass ? 2 : 1;
> > +dst = horiz_offset(inst->dst, stride *
> > channel_offset);
> >   }
> >   linst->dst = dst;
> >  
> > -- 
> > 2.11.0
> > 
> > ___
> > mesa-dev mailing list
> > mesa-dev@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev

signature.asc
Description: This is a digitally signed message part
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v4 19/28] i965/vec4: fix SIMD-width lowering for VEC4_OPCODE_FROM_DOUBLE

2017-03-22 Thread Francisco Jerez
Samuel Iglesias Gonsálvez  writes:

> Now the VEC4_OPCODE_FROM_DOUBLE's destination data is written with
> stride 2. We need to take into account this when doing the split
> so we don't overwrite data.
>

You should probably fix the destination type of your
VEC4_OPCODE_FROM_DOUBLE instructions in PATCH 17 instead so you don't
need to special-case VEC4_OPCODE_FROM_DOUBLE in this lowering pass.

> Signed-off-by: Samuel Iglesias Gonsálvez 
> ---
>  src/intel/compiler/brw_vec4.cpp | 7 ++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/src/intel/compiler/brw_vec4.cpp b/src/intel/compiler/brw_vec4.cpp
> index b26f8035811..f4eea954404 100644
> --- a/src/intel/compiler/brw_vec4.cpp
> +++ b/src/intel/compiler/brw_vec4.cpp
> @@ -2198,6 +2198,7 @@ vec4_visitor::lower_simd_width()
>   linst->group = channel_offset;
>   linst->size_written = size_written;
>  
> + bool d2f_pass = (inst->opcode == VEC4_OPCODE_FROM_DOUBLE && n > 0);
>   /* Compute split dst region */
>   dst_reg dst;
>   if (needs_temp) {
> @@ -2212,7 +2213,11 @@ vec4_visitor::lower_simd_width()
> inst->insert_before(block, copy);
>  }
>   } else {
> -dst = horiz_offset(inst->dst, channel_offset);
> +/* d2x conversion is done with a destination's stride of 2. We 
> need
> + * to take into account when splitting it.
> + */
> +unsigned stride = d2f_pass ? 2 : 1;
> +dst = horiz_offset(inst->dst, stride * channel_offset);
>   }
>   linst->dst = dst;
>  
> -- 
> 2.11.0
>
> ___
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


signature.asc
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v4 19/28] i965/vec4: fix SIMD-width lowering for VEC4_OPCODE_FROM_DOUBLE

2017-03-20 Thread Samuel Iglesias Gonsálvez
Now the VEC4_OPCODE_FROM_DOUBLE's destination data is written with
stride 2. We need to take into account this when doing the split
so we don't overwrite data.

Signed-off-by: Samuel Iglesias Gonsálvez 
---
 src/intel/compiler/brw_vec4.cpp | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/intel/compiler/brw_vec4.cpp b/src/intel/compiler/brw_vec4.cpp
index b26f8035811..f4eea954404 100644
--- a/src/intel/compiler/brw_vec4.cpp
+++ b/src/intel/compiler/brw_vec4.cpp
@@ -2198,6 +2198,7 @@ vec4_visitor::lower_simd_width()
  linst->group = channel_offset;
  linst->size_written = size_written;
 
+ bool d2f_pass = (inst->opcode == VEC4_OPCODE_FROM_DOUBLE && n > 0);
  /* Compute split dst region */
  dst_reg dst;
  if (needs_temp) {
@@ -2212,7 +2213,11 @@ vec4_visitor::lower_simd_width()
inst->insert_before(block, copy);
 }
  } else {
-dst = horiz_offset(inst->dst, channel_offset);
+/* d2x conversion is done with a destination's stride of 2. We need
+ * to take into account when splitting it.
+ */
+unsigned stride = d2f_pass ? 2 : 1;
+dst = horiz_offset(inst->dst, stride * channel_offset);
  }
  linst->dst = dst;
 
-- 
2.11.0

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev