From a3110c308f72d2af9440ee18c9781f4e20506feb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= Date: Wed, 24 Jun 2020 17:47:09 +0100 Subject: [PATCH] radv: call nir_lower_flrp() after the first radv_optimize_nir() instead of inside the optimization loop Totals from 2504 (1.67% of 150170) affected shaders: (GFX10.3) VGPRs: 162592 -> 162416 (-0.11%); split: -0.12%, +0.01% CodeSize: 18399756 -> 18383552 (-0.09%); split: -0.10%, +0.01% MaxWaves: 42654 -> 42748 (+0.22%) Instrs: 3499404 -> 3497075 (-0.07%); split: -0.08%, +0.01% Latency: 87087238 -> 87064270 (-0.03%); split: -0.06%, +0.03% InvThroughput: 21159621 -> 21150546 (-0.04%); split: -0.05%, +0.01% VClause: 56653 -> 56667 (+0.02%); split: -0.00%, +0.03% Copies: 226332 -> 226423 (+0.04%); split: -0.15%, +0.19% Branches: 110027 -> 110025 (-0.00%); split: -0.05%, +0.04% PreSGPRs: 168087 -> 168076 (-0.01%); split: -0.01%, +0.00% PreVGPRs: 160814 -> 160705 (-0.07%) Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_shader.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index cb9e9fd2caf..f12726e4c81 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -117,9 +117,6 @@ radv_optimize_nir(const struct radv_device *device, struct nir_shader *shader, bool optimize_conservatively, bool allow_copies) { bool progress; - unsigned lower_flrp = (shader->options->lower_flrp16 ? 16 : 0) | - (shader->options->lower_flrp32 ? 32 : 0) | - (shader->options->lower_flrp64 ? 64 : 0); do { progress = false; @@ -162,21 +159,6 @@ radv_optimize_nir(const struct radv_device *device, struct nir_shader *shader, NIR_PASS(progress, shader, nir_opt_constant_folding); NIR_PASS(progress, shader, nir_opt_algebraic); - if (lower_flrp != 0) { - bool lower_flrp_progress = false; - NIR_PASS(lower_flrp_progress, shader, nir_lower_flrp, lower_flrp, - false /* always_precise */); - if (lower_flrp_progress) { - NIR_PASS(progress, shader, nir_opt_constant_folding); - progress = true; - } - - /* Nothing should rematerialize any flrps, so we only - * need to do this lowering once. - */ - lower_flrp = 0; - } - NIR_PASS(progress, shader, nir_opt_undef); NIR_PASS(progress, shader, nir_opt_shrink_vectors, !device->instance->disable_shrink_image_store); @@ -696,6 +678,14 @@ radv_shader_compile_to_nir(struct radv_device *device, struct vk_shader_module * */ nir_lower_var_copies(nir); + unsigned lower_flrp = (nir->options->lower_flrp16 ? 16 : 0) | + (nir->options->lower_flrp32 ? 32 : 0) | + (nir->options->lower_flrp64 ? 64 : 0); + if (lower_flrp != 0) { + if (nir_lower_flrp(nir, lower_flrp, false /* always_precise */)) + NIR_PASS_V(nir, nir_opt_constant_folding); + } + const nir_opt_access_options opt_access_options = { .is_vulkan = true, .infer_non_readable = true,