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;