[Mesa-dev] [PATCH 3/4] i965/vs: Clear tracked copy propagation values whose source gets overwritten.
Eric Anholt
eric at anholt.net
Fri Sep 2 11:32:12 PDT 2011
This only occurs for GRFs, and hasn't mattered until now because we
only copy propagated non-GRFs.
---
.../drivers/dri/i965/brw_vec4_copy_propagation.cpp | 15 ++++++++++++---
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 4b33df1..7862d78 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;
+ }
+ }
+ }
}
}
}
--
1.7.5.4
More information about the mesa-dev
mailing list