summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gmail.com>2014-09-04 20:08:16 -0700
committerKenneth Graunke <kenneth@whitecape.org>2014-09-05 09:53:21 -0700
commitef8477cddf9a6b1e13608e4fad9b55c86d0e5af4 (patch)
treed6d89662eefec7960e849985f9d3a31be885580c
parent248eaff63d9a5484df1105a0c484d20e086f5f83 (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 <kenneth@whitecape.org>
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs.cpp13
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