From 92befad89f6259137a1cb6acad371b96a2aa25f1 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Sat, 6 Jul 2024 11:22:18 -0700 Subject: [PATCH] nir/range_analysis: Fix errors in fmin and fmax tables fmin(x, 0.0) must at least be le_zero, and fmax(x, 0.0) be at least be ge_zero. shader-db: All Intel platforms had similar results. (Meteor Lake shown) total instructions in shared programs: 19733226 -> 19731919 (<.01%) instructions in affected programs: 196415 -> 195108 (-0.67%) helped: 615 / HURT: 0 total cycles in shared programs: 916277979 -> 916265288 (<.01%) cycles in affected programs: 2482535 -> 2469844 (-0.51%) helped: 346 / HURT: 178 LOST: 2 GAINED: 1 fossil-db: All Intel platforms had similar results. (Meteor Lake shown) Totals: Instrs: 151531355 -> 151519575 (-0.01%); split: -0.01%, +0.00% Cycle count: 17209372399 -> 17208402120 (-0.01%); split: -0.01%, +0.01% Max live registers: 32016490 -> 32016514 (+0.00%) Totals from 4307 (0.68% of 630198) affected shaders: Instrs: 4179418 -> 4167638 (-0.28%); split: -0.28%, +0.00% Cycle count: 1063492212 -> 1062521933 (-0.09%); split: -0.24%, +0.15% Max live registers: 359250 -> 359274 (+0.01%) Reviewed-by: Georg Lehmann Part-of: --- src/compiler/nir/nir_range_analysis.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/compiler/nir/nir_range_analysis.c b/src/compiler/nir/nir_range_analysis.c index ac076a9e5de..0e49ab33b58 100644 --- a/src/compiler/nir/nir_range_analysis.c +++ b/src/compiler/nir/nir_range_analysis.c @@ -899,13 +899,13 @@ process_fp_query(struct analysis_state *state, struct analysis_query *aq, uint32 */ 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 */ { _______, _______, _______, gt_zero, ge_zero, _______, _______ }, + /* unknown */ { _______, _______, _______, gt_zero, ge_zero, _______, ge_zero }, /* lt_zero */ { _______, lt_zero, le_zero, gt_zero, ge_zero, ne_zero, eq_zero }, /* le_zero */ { _______, le_zero, le_zero, gt_zero, ge_zero, _______, eq_zero }, /* gt_zero */ { gt_zero, gt_zero, gt_zero, gt_zero, gt_zero, gt_zero, gt_zero }, /* ge_zero */ { ge_zero, ge_zero, ge_zero, gt_zero, ge_zero, ge_zero, ge_zero }, - /* ne_zero */ { _______, ne_zero, _______, gt_zero, ge_zero, ne_zero, _______ }, - /* eq_zero */ { _______, eq_zero, eq_zero, gt_zero, ge_zero, _______, eq_zero } + /* ne_zero */ { _______, ne_zero, _______, gt_zero, ge_zero, ne_zero, ge_zero }, + /* eq_zero */ { ge_zero, eq_zero, eq_zero, gt_zero, ge_zero, ge_zero, eq_zero } }; /* Treat fmax as commutative. */ @@ -983,13 +983,13 @@ process_fp_query(struct analysis_state *state, struct analysis_query *aq, uint32 */ 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, le_zero, _______, _______, _______, _______ }, + /* unknown */ { _______, lt_zero, le_zero, _______, _______, _______, le_zero }, /* lt_zero */ { lt_zero, lt_zero, lt_zero, lt_zero, lt_zero, lt_zero, lt_zero }, /* le_zero */ { le_zero, lt_zero, le_zero, le_zero, le_zero, le_zero, le_zero }, /* gt_zero */ { _______, lt_zero, le_zero, gt_zero, ge_zero, ne_zero, eq_zero }, /* ge_zero */ { _______, lt_zero, le_zero, ge_zero, ge_zero, _______, eq_zero }, - /* ne_zero */ { _______, lt_zero, le_zero, ne_zero, _______, ne_zero, _______ }, - /* eq_zero */ { _______, lt_zero, le_zero, eq_zero, eq_zero, _______, eq_zero } + /* ne_zero */ { _______, lt_zero, le_zero, ne_zero, _______, ne_zero, le_zero }, + /* eq_zero */ { le_zero, lt_zero, le_zero, eq_zero, eq_zero, le_zero, eq_zero } }; /* Treat fmin as commutative. */