diff options
-rw-r--r-- | src/mesa/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 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; + } + } + } } } } |