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) {