summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2017-10-04 13:49:29 -0700
committerJason Ekstrand <[email protected]>2017-10-05 11:54:49 -0700
commitb91ecee04ab2a5b23ff2418b4d709252878cf894 (patch)
treeabde0c4d8aad0ed433bfdb35c65ee9bad268df26
parent17d78ece36a08d79b95182e36ed99cb65de905ce (diff)
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 <[email protected]> Cc: [email protected]
-rw-r--r--src/intel/compiler/brw_fs_cmod_propagation.cpp8
-rw-r--r--src/intel/compiler/brw_vec4_cmod_propagation.cpp8
2 files changed, 16 insertions, 0 deletions
diff --git a/src/intel/compiler/brw_fs_cmod_propagation.cpp b/src/intel/compiler/brw_fs_cmod_propagation.cpp
index 2d50c92e9e3..db63e942b75 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 4454cdbfc94..05e65168193 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)