i965/vec4: Change opt_vector_float to keep track of the last offset seen in bytes.
authorFrancisco Jerez <currojerez@riseup.net>
Fri, 2 Sep 2016 04:51:07 +0000 (21:51 -0700)
committerFrancisco Jerez <currojerez@riseup.net>
Wed, 14 Sep 2016 21:50:58 +0000 (14:50 -0700)
This simplifies things slightly and makes the pass more correct in
presence of sub-GRF offsets.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
src/mesa/drivers/dri/i965/brw_vec4.cpp

index 49f3a322e3f9208226f5a52f3d8efac9b1a3411a..dc484ba7cdffe9f98cec284402076b3044981920 100644 (file)
@@ -365,7 +365,7 @@ vec4_visitor::opt_vector_float()
    bool progress = false;
 
    foreach_block(block, cfg) {
-      int last_reg = -1, last_reg_offset = -1;
+      int last_reg = -1, last_offset = -1;
       enum brw_reg_file last_reg_file = BAD_FILE;
 
       uint8_t imm[4] = { 0 };
@@ -405,7 +405,7 @@ vec4_visitor::opt_vector_float()
           * sequence.  Combine anything we've accumulated so far.
           */
          if (last_reg != inst->dst.nr ||
-             last_reg_offset != inst->dst.offset / REG_SIZE ||
+             last_offset != inst->dst.offset ||
              last_reg_file != inst->dst.file ||
              (vf > 0 && dest_type != need_type)) {
 
@@ -449,7 +449,7 @@ vec4_visitor::opt_vector_float()
             imm_inst[inst_count++] = inst;
 
             last_reg = inst->dst.nr;
-            last_reg_offset = inst->dst.offset / REG_SIZE;
+            last_offset = inst->dst.offset;
             last_reg_file = inst->dst.file;
             if (vf > 0)
                dest_type = need_type;