Mesa (master): nir/range_analysis: Simplify analysis of bcsel

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Mar 11 22:21:51 UTC 2021


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

Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Tue Feb 16 13:41:27 2021 -0800

nir/range_analysis: Simplify analysis of bcsel

union_ranges was previously guarded by 'ifndef NDEBUG'.  After removing
that, I noticed that the two tables were identical.

Reviewed-by: Rhys Perry <pendingchaos02 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9108>

---

 src/compiler/nir/nir_range_analysis.c | 57 +----------------------------------
 1 file changed, 1 insertion(+), 56 deletions(-)

diff --git a/src/compiler/nir/nir_range_analysis.c b/src/compiler/nir/nir_range_analysis.c
index 9bb5c50fd6a..0baf31a6f5a 100644
--- a/src/compiler/nir/nir_range_analysis.c
+++ b/src/compiler/nir/nir_range_analysis.c
@@ -605,62 +605,7 @@ analyze_expression(const nir_alu_instr *instr, unsigned src,
       r.is_a_number = left.is_a_number && right.is_a_number;
       r.is_finite = left.is_finite && right.is_finite;
 
-      /* le_zero: bcsel(<any>, le_zero, lt_zero)
-       *        | bcsel(<any>, eq_zero, lt_zero)
-       *        | bcsel(<any>, le_zero, eq_zero)
-       *        | bcsel(<any>, lt_zero, le_zero)
-       *        | bcsel(<any>, lt_zero, eq_zero)
-       *        | bcsel(<any>, eq_zero, le_zero)
-       *        | bcsel(<any>, le_zero, le_zero)
-       *        ;
-       *
-       * lt_zero: bcsel(<any>, lt_zero, lt_zero)
-       *        ;
-       *
-       * ge_zero: bcsel(<any>, ge_zero, ge_zero)
-       *        | bcsel(<any>, ge_zero, gt_zero)
-       *        | bcsel(<any>, ge_zero, eq_zero)
-       *        | bcsel(<any>, gt_zero, ge_zero)
-       *        | bcsel(<any>, eq_zero, ge_zero)
-       *        ;
-       *
-       * gt_zero: bcsel(<any>, gt_zero, gt_zero)
-       *        ;
-       *
-       * ne_zero: bcsel(<any>, ne_zero, gt_zero)
-       *        | bcsel(<any>, ne_zero, lt_zero)
-       *        | bcsel(<any>, gt_zero, lt_zero)
-       *        | bcsel(<any>, gt_zero, ne_zero)
-       *        | bcsel(<any>, lt_zero, ne_zero)
-       *        | bcsel(<any>, lt_zero, gt_zero)
-       *        | bcsel(<any>, ne_zero, ne_zero)
-       *        ;
-       *
-       * eq_zero: bcsel(<any>, eq_zero, eq_zero)
-       *        ;
-       *
-       * All other cases are 'unknown'.
-       *
-       * The ranges could be tightened if the range of the first source is
-       * known.  However, opt_algebraic will (eventually) elminiate the bcsel
-       * if the condition is known.
-       */
-      static const enum ssa_ranges table[last_range + 1][last_range + 1] = {
-         /* left\right   unknown  lt_zero  le_zero  gt_zero  ge_zero  ne_zero  eq_zero */
-         /* unknown */ { _______, _______, _______, _______, _______, _______, _______ },
-         /* lt_zero */ { _______, lt_zero, le_zero, ne_zero, _______, ne_zero, le_zero },
-         /* le_zero */ { _______, le_zero, le_zero, _______, _______, _______, le_zero },
-         /* gt_zero */ { _______, ne_zero, _______, gt_zero, ge_zero, ne_zero, ge_zero },
-         /* ge_zero */ { _______, _______, _______, ge_zero, ge_zero, _______, ge_zero },
-         /* ne_zero */ { _______, ne_zero, _______, ne_zero, _______, ne_zero, _______ },
-         /* eq_zero */ { _______, le_zero, le_zero, ge_zero, ge_zero, _______, eq_zero },
-      };
-
-      ASSERT_TABLE_IS_COMMUTATIVE(table);
-      ASSERT_TABLE_IS_DIAGONAL(table);
-      ASSERT_UNION_OF_OTHERS_MATCHES_UNKNOWN_2_SOURCE(table);
-
-      r.range = table[left.range][right.range];
+      r.range = union_ranges(left.range, right.range);
       break;
    }
 



More information about the mesa-commit mailing list