From: Matt Turner Date: Wed, 16 Apr 2014 01:59:24 +0000 (-0700) Subject: i965/fs: Give up in interference check if we see a WHILE. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=55de1c035cbca2b7087b3aa21a8c3dfc900a4ad9;p=mesa.git 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 --- 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 020d992b15a..b2ab386ab66 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) ||