From: Matt Turner Date: Tue, 11 Nov 2014 23:56:58 +0000 (-0800) Subject: i965: Don't treat IF or WHILE with cmod as writing the flag. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f1e5418f402c7ac087b1c127cb4476d0d02e0073;p=mesa.git i965: Don't treat IF or WHILE with cmod as writing the flag. Sandybridge's IF and WHILE instructions can do an embedded comparison with conditional mod. Reviewed-by: Kenneth Graunke --- diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 028eff23efa..37015ec607b 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -933,7 +933,9 @@ fs_inst::reads_flag() const bool fs_inst::writes_flag() const { - return (conditional_mod && opcode != BRW_OPCODE_SEL) || + return (conditional_mod && (opcode != BRW_OPCODE_SEL && + opcode != BRW_OPCODE_IF && + opcode != BRW_OPCODE_WHILE)) || opcode == FS_OPCODE_MOV_DISPATCH_TO_FLAGS; } diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h index 7d814ca65bd..abdab993be9 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.h +++ b/src/mesa/drivers/dri/i965/brw_vec4.h @@ -234,7 +234,9 @@ public: bool writes_flag() { - return conditional_mod && opcode != BRW_OPCODE_SEL; + return (conditional_mod && (opcode != BRW_OPCODE_SEL && + opcode != BRW_OPCODE_IF && + opcode != BRW_OPCODE_WHILE)); } };