Mesa (master): i965: Fix compute_to_mrf to not move a MRF write up into another live range.

Eric Anholt anholt at kemper.freedesktop.org
Sat Nov 20 02:58:22 UTC 2010


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

Author: Eric Anholt <eric at anholt.net>
Date:   Fri Nov 19 13:53:28 2010 +0800

i965: Fix compute_to_mrf to not move a MRF write up into another live range.

Fixes glsl-fs-copy-propagation-texcoords-1.

---

 src/mesa/drivers/dri/i965/brw_fs.cpp |   12 +++++-------
 1 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 610b7e3..f202385 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -2975,15 +2975,13 @@ fs_visitor::compute_to_mrf()
 	 }
 
 	 if (scan_inst->mlen > 0) {
-	    /* Found a SEND instruction, which will do some amount of
-	     * implied write that may overwrite our MRF that we were
-	     * hoping to compute-to-MRF somewhere above it.  Nothing
-	     * we have implied-writes more than 2 MRFs from base_mrf,
-	     * though.
+	    /* Found a SEND instruction, which means that there are
+	     * live values in MRFs from base_mrf to base_mrf +
+	     * scan_inst->mlen - 1.  Don't go pushing our MRF write up
+	     * above it.
 	     */
-	    int implied_write_len = MIN2(scan_inst->mlen, 2);
 	    if (inst->dst.hw_reg >= scan_inst->base_mrf &&
-		inst->dst.hw_reg < scan_inst->base_mrf + implied_write_len) {
+		inst->dst.hw_reg < scan_inst->base_mrf + scan_inst->mlen) {
 	       break;
 	    }
 	 }




More information about the mesa-commit mailing list