From ed658a2d3aa0cf3be58fcd30e1a442e902e840c2 Mon Sep 17 00:00:00 2001 From: Mel Henning Date: Wed, 14 May 2025 16:42:34 -0400 Subject: [PATCH] compiler/rust/cfg: Add a hash func type parameter and switch nak over to rustc-hash for CFGBuilder Part-of: --- src/compiler/rust/cfg.rs | 16 ++++++++-------- src/nouveau/compiler/nak/from_nir.rs | 4 ++-- src/nouveau/compiler/nak/hw_tests.rs | 3 ++- src/nouveau/compiler/nak/nvdisasm_tests.rs | 3 ++- src/nouveau/compiler/nak/opt_jump_thread.rs | 4 ++-- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/compiler/rust/cfg.rs b/src/compiler/rust/cfg.rs index b41b5f2a72f..d89e6dec277 100644 --- a/src/compiler/rust/cfg.rs +++ b/src/compiler/rust/cfg.rs @@ -3,7 +3,7 @@ use crate::bitset::BitSet; use std::collections::HashMap; -use std::hash::Hash; +use std::hash::{BuildHasher, Hash}; use std::ops::{Deref, DerefMut, Index, IndexMut}; use std::slice; @@ -397,24 +397,24 @@ impl<'a, N> IntoIterator for &'a mut CFG { /// `CFGBuilder` makes all that automatic by letting you add nodes and edges /// using any key type desired. You then call `as_cfg()` to get the final /// control-flow graph. -pub struct CFGBuilder { +pub struct CFGBuilder { nodes: Vec, edges: Vec<(K, K)>, - key_map: HashMap, + key_map: HashMap, } -impl CFGBuilder { +impl CFGBuilder { /// Creates a new CFG builder. - pub fn new() -> CFGBuilder { + pub fn new() -> Self { CFGBuilder { nodes: Vec::new(), edges: Vec::new(), - key_map: HashMap::new(), + key_map: Default::default(), } } } -impl CFGBuilder { +impl CFGBuilder { /// Adds a node to the CFG. pub fn add_node(&mut self, k: K, n: N) { self.key_map.insert(k, self.nodes.len()); @@ -437,7 +437,7 @@ impl CFGBuilder { } } -impl Default for CFGBuilder { +impl Default for CFGBuilder { fn default() -> Self { CFGBuilder::new() } diff --git a/src/nouveau/compiler/nak/from_nir.rs b/src/nouveau/compiler/nak/from_nir.rs index 76301134bd6..859f0f71128 100644 --- a/src/nouveau/compiler/nak/from_nir.rs +++ b/src/nouveau/compiler/nak/from_nir.rs @@ -15,7 +15,7 @@ use compiler::bindings::*; use compiler::cfg::CFGBuilder; use compiler::nir::*; use compiler::nir_instr_printer::NirInstrPrinter; -use rustc_hash::{FxHashMap, FxHashSet}; +use rustc_hash::{FxBuildHasher, FxHashMap, FxHashSet}; use std::cmp::max; use std::ops::Index; @@ -319,7 +319,7 @@ struct ShaderFromNir<'a> { sm: &'a dyn ShaderModel, info: ShaderInfo, float_ctl: ShaderFloatControls, - cfg: CFGBuilder, + cfg: CFGBuilder, label_alloc: LabelAllocator, block_label: FxHashMap, bar_label: FxHashMap, diff --git a/src/nouveau/compiler/nak/hw_tests.rs b/src/nouveau/compiler/nak/hw_tests.rs index c1fdf099f62..fef6c54d8b8 100644 --- a/src/nouveau/compiler/nak/hw_tests.rs +++ b/src/nouveau/compiler/nak/hw_tests.rs @@ -13,6 +13,7 @@ use acorn::Acorn; use compiler::bindings::MESA_SHADER_COMPUTE; use compiler::cfg::CFGBuilder; use nak_bindings::*; +use rustc_hash::FxBuildHasher; use std::mem::offset_of; use std::str::FromStr; use std::sync::OnceLock; @@ -190,7 +191,7 @@ impl<'a> TestShaderBuilder<'a> { instrs: self.b.into_vec(), }; - let mut cfg = CFGBuilder::new(); + let mut cfg = CFGBuilder::<_, _, FxBuildHasher>::new(); cfg.add_node(0, self.start_block); cfg.add_node(1, block); cfg.add_edge(0, 1); diff --git a/src/nouveau/compiler/nak/nvdisasm_tests.rs b/src/nouveau/compiler/nak/nvdisasm_tests.rs index 3c967f0f6f1..70b6427cd21 100644 --- a/src/nouveau/compiler/nak/nvdisasm_tests.rs +++ b/src/nouveau/compiler/nak/nvdisasm_tests.rs @@ -4,6 +4,7 @@ use crate::ir::*; use crate::sm70::ShaderModel70; use compiler::cfg::CFGBuilder; +use rustc_hash::FxBuildHasher; use std::io::Write; use std::mem; @@ -55,7 +56,7 @@ fn disassemble_instrs(instrs: Vec>, sm: u8) -> Vec { instrs, }; - let mut cfg = CFGBuilder::new(); + let mut cfg = CFGBuilder::<_, _, FxBuildHasher>::new(); cfg.add_node(0, block); let f = Function { diff --git a/src/nouveau/compiler/nak/opt_jump_thread.rs b/src/nouveau/compiler/nak/opt_jump_thread.rs index c5434a5ad3d..ae1ff410be2 100644 --- a/src/nouveau/compiler/nak/opt_jump_thread.rs +++ b/src/nouveau/compiler/nak/opt_jump_thread.rs @@ -4,7 +4,7 @@ use crate::ir::*; use compiler::cfg::CFGBuilder; -use rustc_hash::FxHashMap; +use rustc_hash::{FxBuildHasher, FxHashMap}; fn clone_branch(op: &Op) -> Op { match op { @@ -93,7 +93,7 @@ fn jump_thread(func: &mut Function) -> bool { fn rewrite_cfg(func: &mut Function) { // CFGBuilder takes care of removing dead blocks for us // We use the basic block's label to identify it - let mut builder = CFGBuilder::new(); + let mut builder = CFGBuilder::<_, _, FxBuildHasher>::new(); for i in 0..func.blocks.len() { let block = &func.blocks[i];