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 <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36257>
This commit is contained in:
Alyssa Rosenzweig 2025-07-18 21:18:10 -04:00 committed by Marge Bot
parent a60755c015
commit 20bf4a28a2

View file

@ -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),