From: Timur Kristóf Date: Wed, 1 Apr 2020 13:38:43 +0000 (+0200) Subject: aco: Treat s_setprio as a scheduling barrier. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=35e58314d8e4b7346c2523612f6e0f52cc964232;p=mesa.git aco: Treat s_setprio as a scheduling barrier. 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: --- 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) {