From d7838152f52f6622b6a2a0375d107e0b8953e165 Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Thu, 10 Oct 2019 17:04:06 +0100 Subject: [PATCH] aco: fix scheduling with s_memtime/s_memrealtime MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Rhys Perry Reviewed-by: Daniel Schürmann --- src/amd/compiler/aco_scheduler.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/amd/compiler/aco_scheduler.cpp b/src/amd/compiler/aco_scheduler.cpp index 09076a9a71f..67264fcf14f 100644 --- a/src/amd/compiler/aco_scheduler.cpp +++ b/src/amd/compiler/aco_scheduler.cpp @@ -110,6 +110,10 @@ bool can_move_instr(aco_ptr& instr, Instruction* current, int movin if (instr->format == Format::EXP) return false; + /* don't move s_memtime/s_memrealtime */ + if (instr->opcode == aco_opcode::s_memtime || instr->opcode == aco_opcode::s_memrealtime) + return false; + /* handle barriers */ /* TODO: instead of stopping, maybe try to move the barriers and any @@ -191,6 +195,10 @@ void schedule_SMEM(sched_ctx& ctx, Block* block, int16_t k = 0; bool can_reorder_cur = can_reorder(current, false); + /* don't move s_memtime/s_memrealtime */ + if (current->opcode == aco_opcode::s_memtime || current->opcode == aco_opcode::s_memrealtime) + return; + /* create the initial set of values which current depends on */ std::fill(ctx.depends_on.begin(), ctx.depends_on.end(), false); for (const Operand& op : current->operands) { -- 2.30.2