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 <ian.d.romanick@intel.com>
Fixes: 77f269bb56
"i965/fs: Refactor propagation of conditional modifiers from compares to adds"
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com> (reviewed the original patch)
Cc: Matt Turner <mattst88@gmail.com> (reviewed the original patch)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user