brw: Fix mov cmod propagation when there's int signedness mismatch
If there's difference between scan_inst
dest
type and inst
src
type we
should be more careful, because difference in signedness can cause
incorrect results after the propagation.
For example, consider:
and(8) dest:UD src0:UD src1:UD
mov.g(8) null:F -dest:D
If src0
and src1
are 0xffffffff
, then dest:D
will be interpreted as -1, and -dest:D
will be 1, which is > 0.
If the cmod was propagated (and.l(8) dest:UD src0:UD src1:UD
), dest:UD
can never be < 0.
Fixes part of the misrenderings in #11800 (closed)
cc @llandwerlin @idr