From 35e58314d8e4b7346c2523612f6e0f52cc964232 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timur=20Krist=C3=B3f?= Date: Wed, 1 Apr 2020 15:38:43 +0200 Subject: [PATCH] aco: Treat s_setprio as a scheduling barrier. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit We want to execute instructions after s_setprio in the given priority, so we must prevent the scheduler from scheduling beyond s_setprio, otherwise some instructions could be executed in a different priority. Rename hazard_fail_memtime to hazard_fail_unreorderable and include s_setprio in the list of unreorderable opcodes. Signed-off-by: Timur Kristóf Reviewed-by: Daniel Schürmann Part-of: --- src/amd/compiler/aco_scheduler.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/amd/compiler/aco_scheduler.cpp b/src/amd/compiler/aco_scheduler.cpp index 41ca32c8625..d7cf90be189 100644 --- a/src/amd/compiler/aco_scheduler.cpp +++ b/src/amd/compiler/aco_scheduler.cpp @@ -460,7 +460,7 @@ enum HazardResult { /* Must stop at these failures. The hazard query code doesn't consider them * when added. */ hazard_fail_exec, - hazard_fail_memtime, + hazard_fail_unreorderable, }; HazardResult perform_hazard_query(hazard_query *query, Instruction *instr) @@ -478,9 +478,11 @@ HazardResult perform_hazard_query(hazard_query *query, Instruction *instr) if (instr->format == Format::EXP) return hazard_fail_export; - /* don't move s_memtime/s_memrealtime */ - if (instr->opcode == aco_opcode::s_memtime || instr->opcode == aco_opcode::s_memrealtime) - return hazard_fail_memtime; + /* don't move non-reorderable instructions */ + if (instr->opcode == aco_opcode::s_memtime || + instr->opcode == aco_opcode::s_memrealtime || + instr->opcode == aco_opcode::s_setprio) + return hazard_fail_unreorderable; if (query->barrier_interaction && (query->barrier_interaction & parse_barrier(instr))) return hazard_fail_barrier; @@ -795,7 +797,7 @@ void schedule_position_export(sched_ctx& ctx, Block* block, break; HazardResult haz = perform_hazard_query(&hq, candidate.get()); - if (haz == hazard_fail_exec || haz == hazard_fail_memtime) + if (haz == hazard_fail_exec || haz == hazard_fail_unreorderable) break; if (haz != hazard_success) { -- 2.30.2