Mesa (master): intel/compiler: Don' t cmod propagate into a saturated operation

Jason Ekstrand jekstrand at kemper.freedesktop.org
Thu Oct 5 18:55:04 UTC 2017


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

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Wed Oct  4 13:49:29 2017 -0700

intel/compiler: Don't cmod propagate into a saturated operation

Shader-db results on Sky Lake:

    total instructions in shared programs: 12954445 -> 12955125 (0.01%)
    instructions in affected programs: 141862 -> 142542 (0.48%)
    helped: 0
    HURT: 626

Reviewed-by: Matt Turner <mattst88 at gmail.com>
Cc: mesa-stable at lists.freedesktop.org

---

 src/intel/compiler/brw_fs_cmod_propagation.cpp   | 8 ++++++++
 src/intel/compiler/brw_vec4_cmod_propagation.cpp | 8 ++++++++
 2 files changed, 16 insertions(+)

diff --git a/src/intel/compiler/brw_fs_cmod_propagation.cpp b/src/intel/compiler/brw_fs_cmod_propagation.cpp
index 2d50c92e9e..db63e942b7 100644
--- a/src/intel/compiler/brw_fs_cmod_propagation.cpp
+++ b/src/intel/compiler/brw_fs_cmod_propagation.cpp
@@ -142,6 +142,14 @@ opt_cmod_propagation_local(const gen_device_info *devinfo, bblock_t *block)
                 scan_inst->opcode == BRW_OPCODE_CMPN)
                break;
 
+            /* From the Sky Lake PRM Vol. 7 "Assigning Conditional Mods":
+             *
+             *    * Note that the [post condition signal] bits generated at
+             *      the output of a compute are before the .sat.
+             */
+            if (scan_inst->saturate)
+               break;
+
             /* Otherwise, try propagating the conditional. */
             enum brw_conditional_mod cond =
                inst->src[0].negate ? brw_swap_cmod(inst->conditional_mod)
diff --git a/src/intel/compiler/brw_vec4_cmod_propagation.cpp b/src/intel/compiler/brw_vec4_cmod_propagation.cpp
index 4454cdbfc9..05e6516819 100644
--- a/src/intel/compiler/brw_vec4_cmod_propagation.cpp
+++ b/src/intel/compiler/brw_vec4_cmod_propagation.cpp
@@ -129,6 +129,14 @@ opt_cmod_propagation_local(bblock_t *block)
                 scan_inst->opcode == BRW_OPCODE_CMPN)
                break;
 
+            /* From the Sky Lake PRM Vol. 7 "Assigning Conditional Mods":
+             *
+             *    * Note that the [post condition signal] bits generated at
+             *      the output of a compute are before the .sat.
+             */
+            if (scan_inst->saturate)
+               break;
+
             /* Otherwise, try propagating the conditional. */
             enum brw_conditional_mod cond =
                inst->src[0].negate ? brw_swap_cmod(inst->conditional_mod)




More information about the mesa-commit mailing list