i965/vec4: Print src/dst_reg::offset field consistently for all register files.
authorFrancisco Jerez <currojerez@riseup.net>
Fri, 2 Sep 2016 20:52:54 +0000 (13:52 -0700)
committerFrancisco Jerez <currojerez@riseup.net>
Wed, 14 Sep 2016 21:50:57 +0000 (14:50 -0700)
C.f. 'i965/fs: Print fs_reg::offset field consistently for all
register files.'.

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

index eaf2dd54ffed969b12c25fb103cba1df1eaeb2f6..19ee088cf528bcb7b82f981cc9f9a009c6334ae3 100644 (file)
@@ -1425,7 +1425,7 @@ vec4_visitor::dump_instruction(backend_instruction *be_inst, FILE *file)
 
    switch (inst->dst.file) {
    case VGRF:
-      fprintf(file, "vgrf%d.%d", inst->dst.nr, inst->dst.offset / REG_SIZE);
+      fprintf(file, "vgrf%d", inst->dst.nr);
       break;
    case FIXED_GRF:
       fprintf(file, "g%d", inst->dst.nr);
@@ -1462,6 +1462,13 @@ vec4_visitor::dump_instruction(backend_instruction *be_inst, FILE *file)
    case UNIFORM:
       unreachable("not reached");
    }
+   if (inst->dst.offset ||
+       (inst->dst.file == VGRF &&
+        alloc.sizes[inst->dst.nr] * REG_SIZE != inst->size_written)) {
+      const unsigned reg_size = (inst->dst.file == UNIFORM ? 16 : REG_SIZE);
+      fprintf(file, "+%d.%d", inst->dst.offset / reg_size,
+              inst->dst.offset % reg_size);
+   }
    if (inst->dst.writemask != WRITEMASK_XYZW) {
       fprintf(file, ".");
       if (inst->dst.writemask & 1)
@@ -1547,11 +1554,13 @@ vec4_visitor::dump_instruction(backend_instruction *be_inst, FILE *file)
          unreachable("not reached");
       }
 
-      /* Don't print .0; and only VGRFs have reg_offsets and sizes */
-      if (inst->src[i].offset / REG_SIZE != 0 &&
-          inst->src[i].file == VGRF &&
-          alloc.sizes[inst->src[i].nr] != 1)
-         fprintf(file, ".%d", inst->src[i].offset / REG_SIZE);
+      if (inst->src[i].offset ||
+          (inst->src[i].file == VGRF &&
+           alloc.sizes[inst->src[i].nr] * REG_SIZE != inst->size_read(i))) {
+         const unsigned reg_size = (inst->src[i].file == UNIFORM ? 16 : REG_SIZE);
+         fprintf(file, "+%d.%d", inst->src[i].offset / reg_size,
+                 inst->src[i].offset % reg_size);
+      }
 
       if (inst->src[i].file != IMM) {
          static const char *chans[4] = {"x", "y", "z", "w"};