summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp
index 4b33df1f105..7862d78ab33 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp
@@ -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;
+ }
+ }
+ }
}
}
}