Mesa (master): i965/vs: Clear tracked copy propagation values whose source gets overwritten.

Eric Anholt anholt at kemper.freedesktop.org
Fri Sep 9 05:34:02 UTC 2011


Module: Mesa
Branch: master
Commit: 6d0c018776977219e355c534eaafec53a30d993b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6d0c018776977219e355c534eaafec53a30d993b

Author: Eric Anholt <eric at anholt.net>
Date:   Thu Sep  1 16:40:07 2011 -0700

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.

---

 .../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;
+		  }
+	       }
+	    }
 	 }
       }
    }




More information about the mesa-commit mailing list