i965/fs: Loop from 0 to inst->sources, not 0 to 3.
authorMatt Turner <mattst88@gmail.com>
Mon, 17 Mar 2014 17:39:43 +0000 (10:39 -0700)
committerMatt Turner <mattst88@gmail.com>
Sun, 1 Jun 2014 20:29:24 +0000 (13:29 -0700)
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
src/mesa/drivers/dri/i965/brw_fs_cse.cpp
src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp
src/mesa/drivers/dri/i965/brw_fs_generator.cpp
src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp
src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp
src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp
src/mesa/drivers/dri/i965/brw_fs_saturate_propagation.cpp
src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp

index 5a7e270aba40729f61dca9dc2e1fe0e4f70526b8..ba69107b10001ac2cf6809c5bd045232dae580b4 100644 (file)
@@ -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;
             }
@@ -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;
@@ -2699,7 +2699,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)
@@ -2788,7 +2788,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, ", ");
    }
 
index 069b60fe22a8d4dfb90b58a2be9e1e6ea02ff90a..a1aff21fd3af1d0b74be400656d3c63dc96ca243 100644 (file)
@@ -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;
 
index ea610bd554c87311fa47dfbbde120768d0335c66..94f657dd213241df8b6cd04ebe846ff1c6d32b24 100644 (file)
@@ -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
index dfeceb006194ae6e78ccf51ac08eda12a2227956..962d8c6f414793a4e84ada01f182b60265cc66b2 100644 (file)
@@ -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];
 
index 6ba8bb98295d8a5bdf11cb2d5d4c548ea68f4ebb..a5be0ec47bfde1b2a73dfc7d547181930302923b 100644 (file)
@@ -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
index a3ccf9931a77053652112414da21e9e633635951..d39724a5ce383b288030bbac8f1cd881e58d1575 100644 (file)
@@ -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)
index bbaf8107ec7f1074c87a2225bfcff781159c1968..4ff6f18ffdec6af19d8eeec02ce069e2d0792cea 100644 (file)
@@ -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);
index 01b672f36ddff80e8c1310fca1a0c4afafcf69fe..a0aa1691c95f3cffa1f011160355b67b0af8db16 100644 (file)
@@ -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) {
index 35e677401374f94642251c1dc53c0f9a8d397baa..1b3d3b76d13655035dbbf5a6debfe4ee16f42c59 100644 (file)
@@ -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) {
index 42fc5e476b98eacbad08323ab1a8a1959411b824..34b036f321239e236082d35eade233d987f220d2 100644 (file)
@@ -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++)