From 6d0c018776977219e355c534eaafec53a30d993b Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 1 Sep 2011 16:40:07 -0700 Subject: [PATCH] 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. --- .../dri/i965/brw_vec4_copy_propagation.cpp | 15 ++++++++++++--- 1 file 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; + } + } + } } } } -- 2.30.2