Commit 2971f079 authored by Ian Romanick's avatar Ian Romanick Committed by Dylan Baker

nir/algebraic: Mark some value range analysis-based optimizations imprecise

This didn't fix bug #111308, but it was found will trying to find the
actual cause of that bug.

Fixes piglit tests (new in piglit!110):

    - fs-fract-of-NaN.shader_test
    - fs-lt-nan-tautology.shader_test
    - fs-ge-nan-tautology.shader_test

No shader-db changes on any Intel platform.

Fixes: b77070e2 ("nir/algebraic: Use value range analysis to eliminate tautological compares")
Reviewed-by: Alyssa Rosenzweig's avatarAlyssa Rosenzweig <>
Reviewed-by: Caio Marcelo de Oliveira Filho's avatarCaio Marcelo de Oliveira Filho <>
(cherry picked from commit ccb236d1)
parent da03ddf6
......@@ -806,7 +806,8 @@ optimizations.extend([
(('ffloor', 'a(is_integral)'), a),
(('fceil', 'a(is_integral)'), a),
(('ftrunc', 'a(is_integral)'), a),
(('ffract', 'a(is_integral)'), 0.0),
# fract(x) = x - floor(x), so fract(NaN) = NaN
(('~ffract', 'a(is_integral)'), 0.0),
(('fabs', 'a(is_not_negative)'), a),
(('iabs', 'a(is_not_negative)'), a),
(('fsat', 'a(is_not_positive)'), 0.0),
......@@ -836,15 +837,18 @@ optimizations.extend([
(('fne', 'a(is_not_zero)', 0.0), True),
(('feq', 'a(is_not_zero)', 0.0), False),
(('fge', 'a(is_not_negative)', 'b(is_not_positive)'), True),
(('fge', 'b(is_not_positive)', 'a(is_gt_zero)'), False),
(('fge', 'a(is_lt_zero)', 'b(is_not_negative)'), False),
(('fge', 'b(is_not_negative)', 'a(is_not_positive)'), True),
# The results expecting true, must be marked imprecise. The results
# expecting false are fine because NaN compared >= or < anything is false.
(('flt', 'a(is_not_negative)', 'b(is_not_positive)'), False),
(('flt', 'b(is_not_positive)', 'a(is_gt_zero)'), True),
(('flt', 'a(is_lt_zero)', 'b(is_not_negative)'), True),
(('flt', 'b(is_not_negative)', 'a(is_not_positive)'), False),
(('~fge', 'a(is_not_negative)', 'b(is_not_positive)'), True),
(('fge', 'b(is_not_positive)', 'a(is_gt_zero)'), False),
(('fge', 'a(is_lt_zero)', 'b(is_not_negative)'), False),
(('~fge', 'b(is_not_negative)', 'a(is_not_positive)'), True),
(('flt', 'a(is_not_negative)', 'b(is_not_positive)'), False),
(('~flt', 'b(is_not_positive)', 'a(is_gt_zero)'), True),
(('~flt', 'a(is_lt_zero)', 'b(is_not_negative)'), True),
(('flt', 'b(is_not_negative)', 'a(is_not_positive)'), False),
(('ine', 'a(is_not_zero)', 0), True),
(('ieq', 'a(is_not_zero)', 0), False),
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment