[Mesa-dev] [PATCH v2 13/53] intel/compiler: add a helper to handle conversions to 64-bit in atom
Iago Toral
itoral at igalia.com
Thu Jan 3 08:01:13 UTC 2019
Thanks Curro, I'll check it out.
Iago
On Wed, 2019-01-02 at 15:00 -0800, Francisco Jerez wrote:
> This patch is redundant with the regioning lowering pass I sent a few
> days ago [1]. The problem with this approach is that on the one hand
> it's easy for the back-end compiler to cause code which was legalized
> at
> NIR translation time to become illegal again accidentally, on the
> other
> hand there's the maintainability issue of having workarounds for the
> exact same restriction scattered all over the place.
>
> Please drop it, there shouldn't be any need to do manual workarounds
> at
> NIR translation time for the CHV/BXT regioning restrictions to be
> honored anymore.
>
> [1]
> https://lists.freedesktop.org/archives/mesa-dev/2018-December/212775.html
>
> Iago Toral Quiroga <itoral at igalia.com> writes:
>
> > ---
> > src/intel/compiler/brw_fs_nir.cpp | 55 ++++++++++++++++++---------
> > ----
> > 1 file changed, 33 insertions(+), 22 deletions(-)
> >
> > diff --git a/src/intel/compiler/brw_fs_nir.cpp
> > b/src/intel/compiler/brw_fs_nir.cpp
> > index 92ec85a27cc..15715651aa6 100644
> > --- a/src/intel/compiler/brw_fs_nir.cpp
> > +++ b/src/intel/compiler/brw_fs_nir.cpp
> > @@ -664,6 +664,38 @@ brw_rnd_mode_from_nir_op (const nir_op op) {
> > }
> > }
> >
> > +static bool
> > +fixup_64bit_conversion(const fs_builder &bld,
> > + fs_reg dst, fs_reg src,
> > + bool saturate,
> > + const struct gen_device_info *devinfo)
> > +{
> > + /* CHV PRM, vol07, 3D Media GPGPU Engine, Register Region
> > Restrictions:
> > + *
> > + * "When source or destination is 64b (...), regioning in
> > Align1
> > + * must follow these rules:
> > + *
> > + * 1. Source and destination horizontal stride must be
> > aligned to
> > + * the same qword.
> > + * (...)"
> > + *
> > + * This means that conversions from bit-sizes smaller than 64-
> > bit to
> > + * 64-bit need to have the source data elements aligned to 64-
> > bit.
> > + * This restriction does not apply to BDW and later.
> > + */
> > + if (type_sz(dst.type) == 8 && type_sz(src.type) < 8 &&
> > + (devinfo->is_cherryview ||
> > gen_device_info_is_9lp(devinfo))) {
> > + fs_reg tmp = bld.vgrf(dst.type, 1);
> > + tmp = subscript(tmp, src.type, 0);
> > + bld.MOV(tmp, src);
> > + fs_inst *inst = bld.MOV(dst, tmp);
> > + inst->saturate = saturate;
> > + return true;
> > + }
> > +
> > + return false;
> > +}
> > +
> > void
> > fs_visitor::nir_emit_alu(const fs_builder &bld, nir_alu_instr
> > *instr)
> > {
> > @@ -805,29 +837,8 @@ fs_visitor::nir_emit_alu(const fs_builder
> > &bld, nir_alu_instr *instr)
> > case nir_op_i2i64:
> > case nir_op_u2f64:
> > case nir_op_u2u64:
> > - /* CHV PRM, vol07, 3D Media GPGPU Engine, Register Region
> > Restrictions:
> > - *
> > - * "When source or destination is 64b (...), regioning in
> > Align1
> > - * must follow these rules:
> > - *
> > - * 1. Source and destination horizontal stride must be
> > aligned to
> > - * the same qword.
> > - * (...)"
> > - *
> > - * This means that conversions from bit-sizes smaller than
> > 64-bit to
> > - * 64-bit need to have the source data elements aligned to
> > 64-bit.
> > - * This restriction does not apply to BDW and later.
> > - */
> > - if (nir_dest_bit_size(instr->dest.dest) == 64 &&
> > - nir_src_bit_size(instr->src[0].src) < 64 &&
> > - (devinfo->is_cherryview ||
> > gen_device_info_is_9lp(devinfo))) {
> > - fs_reg tmp = bld.vgrf(result.type, 1);
> > - tmp = subscript(tmp, op[0].type, 0);
> > - inst = bld.MOV(tmp, op[0]);
> > - inst = bld.MOV(result, tmp);
> > - inst->saturate = instr->dest.saturate;
> > + if (fixup_64bit_conversion(bld, result, op[0], instr-
> > >dest.saturate, devinfo))
> > break;
> > - }
> > /* fallthrough */
> > case nir_op_f2f32:
> > case nir_op_f2i32:
> > --
> > 2.17.1
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list