Mesa (master): i965/fs: Give up in interference check if we see a WHILE.

Matt Turner mattst88 at kemper.freedesktop.org
Fri Apr 18 17:18:13 UTC 2014


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

Author: Matt Turner <mattst88 at gmail.com>
Date:   Tue Apr 15 18:59:24 2014 -0700

i965/fs: Give up in interference check if we see a WHILE.

Rather than any old control flow. Muchnick's algorithm just checks for
interfering writes between the MOV and the end of the program. Handling
this when you have backward branches is hard, so don't, but there's no
reason to bail if you see forward branches.

instructions in affected programs:     4270 -> 4248 (-0.52%)

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp b/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp
index 020d992..b2ab386 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp
@@ -102,7 +102,7 @@ can_coalesce_vars(brw::fs_live_variables *live_intervals,
    for (scan_inst = (fs_inst *)inst->next;
         !scan_inst->is_tail_sentinel() && ip <= live_intervals->end[var_to];
         scan_inst = (fs_inst *)scan_inst->next, ip++) {
-      if (scan_inst->is_control_flow())
+      if (scan_inst->opcode == BRW_OPCODE_WHILE)
          return false;
 
       if (scan_inst->dst.equals(inst->dst) ||




More information about the mesa-commit mailing list