From 592f3fd99433ce18b68a443a19a5709b90986f0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= Date: Tue, 26 Nov 2024 15:21:15 +0100 Subject: [PATCH] aco/assembler: Actually insert s_inst_prefetch instructions when aligning blocks for loops Part-of: --- src/amd/compiler/aco_assembler.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/amd/compiler/aco_assembler.cpp b/src/amd/compiler/aco_assembler.cpp index 8ca3711c8ee..b6ad6fb84e4 100644 --- a/src/amd/compiler/aco_assembler.cpp +++ b/src/amd/compiler/aco_assembler.cpp @@ -1687,15 +1687,15 @@ align_block(asm_context& ctx, std::vector& code, Block& block) loop_num_cl <= 3; if (change_prefetch) { - Builder bld(ctx.program); + Builder bld(ctx.program, &ctx.program->blocks[loop_header->linear_preds[0]]); int16_t prefetch_mode = loop_num_cl == 3 ? 0x1 : 0x2; - aco_ptr instr(bld.sopp(aco_opcode::s_inst_prefetch, prefetch_mode)); - emit_instruction(ctx, nops, instr.get()); + Instruction* instr = bld.sopp(aco_opcode::s_inst_prefetch, prefetch_mode); + emit_instruction(ctx, nops, instr); insert_code(ctx, code, loop_header->offset, nops.size(), nops.data()); /* Change prefetch mode back to default (0x3). */ - instr->salu().imm = 0x3; - emit_instruction(ctx, code, instr.get()); + bld.reset(&block.instructions, block.instructions.begin()); + bld.sopp(aco_opcode::s_inst_prefetch, 0x3); } const unsigned loop_start_cl = loop_header->offset >> 4;