From bd665fdd7f704d708319dc36278343420ede9720 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Fri, 14 Jan 2022 13:44:31 -0800 Subject: [PATCH] nir: Use nir_vector_extract to generate code for ir_binop_vector_extract MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tiger Lake and Ice Lake had similar results. (Ice Lake shown) total cycles in shared programs: 861153442 -> 861153533 (<.01%) cycles in affected programs: 14748 -> 14839 (0.62%) helped: 5 HURT: 10 helped stats (abs) min: 1 max: 2 x̄: 1.80 x̃: 2 helped stats (rel) min: 0.09% max: 0.18% x̄: 0.16% x̃: 0.17% HURT stats (abs) min: 2 max: 18 x̄: 10.00 x̃: 10 HURT stats (rel) min: 0.17% max: 1.54% x̄: 1.06% x̃: 1.24% 95% mean confidence interval for cycles value: 1.15 10.99 95% mean confidence interval for cycles %-change: 0.25% 1.07% Cycles are HURT. Skylake and Broadwell had similar results. (Skylake shown) total cycles in shared programs: 844405063 -> 844405073 (<.01%) cycles in affected programs: 1710 -> 1720 (0.58%) helped: 0 HURT: 4 HURT stats (abs) min: 2 max: 4 x̄: 2.50 x̃: 2 HURT stats (rel) min: 0.35% max: 1.16% x̄: 0.88% x̃: 1.00% 95% mean confidence interval for cycles value: 0.91 4.09 95% mean confidence interval for cycles %-change: 0.30% 1.45% Cycles are HURT. Haswell and all earlier Intel GPUs had similar results. (Haswell shown) total instructions in shared programs: 16710016 -> 16709769 (<.01%) instructions in affected programs: 5842 -> 5595 (-4.23%) helped: 64 HURT: 0 helped stats (abs) min: 3 max: 4 x̄: 3.86 x̃: 4 helped stats (rel) min: 3.36% max: 7.69% x̄: 4.52% x̃: 4.17% 95% mean confidence interval for instructions value: -3.95 -3.77 95% mean confidence interval for instructions %-change: -4.83% -4.22% Instructions are helped. total cycles in shared programs: 881088472 -> 881086722 (<.01%) cycles in affected programs: 68696 -> 66946 (-2.55%) helped: 58 HURT: 6 helped stats (abs) min: 10 max: 202 x̄: 36.41 x̃: 18 helped stats (rel) min: 0.81% max: 16.42% x̄: 4.15% x̃: 1.51% HURT stats (abs) min: 2 max: 88 x̄: 60.33 x̃: 68 HURT stats (rel) min: 0.17% max: 7.06% x̄: 4.94% x̃: 5.60% 95% mean confidence interval for cycles value: -42.14 -12.54 95% mean confidence interval for cycles %-change: -4.66% -1.94% Cycles are helped. No fossil-db changes on any Intel platform. Reviewed-by: Matt Turner Part-of: --- src/compiler/glsl/glsl_to_nir.cpp | 10 ++-------- src/mesa/state_tracker/st_glsl_to_ir.cpp | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/compiler/glsl/glsl_to_nir.cpp b/src/compiler/glsl/glsl_to_nir.cpp index 601b87fc2ad..536bedd316b 100644 --- a/src/compiler/glsl/glsl_to_nir.cpp +++ b/src/compiler/glsl/glsl_to_nir.cpp @@ -2329,15 +2329,9 @@ nir_visitor::visit(ir_expression *ir) case ir_binop_dot: result = nir_fdot(&b, srcs[0], srcs[1]); break; - case ir_binop_vector_extract: { - result = nir_channel(&b, srcs[0], 0); - for (unsigned i = 1; i < ir->operands[0]->type->vector_elements; i++) { - nir_ssa_def *swizzled = nir_channel(&b, srcs[0], i); - result = nir_bcsel(&b, nir_ieq_imm(&b, srcs[1], i), - swizzled, result); - } + case ir_binop_vector_extract: + result = nir_vector_extract(&b, srcs[0], srcs[1]); break; - } case ir_binop_atan2: result = nir_atan2(&b, srcs[0], srcs[1]); diff --git a/src/mesa/state_tracker/st_glsl_to_ir.cpp b/src/mesa/state_tracker/st_glsl_to_ir.cpp index d2bc5e604e2..130f8c82682 100644 --- a/src/mesa/state_tracker/st_glsl_to_ir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_ir.cpp @@ -130,7 +130,7 @@ link_shader(struct gl_context *ctx, struct gl_shader_program *prog) IMUL_HIGH_TO_MUL : 0)); - do_vec_index_to_cond_assign(ir, true); + do_vec_index_to_cond_assign(ir, false); lower_vector_insert(ir, true); if (options->MaxIfDepth == 0) { lower_discard(ir);