[Mesa-dev] [PATCH 05/19] i965/fs: Loop from 0 to inst->sources, not 0 to 3.
Tapani Pälli
tapani.palli at intel.com
Wed May 28 00:42:48 PDT 2014
On 05/28/2014 04:47 AM, Matt Turner wrote:
> ---
> src/mesa/drivers/dri/i965/brw_fs.cpp | 24 +++++++++++-----------
> .../drivers/dri/i965/brw_fs_copy_propagation.cpp | 4 ++--
> src/mesa/drivers/dri/i965/brw_fs_cse.cpp | 2 +-
> .../dri/i965/brw_fs_dead_code_eliminate.cpp | 2 +-
> src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 2 +-
> .../drivers/dri/i965/brw_fs_live_variables.cpp | 2 +-
> src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp | 6 +++---
> .../drivers/dri/i965/brw_fs_register_coalesce.cpp | 2 +-
> .../dri/i965/brw_fs_saturate_propagation.cpp | 2 +-
> .../drivers/dri/i965/brw_schedule_instructions.cpp | 10 ++++-----
> 10 files changed, 28 insertions(+), 28 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index a9a8ac1..8b13683 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -1472,7 +1472,7 @@ fs_visitor::assign_curb_setup()
> foreach_list(node, &this->instructions) {
> fs_inst *inst = (fs_inst *)node;
>
> - for (unsigned int i = 0; i < 3; i++) {
> + for (unsigned int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file == UNIFORM) {
> int uniform_nr = inst->src[i].reg + inst->src[i].reg_offset;
> int constant_nr;
> @@ -1670,7 +1670,7 @@ fs_visitor::split_virtual_grfs()
> * the send is reading the whole thing.
> */
> if (inst->is_send_from_grf()) {
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file == GRF) {
> split_grf[inst->src[i].reg] = false;
> }
Note that former loop comparison is against unsigned while here using
signed. Would be good to use exact type to avoid compilation
warnings.This also for some of the loops below. Otherwise,
Reviewed-by: Tapani Pälli <tapani.palli at intel.com>
> @@ -1703,7 +1703,7 @@ fs_visitor::split_virtual_grfs()
> inst->dst.reg_offset - 1);
> inst->dst.reg_offset = 0;
> }
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file == GRF &&
> split_grf[inst->src[i].reg] &&
> inst->src[i].reg_offset != 0) {
> @@ -1741,7 +1741,7 @@ fs_visitor::compact_virtual_grfs()
> if (inst->dst.file == GRF)
> remap_table[inst->dst.reg] = 0;
>
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file == GRF)
> remap_table[inst->src[i].reg] = 0;
> }
> @@ -1767,7 +1767,7 @@ fs_visitor::compact_virtual_grfs()
> if (inst->dst.file == GRF)
> inst->dst.reg = remap_table[inst->dst.reg];
>
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file == GRF)
> inst->src[i].reg = remap_table[inst->src[i].reg];
> }
> @@ -1807,7 +1807,7 @@ fs_visitor::move_uniform_array_access_to_pull_constants()
> foreach_list_safe(node, &this->instructions) {
> fs_inst *inst = (fs_inst *)node;
>
> - for (int i = 0 ; i < 3; i++) {
> + for (int i = 0 ; i < inst->sources; i++) {
> if (inst->src[i].file != UNIFORM || !inst->src[i].reladdr)
> continue;
>
> @@ -1857,7 +1857,7 @@ fs_visitor::assign_constant_locations()
> foreach_list(node, &this->instructions) {
> fs_inst *inst = (fs_inst *) node;
>
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file != UNIFORM)
> continue;
>
> @@ -1928,7 +1928,7 @@ fs_visitor::demote_pull_constants()
> foreach_list(node, &this->instructions) {
> fs_inst *inst = (fs_inst *)node;
>
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file != UNIFORM)
> continue;
>
> @@ -2180,7 +2180,7 @@ fs_visitor::compute_to_mrf()
> * MRF's source GRF that we wanted to rewrite, that stops us.
> */
> bool interfered = false;
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < scan_inst->sources; i++) {
> if (scan_inst->src[i].file == GRF &&
> scan_inst->src[i].reg == inst->src[0].reg &&
> scan_inst->src[i].reg_offset == inst->src[0].reg_offset) {
> @@ -2319,7 +2319,7 @@ clear_deps_for_inst_src(fs_inst *inst, int dispatch_width, bool *deps,
> !inst->force_sechalf);
>
> /* Clear the flag for registers that actually got read (as expected). */
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> int grf;
> if (inst->src[i].file == GRF) {
> grf = inst->src[i].reg;
> @@ -2697,7 +2697,7 @@ fs_visitor::dump_instruction(backend_instruction *be_inst, FILE *file)
> }
> fprintf(file, ":%s, ", brw_reg_type_letters(inst->dst.type));
>
> - for (int i = 0; i < 3 && inst->src[i].file != BAD_FILE; i++) {
> + for (int i = 0; i < inst->sources && inst->src[i].file != BAD_FILE; i++) {
> if (inst->src[i].negate)
> fprintf(file, "-");
> if (inst->src[i].abs)
> @@ -2786,7 +2786,7 @@ fs_visitor::dump_instruction(backend_instruction *be_inst, FILE *file)
> fprintf(file, ":%s", brw_reg_type_letters(inst->src[i].type));
> }
>
> - if (i < 2 && inst->src[i + 1].file != BAD_FILE)
> + if (i < inst->sources - 1 && inst->src[i + 1].file != BAD_FILE)
> fprintf(file, ", ");
> }
>
> 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 069b60f..a1aff21 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
> @@ -353,7 +353,7 @@ fs_visitor::try_constant_propagate(fs_inst *inst, acp_entry *entry)
> if (entry->src.file != IMM)
> return false;
>
> - for (int i = 2; i >= 0; i--) {
> + for (int i = inst->sources - 1; i >= 0; i--) {
> if (inst->src[i].file != entry->dst.file ||
> inst->src[i].reg != entry->dst.reg ||
> inst->src[i].reg_offset != entry->dst.reg_offset ||
> @@ -492,7 +492,7 @@ fs_visitor::opt_copy_propagate_local(void *copy_prop_ctx, bblock_t *block,
> inst = (fs_inst *)inst->next) {
>
> /* Try propagating into this instruction. */
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file != GRF)
> continue;
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_cse.cpp b/src/mesa/drivers/dri/i965/brw_fs_cse.cpp
> index ea610bd..94f657d 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_cse.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_cse.cpp
> @@ -228,7 +228,7 @@ fs_visitor::opt_cse_local(bblock_t *block, exec_list *aeb)
> }
> }
>
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < entry->generator->sources; i++) {
> fs_reg *src_reg = &entry->generator->src[i];
>
> /* Kill all AEB entries that use the destination we just
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp b/src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp
> index dfeceb0..962d8c6 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp
> @@ -90,7 +90,7 @@ fs_visitor::dead_code_eliminate()
> }
> }
>
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file == GRF) {
> int var = live_intervals->var_from_vgrf[inst->src[i].reg];
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> index 6ba8bb9..a5be0ec 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> @@ -1352,7 +1352,7 @@ fs_generator::generate_code(exec_list *instructions,
> if (unlikely(debug_flag))
> annotate(brw, annotation, cfg, inst, p->next_insn_offset);
>
> - for (unsigned int i = 0; i < 3; i++) {
> + for (unsigned int i = 0; i < inst->sources; i++) {
> src[i] = brw_reg_from_fs_reg(&inst->src[i]);
>
> /* The accumulator result appears to get used for the
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp b/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp
> index a3ccf99..d39724a 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp
> @@ -149,7 +149,7 @@ fs_live_variables::setup_def_use()
> inst = (fs_inst *)inst->next) {
>
> /* Set use[] for this instruction */
> - for (unsigned int i = 0; i < 3; i++) {
> + for (unsigned int i = 0; i < inst->sources; i++) {
> fs_reg reg = inst->src[i];
>
> if (reg.file != GRF)
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp b/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp
> index bbaf810..4ff6f18 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp
> @@ -273,7 +273,7 @@ fs_visitor::setup_payload_interference(struct ra_graph *g,
> * assign_curbe_setup(), and interpolation uses fixed hardware regs from
> * the start (see interp_reg()).
> */
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file == HW_REG &&
> inst->src[i].fixed_hw_reg.file == BRW_GENERAL_REGISTER_FILE) {
> int node_nr = inst->src[i].fixed_hw_reg.nr / reg_width;
> @@ -583,7 +583,7 @@ fs_visitor::choose_spill_reg(struct ra_graph *g)
> foreach_list(node, &this->instructions) {
> fs_inst *inst = (fs_inst *)node;
>
> - for (unsigned int i = 0; i < 3; i++) {
> + for (unsigned int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file == GRF) {
> spill_costs[inst->src[i].reg] += loop_scale;
>
> @@ -682,7 +682,7 @@ fs_visitor::spill_reg(int spill_reg)
> foreach_list(node, &this->instructions) {
> fs_inst *inst = (fs_inst *)node;
>
> - for (unsigned int i = 0; i < 3; i++) {
> + for (unsigned int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file == GRF &&
> inst->src[i].reg == spill_reg) {
> int regs_read = inst->regs_read(this, i);
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp b/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp
> index 01b672f..a0aa169 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp
> @@ -209,7 +209,7 @@ fs_visitor::register_coalesce()
> scan_inst->dst.reg = reg_to;
> scan_inst->dst.reg_offset = reg_to_offset[i];
> }
> - for (int j = 0; j < 3; j++) {
> + for (int j = 0; j < scan_inst->sources; j++) {
> if (scan_inst->src[j].file == GRF &&
> scan_inst->src[j].reg == reg_from &&
> scan_inst->src[j].reg_offset == i) {
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_saturate_propagation.cpp b/src/mesa/drivers/dri/i965/brw_fs_saturate_propagation.cpp
> index 35e6774..1b3d3b7 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_saturate_propagation.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_saturate_propagation.cpp
> @@ -70,7 +70,7 @@ opt_saturate_propagation_local(fs_visitor *v, bblock_t *block)
> }
> break;
> }
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < scan_inst->sources; i++) {
> if (scan_inst->src[i].file == GRF &&
> scan_inst->src[i].reg == inst->src[0].reg &&
> scan_inst->src[i].reg_offset == inst->src[0].reg_offset) {
> diff --git a/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp b/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp
> index 42fc5e4..34b036f 100644
> --- a/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp
> @@ -505,7 +505,7 @@ fs_instruction_scheduler::count_remaining_grf_uses(backend_instruction *be)
> if (inst->dst.file == GRF)
> remaining_grf_uses[inst->dst.reg]++;
>
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file != GRF)
> continue;
>
> @@ -526,7 +526,7 @@ fs_instruction_scheduler::update_register_pressure(backend_instruction *be)
> grf_active[inst->dst.reg] = true;
> }
>
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file == GRF) {
> remaining_grf_uses[inst->src[i].reg]--;
> grf_active[inst->src[i].reg] = true;
> @@ -547,7 +547,7 @@ fs_instruction_scheduler::get_register_pressure_benefit(backend_instruction *be)
> benefit -= v->virtual_grf_sizes[inst->dst.reg];
> }
>
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file != GRF)
> continue;
>
> @@ -781,7 +781,7 @@ fs_instruction_scheduler::calculate_deps()
> add_barrier_deps(n);
>
> /* read-after-write deps. */
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file == GRF) {
> if (post_reg_alloc) {
> for (int r = 0; r < reg_width * inst->regs_read(v, i); r++)
> @@ -905,7 +905,7 @@ fs_instruction_scheduler::calculate_deps()
> fs_inst *inst = (fs_inst *)n->inst;
>
> /* write-after-read deps. */
> - for (int i = 0; i < 3; i++) {
> + for (int i = 0; i < inst->sources; i++) {
> if (inst->src[i].file == GRF) {
> if (post_reg_alloc) {
> for (int r = 0; r < reg_width * inst->regs_read(v, i); r++)
More information about the mesa-dev
mailing list