From 20bf4a28a26519a90fe45efd0ad95d4f515fe46d Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Fri, 18 Jul 2025 21:18:10 -0400 Subject: [PATCH] hk: use amul instead of imul lets use do our address arithmetic tricks. preambles helped. Totals: MaxWaves: 53066688 -> 53068928 (+0.00%); split: +0.01%, -0.01% Instrs: 23846587 -> 23794159 (-0.22%); split: -0.24%, +0.02% CodeSize: 170248964 -> 169876998 (-0.22%); split: -0.24%, +0.02% Spills: 66570 -> 66401 (-0.25%); split: -0.53%, +0.27% Fills: 44068 -> 43879 (-0.43%); split: -0.98%, +0.55% Scratch: 404374 -> 403894 (-0.12%); split: -0.18%, +0.06% ALU: 18567924 -> 18510790 (-0.31%); split: -0.33%, +0.02% FSCIB: 18512622 -> 18455472 (-0.31%); split: -0.33%, +0.02% IC: 5255884 -> 5279176 (+0.44%); split: -0.11%, +0.56% GPRs: 3833699 -> 3833127 (-0.01%); split: -0.05%, +0.04% Uniforms: 10531468 -> 10528625 (-0.03%); split: -0.03%, +0.00% Preamble instrs: 10435998 -> 10289152 (-1.41%); split: -1.43%, +0.02% Totals from 6482 (12.00% of 54019) affected shaders: MaxWaves: 5819712 -> 5821952 (+0.04%); split: +0.09%, -0.05% Instrs: 5777505 -> 5725077 (-0.91%); split: -1.01%, +0.10% CodeSize: 42654844 -> 42282878 (-0.87%); split: -0.97%, +0.09% Spills: 23065 -> 22896 (-0.73%); split: -1.53%, +0.79% Fills: 7927 -> 7738 (-2.38%); split: -5.46%, +3.08% Scratch: 310148 -> 309668 (-0.15%); split: -0.23%, +0.08% ALU: 4424867 -> 4367733 (-1.29%); split: -1.39%, +0.10% FSCIB: 4424651 -> 4367501 (-1.29%); split: -1.39%, +0.10% IC: 1144594 -> 1167886 (+2.03%); split: -0.53%, +2.56% GPRs: 620494 -> 619922 (-0.09%); split: -0.33%, +0.24% Uniforms: 1622654 -> 1619811 (-0.18%); split: -0.20%, +0.02% Preamble instrs: 2119640 -> 1972794 (-6.93%); split: -7.03%, +0.10% Signed-off-by: Alyssa Rosenzweig Part-of: --- src/asahi/vulkan/hk_nir_lower_descriptors.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/asahi/vulkan/hk_nir_lower_descriptors.c b/src/asahi/vulkan/hk_nir_lower_descriptors.c index cecd2798ebb..88eec39a47c 100644 --- a/src/asahi/vulkan/hk_nir_lower_descriptors.c +++ b/src/asahi/vulkan/hk_nir_lower_descriptors.c @@ -131,7 +131,7 @@ load_descriptor(nir_builder *b, unsigned num_components, unsigned bit_size, binding_layout->dynamic_buffer_index)); nir_def *root_desc_offset = nir_iadd_imm( - b, nir_imul_imm(b, index, sizeof(struct hk_buffer_address)), + b, nir_amul_imm(b, index, sizeof(struct hk_buffer_address)), hk_root_descriptor_offset(dynamic_buffers)); assert(num_components == 4 && bit_size == 32); @@ -158,7 +158,7 @@ load_descriptor(nir_builder *b, unsigned num_components, unsigned bit_size, default: { assert(binding_layout->stride > 0); nir_def *desc_ubo_offset = - nir_iadd_imm(b, nir_imul_imm(b, index, binding_layout->stride), + nir_iadd_imm(b, nir_amul_imm(b, index, binding_layout->stride), binding_layout->offset + offset_B); unsigned desc_align_mul = (1 << (ffs(binding_layout->stride) - 1)); @@ -323,7 +323,7 @@ load_image_handle(nir_builder *b, const struct lower_descriptors_ctx *ctx, assert(binding_layout->stride > 0); nir_def *desc_offs_B = - nir_iadd_imm(b, nir_imul_imm(b, index, binding_layout->stride), + nir_iadd_imm(b, nir_amul_imm(b, index, binding_layout->stride), binding_layout->offset + offset_B); return nir_bindless_image_agx(b, desc_offs_B, .desc_set = set); @@ -489,7 +489,7 @@ lower_uvs_index(nir_builder *b, nir_intrinsic_instr *intrin, void *data) /* Prefix sum to find the compacted offset */ nir_def *idx = nir_bit_count(b, nir_iand_imm(b, flags, bit - 1)); nir_def *addr = nir_iadd( - b, base, nir_imul_imm(b, nir_u2u64(b, idx), sizeof(uint64_t))); + b, base, nir_amul_imm(b, nir_u2u64(b, idx), sizeof(uint64_t))); /* The above returns garbage if the query isn't actually enabled, handle * that case. @@ -698,7 +698,7 @@ lower_tex(nir_builder *b, nir_tex_instr *tex, assert(binding_layout->stride > 0); nir_def *desc_offs_B = nir_iadd_imm( - b, nir_imul_imm(b, idx, binding_layout->stride), + b, nir_amul_imm(b, idx, binding_layout->stride), binding_layout->offset + plane_offset_B + offsetof(struct hk_sampled_image_descriptor, sampler)); @@ -769,7 +769,7 @@ lower_ssbo_resource_index(nir_builder *b, nir_intrinsic_instr *intrin, nir_def *dynamic_binding_offset = nir_iadd_imm(b, - nir_imul_imm(b, dynamic_buffer_start, + nir_amul_imm(b, dynamic_buffer_start, sizeof(struct hk_buffer_address)), hk_root_descriptor_offset(dynamic_buffers)); @@ -787,7 +787,7 @@ lower_ssbo_resource_index(nir_builder *b, nir_intrinsic_instr *intrin, binding_addr = nir_ior_imm(b, binding_addr, (uint64_t)binding_stride << 56); const uint32_t binding_size = binding_layout->array_size * binding_stride; - nir_def *offset_in_binding = nir_imul_imm(b, index, binding_stride); + nir_def *offset_in_binding = nir_amul_imm(b, index, binding_stride); nir_def *addr = nir_vec4(b, nir_unpack_64_2x32_split_x(b, binding_addr), nir_unpack_64_2x32_split_y(b, binding_addr),