[Mesa-dev] [PATCH 2/3] i965/vec4: use byte_offset() instead of offset()

Iago Toral Quiroga itoral at igalia.com
Tue Oct 4 07:52:18 UTC 2016


In a later patch we want to change the semantics of offset() to be in terms
of SIMD width and scalar channels so it is consistent with the definition
of the same helper in the scalar backend. However, some uses of offset()
in the vec4 backend do not operate naturally in terms of these
semantics. In these cases it is more natural to use the byte_offset() helper
instead.
---
 src/mesa/drivers/dri/i965/brw_vec4_cse.cpp               | 10 ++++++----
 .../drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp    | 16 +++++++++++-----
 src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp    | 13 +++++++++----
 src/mesa/drivers/dri/i965/brw_vec4_tcs.cpp               |  3 ++-
 src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp           |  2 +-
 5 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp b/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp
index 1b91db9..bf7e4a4 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp
@@ -182,8 +182,9 @@ vec4_visitor::opt_cse_local(bblock_t *block)
                                            NULL), inst->dst.type);
 
                for (unsigned i = 0; i < regs_written(entry->generator); ++i) {
-                  vec4_instruction *copy = MOV(offset(entry->generator->dst, i),
-                                               offset(entry->tmp, i));
+                  vec4_instruction *copy =
+                     MOV(byte_offset(entry->generator->dst, i * REG_SIZE),
+                         byte_offset(entry->tmp, i * REG_SIZE));
                   copy->force_writemask_all =
                      entry->generator->force_writemask_all;
                   entry->generator->insert_after(block, copy);
@@ -197,8 +198,9 @@ vec4_visitor::opt_cse_local(bblock_t *block)
                assert(inst->dst.type == entry->tmp.type);
 
                for (unsigned i = 0; i < regs_written(inst); ++i) {
-                  vec4_instruction *copy = MOV(offset(inst->dst, i),
-                                               offset(entry->tmp, i));
+                  vec4_instruction *copy =
+                     MOV(byte_offset(inst->dst, i * REG_SIZE),
+                         byte_offset(entry->tmp, i * REG_SIZE));
                   copy->force_writemask_all = inst->force_writemask_all;
                   inst->insert_before(block, copy);
                }
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp b/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp
index 50706a9..916a3fb 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp
@@ -61,8 +61,9 @@ vec4_visitor::dead_code_eliminate()
             if (inst->dst.file == VGRF) {
                for (unsigned i = 0; i < regs_written(inst); i++) {
                   for (int c = 0; c < 4; c++)
-                     result_live[c] |= BITSET_TEST(
-                        live, var_from_reg(alloc, offset(inst->dst, i), c));
+                     result_live[c] |= BITSET_TEST(live,
+                        var_from_reg(alloc,
+                                     byte_offset(inst->dst, i * REG_SIZE), c));
                }
             } else {
                for (unsigned c = 0; c < 4; c++)
@@ -113,8 +114,11 @@ vec4_visitor::dead_code_eliminate()
             for (unsigned i = 0; i < regs_written(inst); i++) {
                for (int c = 0; c < 4; c++) {
                   if (inst->dst.writemask & (1 << c)) {
-                     BITSET_CLEAR(live, var_from_reg(alloc,
-                                                     offset(inst->dst, i), c));
+                     BITSET_CLEAR(live,
+                                  var_from_reg(alloc,
+                                               byte_offset(inst->dst,
+                                                           i * REG_SIZE),
+                                               c));
                   }
                }
             }
@@ -135,7 +139,9 @@ vec4_visitor::dead_code_eliminate()
                for (unsigned j = 0; j < regs_read(inst, i); j++) {
                   for (int c = 0; c < 4; c++) {
                      BITSET_SET(live, var_from_reg(alloc,
-                                                   offset(inst->src[i], j), c));
+                                                   byte_offset(inst->src[i],
+                                                               j * REG_SIZE),
+                                                   c));
                   }
                }
             }
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp b/src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp
index 20344ed..b70d6c2 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp
@@ -79,7 +79,9 @@ vec4_live_variables::setup_def_use()
                for (unsigned j = 0; j < regs_read(inst, i); j++) {
                   for (int c = 0; c < 4; c++) {
                      const unsigned v =
-                        var_from_reg(alloc, offset(inst->src[i], j), c);
+                        var_from_reg(alloc,
+                                     byte_offset(inst->src[i], j * REG_SIZE),
+                                     c);
                      if (!BITSET_TEST(bd->def, v))
                         BITSET_SET(bd->use, v);
                   }
@@ -103,7 +105,8 @@ vec4_live_variables::setup_def_use()
                for (int c = 0; c < 4; c++) {
                   if (inst->dst.writemask & (1 << c)) {
                      const unsigned v =
-                        var_from_reg(alloc, offset(inst->dst, i), c);
+                        var_from_reg(alloc,
+                                     byte_offset(inst->dst, i * REG_SIZE), c);
                      if (!BITSET_TEST(bd->use, v))
                         BITSET_SET(bd->def, v);
                   }
@@ -260,7 +263,8 @@ vec4_visitor::calculate_live_intervals()
             for (unsigned j = 0; j < regs_read(inst, i); j++) {
                for (int c = 0; c < 4; c++) {
                   const unsigned v =
-                     var_from_reg(alloc, offset(inst->src[i], j), c);
+                     var_from_reg(alloc,
+                                  byte_offset(inst->src[i], j * REG_SIZE), c);
                   start[v] = MIN2(start[v], ip);
                   end[v] = ip;
                }
@@ -273,7 +277,8 @@ vec4_visitor::calculate_live_intervals()
             for (int c = 0; c < 4; c++) {
                if (inst->dst.writemask & (1 << c)) {
                   const unsigned v =
-                     var_from_reg(alloc, offset(inst->dst, i), c);
+                     var_from_reg(alloc,
+                                  byte_offset(inst->dst, i * REG_SIZE), c);
                   start[v] = MIN2(start[v], ip);
                   end[v] = ip;
                }
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_tcs.cpp b/src/mesa/drivers/dri/i965/brw_vec4_tcs.cpp
index 498fb7c..95f5c33 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_tcs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_tcs.cpp
@@ -240,7 +240,8 @@ vec4_tcs_visitor::emit_urb_write(const src_reg &value,
    inst = emit(TCS_OPCODE_SET_OUTPUT_URB_OFFSETS, dst_reg(message),
                brw_imm_ud(writemask), indirect_offset);
    inst->force_writemask_all = true;
-   inst = emit(MOV(offset(dst_reg(retype(message, value.type)), 1), value));
+   inst = emit(MOV(byte_offset(dst_reg(retype(message, value.type)), REG_SIZE),
+                   value));
    inst->force_writemask_all = true;
 
    inst = emit(TCS_OPCODE_URB_WRITE, dst_null_f(), message);
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
index 3e785bc..814d624 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
@@ -781,7 +781,7 @@ vec4_visitor::emit_pull_constant_load_reg(dst_reg dst,
       else
          emit(pull);
 
-      dst_reg index_reg = retype(offset(dst_reg(header), 1),
+      dst_reg index_reg = retype(byte_offset(dst_reg(header), REG_SIZE),
                                  offset_reg.type);
       pull = MOV(writemask(index_reg, WRITEMASK_X), offset_reg);
 
-- 
2.7.4



More information about the mesa-dev mailing list