summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2012-11-30 15:54:19 -0800
committerEric Anholt <[email protected]>2012-12-14 16:05:48 -0800
commit78ce522932e8c356880c7ca10dace4b6fe6cf313 (patch)
tree4e5d9db3f04c1a5e1fb437619054f57955c2069b
parent7baf9198b201666fc0f20fe407d7b46ee0ca7ef5 (diff)
i965/fs: Add a note explaining a detail of register_coalesce_2().
Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 5d765e088aa..94d200eb5d4 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -1855,7 +1855,28 @@ fs_visitor::register_coalesce_2()
}
inst->remove();
+
+ /* We don't need to recalculate live intervals inside the loop despite
+ * flagging live_intervals_valid because we only use live intervals for
+ * the interferes test, and we must have had a situation where the
+ * intervals were:
+ *
+ * from to
+ * ^
+ * |
+ * v
+ * ^
+ * |
+ * v
+ *
+ * Some register R that might get coalesced with one of these two could
+ * only be referencing "to", otherwise "from"'s range would have been
+ * longer. R's range could also only start at the end of "to" or later,
+ * otherwise it will conflict with "to" when we try to coalesce "to"
+ * into Rw anyway.
+ */
live_intervals_valid = false;
+
progress = true;
continue;
}