diff options
author | Matt Turner <[email protected]> | 2014-09-04 20:08:16 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2014-09-05 09:53:21 -0700 |
commit | ef8477cddf9a6b1e13608e4fad9b55c86d0e5af4 (patch) | |
tree | d6d89662eefec7960e849985f9d3a31be885580c /src/mesa/drivers/dri/i965 | |
parent | 248eaff63d9a5484df1105a0c484d20e086f5f83 (diff) |
i965/fs: Fix basic block tracking in try_rep_send().
The 'start' instruction is always in the current block, except for the
case of shader time, which emits code in a pattern seen no where else.
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 23a8f2ff80d..20acafa52b4 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -2314,6 +2314,7 @@ fs_visitor::try_rep_send() { int i, count; fs_inst *start = NULL; + bblock_t *mov_block; /* From the Ivybridge PRM, Volume 4 Part 1, section 3.9.11.2 * ("Message Descriptor - Render Target Write"): @@ -2343,15 +2344,19 @@ fs_visitor::try_rep_send() */ count = 0; foreach_block_and_inst_safe(block, fs_inst, inst, cfg) { - if (count == 0) + if (count == 0) { start = inst; + mov_block = block; + } if (inst->opcode == BRW_OPCODE_MOV && inst->dst.file == MRF && inst->dst.reg == start->dst.reg + 2 * count && inst->src[0].file == HW_REG && inst->src[0].reg_offset == start->src[0].reg_offset + count) { - if (count == 0) + if (count == 0) { start = inst; + mov_block = block; + } count++; } @@ -2381,9 +2386,9 @@ fs_visitor::try_rep_send() mov->dst.type = BRW_REGISTER_TYPE_F; /* Replace the four MOVs with the new vec4 MOV. */ - start->insert_before(block, mov); + start->insert_before(mov_block, mov); for (i = 0; i < 4; i++) - ((fs_inst *) mov->next)->remove(block); + ((fs_inst *) mov->next)->remove(mov_block); /* Finally, adjust the message length and set the opcode to * REP_FB_WRITE for the send, so that the generator will use the |