From c2b5d7ca4188f36c9aaeacc0f14e5faac2c245de Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Fri, 26 Jul 2024 19:19:18 -0500 Subject: [PATCH] nak/sm50: Add execution delays for more ops Part-of: --- src/nouveau/compiler/nak/calc_instr_deps.rs | 48 +++++++++++++-------- src/nouveau/compiler/nak/ir.rs | 7 --- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/nouveau/compiler/nak/calc_instr_deps.rs b/src/nouveau/compiler/nak/calc_instr_deps.rs index 26e6b71c9bc..caf1d4143c2 100644 --- a/src/nouveau/compiler/nak/calc_instr_deps.rs +++ b/src/nouveau/compiler/nak/calc_instr_deps.rs @@ -464,27 +464,39 @@ fn assign_barriers(f: &mut Function, sm: &dyn ShaderModel) { } fn exec_latency(sm: u8, op: &Op) -> u32 { - match op { - Op::Bar(_) | Op::MemBar(_) => { - if sm >= 80 { - 6 - } else { - 5 + if sm >= 70 { + match op { + Op::Bar(_) | Op::MemBar(_) => { + if sm >= 80 { + 6 + } else { + 5 + } } + Op::CCtl(_op) => { + // CCTL.C needs 8, CCTL.I needs 11 + 11 + } + // Op::DepBar(_) => 4, + _ => 1, // TODO: co-issue } - Op::CCtl(_op) => { - // CCTL.C needs 8, CCTL.I needs 11 - 11 + } else { + match op { + Op::CCtl(_) + | Op::MemBar(_) + | Op::Bra(_) + | Op::SSy(_) + | Op::Sync(_) + | Op::Brk(_) + | Op::PBk(_) + | Op::Cont(_) + | Op::PCnt(_) + | Op::Exit(_) + | Op::Bar(_) + | Op::Kill(_) + | Op::OutFinal(_) => 13, + _ => 1, } - Op::Kill(_) if sm < 70 => { - 13 - } - _ if sm < 70 && (op.is_crs_push() || op.is_branch()) => { - // pre-Volta needs a delay for control-flow ops - 13 - } - // Op::DepBar(_) => 4, - _ => 1, // TODO: co-issue } } diff --git a/src/nouveau/compiler/nak/ir.rs b/src/nouveau/compiler/nak/ir.rs index aa8d687dd06..2567ffa37cf 100644 --- a/src/nouveau/compiler/nak/ir.rs +++ b/src/nouveau/compiler/nak/ir.rs @@ -6084,13 +6084,6 @@ pub enum Op { impl_display_for_op!(Op); impl Op { - pub fn is_crs_push(&self) -> bool { - match self { - Op::SSy(_) | Op::PBk(_) | Op::PCnt(_) => true, - _ => false, - } - } - pub fn is_branch(&self) -> bool { match self { Op::Bra(_)