From 64ff3e8cb86b861eab914c66fe4a40950987334b Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 31 Mar 2025 12:50:56 -0500 Subject: [PATCH] nak: Move exec_latency into the per-SM files It's split cleanly along the SM70 boundary anyway so there's no code duplication happening here. Reviewed-by: Dave Airlie Reviewed-by: Mel Henning Part-of: --- src/nouveau/compiler/nak/ir.rs | 4 +-- src/nouveau/compiler/nak/sched_common.rs | 37 ------------------------ src/nouveau/compiler/nak/sm50.rs | 19 ++++++++++++ src/nouveau/compiler/nak/sm70.rs | 18 ++++++++++++ 4 files changed, 38 insertions(+), 40 deletions(-) diff --git a/src/nouveau/compiler/nak/ir.rs b/src/nouveau/compiler/nak/ir.rs index cb12b88a04f..1de539a5606 100644 --- a/src/nouveau/compiler/nak/ir.rs +++ b/src/nouveau/compiler/nak/ir.rs @@ -7505,9 +7505,7 @@ pub trait ShaderModel { !op.has_fixed_latency(self.sm()) } - fn exec_latency(&self, op: &Op) -> u32 { - sched_common::exec_latency(self.sm(), op) - } + fn exec_latency(&self, op: &Op) -> u32; fn raw_latency( &self, diff --git a/src/nouveau/compiler/nak/sched_common.rs b/src/nouveau/compiler/nak/sched_common.rs index 800ef6d503e..7b05c147b40 100644 --- a/src/nouveau/compiler/nak/sched_common.rs +++ b/src/nouveau/compiler/nak/sched_common.rs @@ -5,43 +5,6 @@ use crate::ir::*; use std::ops::{Index, IndexMut, Range}; -pub fn exec_latency(sm: u8, op: &Op) -> u32 { - 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 - } - } 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, - } - } -} - pub fn instr_latency(sm: u8, op: &Op, dst_idx: usize) -> u32 { let file = match op.dsts_as_slice()[dst_idx] { Dst::None => return 0, diff --git a/src/nouveau/compiler/nak/sm50.rs b/src/nouveau/compiler/nak/sm50.rs index c8504a6996b..9f06bb7e97f 100644 --- a/src/nouveau/compiler/nak/sm50.rs +++ b/src/nouveau/compiler/nak/sm50.rs @@ -56,6 +56,25 @@ impl ShaderModel for ShaderModel50 { false } + fn exec_latency(&self, op: &Op) -> u32 { + 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, + } + } + fn legalize_op(&self, b: &mut LegalizeBuilder, op: &mut Op) { as_sm50_op_mut(op).legalize(b); } diff --git a/src/nouveau/compiler/nak/sm70.rs b/src/nouveau/compiler/nak/sm70.rs index 44c79af029d..512dca2605d 100644 --- a/src/nouveau/compiler/nak/sm70.rs +++ b/src/nouveau/compiler/nak/sm70.rs @@ -99,6 +99,24 @@ impl ShaderModel for ShaderModel70 { } } + fn exec_latency(&self, op: &Op) -> u32 { + match op { + Op::Bar(_) | Op::MemBar(_) => { + if self.sm >= 80 { + 6 + } else { + 5 + } + } + Op::CCtl(_op) => { + // CCTL.C needs 8, CCTL.I needs 11 + 11 + } + // Op::DepBar(_) => 4, + _ => 1, // TODO: co-issue + } + } + fn legalize_op(&self, b: &mut LegalizeBuilder, op: &mut Op) { legalize_sm70_op(self, b, op); }