i965/vs: Clear tracked copy propagation values whose source gets overwritten.

This only occurs for GRFs, and hasn't mattered until now because we
only copy propagated non-GRFs.
This commit is contained in:
Eric Anholt 2011-09-01 16:40:07 -07:00
parent cc9eb936c2
commit 6d0c018776

View file

@ -289,9 +289,6 @@ vec4_visitor::opt_copy_propagation()
/* For any updated channels, clear tracking of them as a source
* or destination.
*
* FINISHME: Sources aren't handled, which will need to be done
* for copy propagation.
*/
if (inst->dst.file == GRF) {
if (inst->dst.reladdr)
@ -303,6 +300,18 @@ vec4_visitor::opt_copy_propagation()
if (inst->dst.writemask & (1 << i))
cur_value[reg][i] = NULL;
}
for (int i = 0; i < virtual_grf_reg_count; i++) {
for (int j = 0; j < 4; j++) {
if (inst->dst.writemask & (1 << i) &&
cur_value[i][j] &&
cur_value[i][j]->file == GRF &&
cur_value[i][j]->reg == inst->dst.reg &&
cur_value[i][j]->reg == inst->dst.reg) {
cur_value[i][j] = NULL;
}
}
}
}
}
}