[Mesa-dev] [PATCH 3/5] i965/fs: Remove the requirement of no dead code for interference checks.

Eric Anholt eric at anholt.net
Tue May 8 17:59:37 PDT 2012


This will be convenient when I want to comment out optimization code
to see the raw program being optimized, but more importantly will let
the interference check be used during optimization.
---
 .../drivers/dri/i965/brw_fs_live_variables.cpp     |   24 ++++++++++----------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp b/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp
index c7ee582..46408da 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp
@@ -226,19 +226,19 @@ fs_visitor::calculate_live_intervals()
 bool
 fs_visitor::virtual_grf_interferes(int a, int b)
 {
-   int start = MAX2(this->virtual_grf_def[a], this->virtual_grf_def[b]);
-   int end = MIN2(this->virtual_grf_use[a], this->virtual_grf_use[b]);
-
-   /* We can't handle dead register writes here, without iterating
-    * over the whole instruction stream to find every single dead
-    * write to that register to compare to the live interval of the
-    * other register.  Just assert that dead_code_eliminate() has been
-    * called.
+   int a_def = this->virtual_grf_def[a], a_use = this->virtual_grf_use[a];
+   int b_def = this->virtual_grf_def[b], b_use = this->virtual_grf_use[b];
+
+   /* If there's dead code (def but not use), it would break our test
+    * unless we consider it used.
     */
-   assert((this->virtual_grf_use[a] != -1 ||
-	   this->virtual_grf_def[a] == MAX_INSTRUCTION) &&
-	  (this->virtual_grf_use[b] != -1 ||
-	   this->virtual_grf_def[b] == MAX_INSTRUCTION));
+   if ((a_use == -1 && a_def != MAX_INSTRUCTION) ||
+       (b_use == -1 && b_def != MAX_INSTRUCTION)) {
+      return true;
+   }
+
+   int start = MAX2(a_def, b_def);
+   int end = MIN2(a_use, b_use);
 
    /* If the register is used to store 16 values of less than float
     * size (only the case for pixel_[xy]), then we can't allocate
-- 
1.7.10



More information about the mesa-dev mailing list