Jason Ekstrand <ja...@jlekstrand.net> writes: > We aren't using it anymore.
It seems useful to me to be able to represent indirect access as part of any instruction source or destination register. The following: | mov_indirect g0, g1, a0 | foo g2, g0 and the converse case with indirect destination offset (which you don't seem to represent currently) can be implemented by the hardware more efficiently using a single instruction in certain cases. The current IR is able to represent what the hardware can do, but supporting the MOV_INDIRECT instruction only would force us to keep the indirection separate from the instruction that uses it, so it seems like a less expressive representation to me than the current approach, unless you're willing to add _INDIRECT variants of most hardware opcodes. > --- > src/mesa/drivers/dri/i965/brw_fs.cpp | 7 +------ > src/mesa/drivers/dri/i965/brw_ir_fs.h | 5 +---- > 2 files changed, 2 insertions(+), 10 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp > b/src/mesa/drivers/dri/i965/brw_fs.cpp > index 7cc03c5..786c5fb 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp > @@ -433,7 +433,6 @@ fs_reg::fs_reg(struct ::brw_reg reg) : > { > this->reg_offset = 0; > this->subreg_offset = 0; > - this->reladdr = NULL; > this->stride = 1; > if (this->file == IMM && > (this->type != BRW_REGISTER_TYPE_V && > @@ -448,7 +447,6 @@ fs_reg::equals(const fs_reg &r) const > { > return (this->backend_reg::equals(r) && > subreg_offset == r.subreg_offset && > - !reladdr && !r.reladdr && > stride == r.stride); > } > > @@ -4716,9 +4714,7 @@ fs_visitor::dump_instruction(backend_instruction > *be_inst, FILE *file) > break; > case UNIFORM: > fprintf(file, "u%d", inst->src[i].nr + inst->src[i].reg_offset); > - if (inst->src[i].reladdr) { > - fprintf(file, "+reladdr"); > - } else if (inst->src[i].subreg_offset) { > + if (inst->src[i].subreg_offset) { > fprintf(file, "+%d.%d", inst->src[i].reg_offset, > inst->src[i].subreg_offset); > } > @@ -4829,7 +4825,6 @@ fs_visitor::get_instruction_generating_reg(fs_inst > *start, > { > if (end == start || > end->is_partial_write() || > - reg.reladdr || > !reg.equals(end->dst)) { > return NULL; > } else { > diff --git a/src/mesa/drivers/dri/i965/brw_ir_fs.h > b/src/mesa/drivers/dri/i965/brw_ir_fs.h > index c3eec2e..e4f20f4 100644 > --- a/src/mesa/drivers/dri/i965/brw_ir_fs.h > +++ b/src/mesa/drivers/dri/i965/brw_ir_fs.h > @@ -58,8 +58,6 @@ public: > */ > int subreg_offset; > > - fs_reg *reladdr; > - > /** Register region horizontal stride */ > uint8_t stride; > }; > @@ -136,8 +134,7 @@ component(fs_reg reg, unsigned idx) > static inline bool > is_uniform(const fs_reg ®) > { > - return (reg.stride == 0 || reg.is_null()) && > - (!reg.reladdr || is_uniform(*reg.reladdr)); > + return (reg.stride == 0 || reg.is_null()); > } > > /** > -- > 2.5.0.400.gff86faf > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev