On Tue, May 27, 2014 at 06:47:41PM -0700, Matt Turner wrote: > Clean up with with register_coalesce()/dead_code_eliminate(). > --- > src/mesa/drivers/dri/i965/brw_fs.cpp | 42 > ++++++++++++++++++++++++++++++++++++ > src/mesa/drivers/dri/i965/brw_fs.h | 1 + > 2 files changed, 43 insertions(+) > > diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp > b/src/mesa/drivers/dri/i965/brw_fs.cpp > index 0856b6b..c0af6d0 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp > @@ -2574,6 +2574,43 @@ fs_visitor::lower_uniform_pull_constant_loads() > } > } > > +bool > +fs_visitor::lower_load_payload() > +{ > + bool progress = false; > + > + foreach_list_safe(node, &instructions) { > + fs_inst *inst = (fs_inst *)node; > + > + if (inst->opcode == SHADER_OPCODE_LOAD_PAYLOAD) {
Nit-picking here, you could reduce indentation by: if (inst->opcode != SHADER_OPCODE_LOAD_PAYLOAD) continue; > + fs_reg dst = inst->dst; > + > + /* The generator creates the message header if present, which is in > + * the first register of the message payload. > + */ > + if (!inst->header_present) { > + inst->insert_before(MOV(dst, inst->src[0])); > + } else { > + assert(inst->src[0].file == BAD_FILE); > + } > + dst.reg_offset++; > + > + for (int i = 1; i < inst->sources; i++) { Tapani already asked about using signed counter and comparing it with uint8_t. As long as compiler does not complain, I don't really mind. I leave it to you and Reviewed-by: Topi Pohjolainen <topi.pohjolai...@intel.com> > + inst->insert_before(MOV(dst, inst->src[i])); > + dst.reg_offset++; > + } > + > + inst->remove(); > + progress = true; > + } > + } > + > + if (progress) > + invalidate_live_intervals(); > + > + return progress; > +} > + > void > fs_visitor::dump_instructions() > { > @@ -3071,6 +3108,11 @@ fs_visitor::run() > progress = OPT(compute_to_mrf) || progress; > } while (progress); > > + if (lower_load_payload()) { > + register_coalesce(); > + dead_code_eliminate(); > + } > + > lower_uniform_pull_constant_loads(); > > assign_curb_setup(); > diff --git a/src/mesa/drivers/dri/i965/brw_fs.h > b/src/mesa/drivers/dri/i965/brw_fs.h > index d0e459c..2b60945 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs.h > +++ b/src/mesa/drivers/dri/i965/brw_fs.h > @@ -391,6 +391,7 @@ public: > void fail(const char *msg, ...); > void no16(const char *msg, ...); > void lower_uniform_pull_constant_loads(); > + bool lower_load_payload(); > > void push_force_uncompressed(); > void pop_force_uncompressed(); > -- > 1.8.3.2 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev