Skip to content

intel/compiler: don't propagate cmp to add if add is saturated

Yevhenii Kolesnikov requested to merge GL/mesa:fix/cmod_sat_cmp_to_add into master

From the Kaby Lake PRM Vol. 7 "Assigning Conditional Flags":

   * Note that the [post condition signal] bits generated at
     the output of a compute are before the .sat.

Paragraph about post_zero does not mention saturation, but testing it on actual GPUs shows that conditional modifiers are applied after saturation.

   * post_zero bit: This bit reflects whether the final
     result is zero after all the clamping, normalizing,
     or format conversion logic.

For signed types we don't care about saturation: it won't change the result of conditional modifier.

For floating and unsigned types there two special cases, when we can remove inst even if scan_inst is saturated: G and LE. Since conditional modifiers are just comparations against zero, saturating positive values to the upper limit never changes the result of comparation.

For negative values:

(sat(x) >  0) == (x >  0) --- false
(sat(x) <= 0) == (x <= 0) --- true

Piglit tests: piglit!246 (merged)

Signed-off-by: Yevhenii Kolesnikov yevhenii.kolesnikov@globallogic.com

Edited by Yevhenii Kolesnikov

Merge request reports