Mesa (master): i965: Don' t treat IF or WHILE with cmod as writing the flag.

Matt Turner mattst88 at kemper.freedesktop.org
Tue Dec 2 00:44:38 UTC 2014


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

Author: Matt Turner <mattst88 at gmail.com>
Date:   Tue Nov 11 15:56:58 2014 -0800

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 <kenneth at whitecape.org>

---

 src/mesa/drivers/dri/i965/brw_fs.cpp |    4 +++-
 src/mesa/drivers/dri/i965/brw_vec4.h |    4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 028eff2..37015ec 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 7d814ca..abdab99 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));
    }
 };
 




More information about the mesa-commit mailing list