Should the subject say something about not allowing a type size change? -Jordan
On 2016-05-03 05:21:53, Samuel Iglesias Gonsálvez wrote: > From: Iago Toral Quiroga <ito...@igalia.com> > > When source modifiers are present and the types of the source and > the entry's source are different, there are certain cases in which > we allow copy-propagation to change the type of source by the type > of the entry's source we are copy propagating from. > > However, it is not generally safe to do this if the types involved > have different sizes, since parameters like the stride would change > the semantics of the resulting instruction. > > Prevents that we turn this: > > load_payload(8) vgrf17:DF, |vgrf4+0.0|:DF 1sthalf > mov(8) vgrf18:DF, vgrf17:DF 1sthalf > load_payload(8) vgrf5:DF, vgrf18:DF, vgrf20:DF NoMask 1sthalf WE_all > load_payload(8) vgrf21:UD, vgrf5+0.4<2>:UD 1sthalf > mov(8) vgrf22:UD, vgrf21:UD 1sthalf > > into: > > load_payload(8) vgrf17:DF, |vgrf4+0.0|:DF 1sthalf > mov(8) vgrf18:DF, |vgrf4+0.0|:DF 1sthalf > load_payload(8) vgrf5:DF, |vgrf4+0.0|:DF, |vgrf4+2.0|:DF NoMask 1sthalf WE_all > load_payload(8) vgrf21:UD, vgrf5+0.4<2>:UD 1sthalf > mov(8) vgrf22:DF, |vgrf4+0.4|<2>:DF 1sthalf > > where the semantics of the last instruccion have changed. > --- > src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp > b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp > index abc68c8..aa4c9c9 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp > @@ -411,8 +411,9 @@ fs_visitor::try_copy_propagate(fs_inst *inst, int arg, > acp_entry *entry) > return false; > > if (has_source_modifiers && > - entry->dst.type != inst->src[arg].type && > - !inst->can_change_types()) > + ((entry->dst.type != inst->src[arg].type && > + !inst->can_change_types()) || > + (type_sz(entry->dst.type) != type_sz(inst->src[arg].type)))) > return false; > > if (devinfo->gen >= 8 && (entry->src.negate || entry->src.abs) && > -- > 2.5.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev