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

Author: Ian Romanick <[email protected]>
Date:   Wed Sep 12 17:16:50 2018 -0700

i965/fs: Don't propagate conditional modifiers from integer compares to adds

No shader-db changes on any Intel platform... which probably explains
why no bugs have been bisected to this problem since it landed in Mesa
18.1. :( The commit mentioned below is in 18.2, so 18.1 would need a
slightly different fix (due to code refactoring).

Signed-off-by: Ian Romanick <[email protected]>
Fixes: 77f269bb560 "i965/fs: Refactor propagation of conditional modifiers from 
compares to adds"
Reviewed-by: Alejandro PiƱeiro <[email protected]> (reviewed the original 
patch)
Cc: Matt Turner <[email protected]> (reviewed the original patch)

---

 src/intel/compiler/brw_fs_cmod_propagation.cpp | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/intel/compiler/brw_fs_cmod_propagation.cpp 
b/src/intel/compiler/brw_fs_cmod_propagation.cpp
index 5b74f26735..5fb522f810 100644
--- a/src/intel/compiler/brw_fs_cmod_propagation.cpp
+++ b/src/intel/compiler/brw_fs_cmod_propagation.cpp
@@ -211,9 +211,17 @@ opt_cmod_propagation_local(const gen_device_info *devinfo, 
bblock_t *block)
       /* A CMP with a second source of zero can match with anything.  A CMP
        * with a second source that is not zero can only match with an ADD
        * instruction.
+       *
+       * Only apply this optimization to float-point sources.  It can fail for
+       * integers.  For inputs a = 0x80000000, b = 4, int(0x80000000) < 4, but
+       * int(0x80000000) - 4 overflows and results in 0x7ffffffc.  that's not
+       * less than zero, so the flags get set differently than for (a < b).
        */
       if (inst->opcode == BRW_OPCODE_CMP && !inst->src[1].is_zero()) {
-         progress = cmod_propagate_cmp_to_add(devinfo, block, inst) || 
progress;
+         if (brw_reg_type_is_floating_point(inst->src[0].type) &&
+             cmod_propagate_cmp_to_add(devinfo, block, inst))
+            progress = true;
+
          continue;
       }
 

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to