From afdacf4dcc04e363fecd78a67c6f854a222369f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Fri, 3 Feb 2023 02:03:46 +0100 Subject: [PATCH] aco: Don't set scalar offset on buffer load instructions when it's zero. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This helps generate slightly more optimal instructions. Signed-off-by: Timur Kristóf Reviewed-by: Rhys Perry Part-of: --- src/amd/compiler/aco_instruction_selection.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 0efdc013395..e4c1c3fc410 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -7164,11 +7164,13 @@ visit_load_buffer(isel_context* ctx, nir_intrinsic_instr* intrin) Builder bld(ctx->program, ctx->block); bool idxen = !nir_src_is_const(intrin->src[3]) || nir_src_as_uint(intrin->src[3]); + bool s_offset_zero = nir_src_is_const(intrin->src[2]) && !nir_src_as_uint(intrin->src[2]); Temp dst = get_ssa_temp(ctx, &intrin->dest.ssa); Temp descriptor = bld.as_uniform(get_ssa_temp(ctx, intrin->src[0].ssa)); Temp v_offset = as_vgpr(ctx, get_ssa_temp(ctx, intrin->src[1].ssa)); - Temp s_offset = bld.as_uniform(get_ssa_temp(ctx, intrin->src[2].ssa)); + Temp s_offset = + s_offset_zero ? Temp(0, s1) : bld.as_uniform(get_ssa_temp(ctx, intrin->src[2].ssa)); Temp idx = idxen ? as_vgpr(ctx, get_ssa_temp(ctx, intrin->src[3].ssa)) : Temp(); bool swizzled = nir_intrinsic_access(intrin) & ACCESS_IS_SWIZZLED_AMD;