Browse Source

i965/fs: don't make unused payload registers interfere

Before, we were setting payload_last_use_ip for unused payload
registers to 0, which made them interfere with whatever the first
instruction wrote to due to the workaround for SIMD16 uniform arguments.
Just use -1 to mean "unused" instead, and then skip setting any
interferences for unused payload registers.

instructions in affected programs:     0 -> 0
helped:                                0
HURT:                                  0
GAINED:                                1
LOST:                                  0

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Signed-off-by: Connor Abbott <connor.w.abbott@intel.com>
tags/11.0-branchpoint
Connor Abbott 10 years ago
parent
commit
bde4c8ec1f
1 changed files with 6 additions and 1 deletions
  1. 6
    1
      src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp

+ 6
- 1
src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp View File

@@ -341,7 +341,9 @@ fs_visitor::setup_payload_interference(struct ra_graph *g,
int loop_end_ip = 0;

int payload_last_use_ip[payload_node_count];
memset(payload_last_use_ip, 0, sizeof(payload_last_use_ip));
for (int i = 0; i < payload_node_count; i++)
payload_last_use_ip[i] = -1;

int ip = 0;
foreach_block_and_inst(block, fs_inst, inst, cfg) {
switch (inst->opcode) {
@@ -411,6 +413,9 @@ fs_visitor::setup_payload_interference(struct ra_graph *g,
}

for (int i = 0; i < payload_node_count; i++) {
if (payload_last_use_ip[i] == -1)
continue;

/* Mark the payload node as interfering with any virtual grf that is
* live between the start of the program and our last use of the payload
* node.

Loading…
Cancel
Save