nir/range_analysis: look through vec2

Foz-DB Navi31:
Totals from 11 out of 14 FSR4 shaders:
Instrs: 58987 -> 58298 (-1.17%)
CodeSize: 402844 -> 397836 (-1.24%)
Latency: 209630 -> 209634 (+0.00%); split: -0.66%, +0.66%
InvThroughput: 230240 -> 229152 (-0.47%); split: -0.48%, +0.00%
VClause: 838 -> 826 (-1.43%); split: -1.55%, +0.12%
Copies: 3019 -> 2954 (-2.15%); split: -2.82%, +0.66%
VALU: 50196 -> 49637 (-1.11%)
VOPD: 1950 -> 1916 (-1.74%); split: +0.72%, -2.46%

Reviewed-by: Emma Anholt <emma@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36468>
This commit is contained in:
Georg Lehmann
2025-07-30 15:08:43 +02:00
committed by Marge Bot
parent caf89c97de
commit 3168ebe2c5
+16 -1
View File
@@ -603,7 +603,7 @@ process_fp_query(struct analysis_state *state, struct analysis_query *aq, uint32
* reinterpreted trivially. The most important cases are between float and
* non-float.
*/
if (alu->op != nir_op_mov && alu->op != nir_op_bcsel) {
if (alu->op != nir_op_mov && alu->op != nir_op_bcsel && alu->op != nir_op_vec2) {
const nir_alu_type use_base_type =
nir_alu_type_get_base_type(use_type);
const nir_alu_type src_base_type =
@@ -626,6 +626,10 @@ process_fp_query(struct analysis_state *state, struct analysis_query *aq, uint32
case nir_op_mov:
push_fp_query(state, alu, 0, use_type);
return;
case nir_op_vec2:
push_fp_query(state, alu, 0, use_type);
push_fp_query(state, alu, 1, use_type);
return;
case nir_op_i2f32:
case nir_op_u2f32:
case nir_op_fabs:
@@ -1127,6 +1131,17 @@ process_fp_query(struct analysis_state *state, struct analysis_query *aq, uint32
r = unpack_data(src_res[0]);
break;
case nir_op_vec2: {
const struct ssa_result_range left = unpack_data(src_res[0]);
const struct ssa_result_range right = unpack_data(src_res[1]);
r.range = union_ranges(left.range, right.range);
r.is_integral = left.is_integral && right.is_integral;
r.is_a_number = left.is_a_number && right.is_a_number;
r.is_finite = left.is_finite && right.is_finite;
break;
}
case nir_op_fneg:
r = unpack_data(src_res[0]);
r.range = fneg_table[r.range];