i965: Fix compute_to_mrf to not move a MRF write up into another live range.
authorEric Anholt <eric@anholt.net>
Fri, 19 Nov 2010 05:53:28 +0000 (13:53 +0800)
committerEric Anholt <eric@anholt.net>
Sat, 20 Nov 2010 01:42:06 +0000 (17:42 -0800)
Fixes glsl-fs-copy-propagation-texcoords-1.

src/mesa/drivers/dri/i965/brw_fs.cpp

index 610b7e3c3ebad854a6ccf1b1fef2f6030316bafe..f202385e8f165d5d7594450e8ee68a489d72c96d 100644 (file)
@@ -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;
            }
         }