i965/fs: Give up in interference check if we see a WHILE.
authorMatt Turner <mattst88@gmail.com>
Wed, 16 Apr 2014 01:59:24 +0000 (18:59 -0700)
committerMatt Turner <mattst88@gmail.com>
Fri, 18 Apr 2014 16:16:19 +0000 (09:16 -0700)
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@whitecape.org>
src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp

index 020d992b15a537a4edc74e7e6ce708763d05e4a0..b2ab386ab6631e5285d762b7d19bd35e092f3718 100644 (file)
@@ -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) ||