Skip to content

Commit 30a5723

Browse files
switch to hashbrown for RawEntryMut api
1 parent 7f23259 commit 30a5723

11 files changed

Lines changed: 24 additions & 18 deletions

File tree

Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,8 @@ authors = ["Robert Obkircher <robert.obkircher@gmail.com>"]
55
edition = "2021"
66

77
[features]
8-
fuzzing = []
8+
fuzzing = []
9+
10+
[dependencies]
11+
# nightly is required for may_dangle on drop
12+
hashbrown = { version = "0.17", features = ["nightly"] }

src/lib.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,2 @@
1-
#![feature(hash_raw_entry)]
2-
#![feature(hash_set_entry)]
3-
41
pub mod datastructures;
52
pub mod sea_of_nodes;

src/sea_of_nodes/graph_visualizer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::sea_of_nodes::nodes::node::{Scope, Stop};
33
use crate::sea_of_nodes::nodes::{Node, Nodes, Op};
44
use crate::sea_of_nodes::types::Ty;
55
use fmt::Write;
6-
use std::collections::HashSet;
6+
use hashbrown::HashSet;
77
use std::fmt;
88
use std::process::{Command, Stdio};
99
use std::sync::Mutex;

src/sea_of_nodes/ir_printer.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use crate::datastructures::id_set::IdSet;
22
use crate::sea_of_nodes::nodes::{Cfg, Node, Nodes};
33
use crate::sea_of_nodes::types::{Ty, Types};
4+
use hashbrown::HashMap;
45
use std::borrow::Cow;
5-
use std::collections::HashMap;
66
use std::fmt;
77
use std::fmt::Write;
88

@@ -370,7 +370,7 @@ fn pretty_print_scheduled(
370370
}
371371
}
372372
let blk = blk.unwrap();
373-
ds.remove(&blk);
373+
ds.remove(&*blk);
374374
if let Some(p) = ns.iter().position(|n| *n == *blk) {
375375
ns.remove(p);
376376
}

src/sea_of_nodes/nodes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::collections::HashMap;
1+
use hashbrown::HashMap;
22
use std::num::NonZeroU32;
33

44
use crate::datastructures::id_set::IdSet;

src/sea_of_nodes/nodes/gvn.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::datastructures::id_vec::IdVec;
22
use crate::sea_of_nodes::nodes::{Node, Nodes, Op, OpVec};
3-
use std::collections::hash_map::RawEntryMut;
3+
use hashbrown::hash_map::RawEntryMut;
44
use std::hash::{BuildHasher, DefaultHasher, Hash, Hasher};
55
use std::num::NonZeroU32;
66

src/sea_of_nodes/nodes/node.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
use hashbrown::{Equivalent, HashMap};
12
use std::borrow::Cow;
2-
use std::collections::HashMap;
33
use std::fmt;
44
use std::fmt::{Debug, Display};
55
use std::num::NonZeroU32;
@@ -129,6 +129,11 @@ macro_rules! define_id {
129129
Self::$Id(value)
130130
}
131131
}
132+
impl Equivalent<Node> for $Id {
133+
fn equivalent(&self, key: &Node) -> bool {
134+
self.to_node() == *key
135+
}
136+
}
132137
impl fmt::Display for $Id {
133138
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
134139
Display::fmt(&self.0, f)
@@ -328,7 +333,7 @@ define_ids!(<'t>
328333

329334
impl<'t> Op<'t> {
330335
/// Easy reading label for debugger
331-
pub fn label(&self) -> Cow<str> {
336+
pub fn label(&self) -> Cow<'t, str> {
332337
fn mlabel(name: &str) -> &str {
333338
match name {
334339
"[]" => "ary",
@@ -389,7 +394,7 @@ impl<'t> Op<'t> {
389394
}
390395

391396
// Graphical label, e.g. "+" or "Region" or "=="
392-
pub fn glabel(&self) -> Cow<str> {
397+
pub fn glabel(&self) -> Cow<'t, str> {
393398
match self {
394399
Op::Add | Op::AddF => Borrowed("+"),
395400
Op::Sub | Op::SubF => Borrowed("-"),

src/sea_of_nodes/parser.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::sea_of_nodes::nodes::node::{
55
};
66
use crate::sea_of_nodes::nodes::{BoolOp, Node, Nodes, Op, Phi};
77
use crate::sea_of_nodes::types::{Field, Ty, TyMemPtr, TyStruct, Types};
8-
use std::collections::HashMap;
8+
use hashbrown::HashMap;
99

1010
/// Converts a Simple source program to the Sea of Nodes intermediate representation in one pass.
1111
pub struct Parser<'s, 't> {

src/sea_of_nodes/tests/evaluator.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::sea_of_nodes::nodes::{BoolOp, Node, Nodes};
77
use crate::sea_of_nodes::tests::scheduler;
88
use crate::sea_of_nodes::tests::scheduler::{Block, BlockId};
99
use crate::sea_of_nodes::types::{TyStruct, Type};
10-
use std::collections::HashMap;
10+
use hashbrown::HashMap;
1111
use std::fmt;
1212
use std::fmt::{Display, Formatter};
1313
use std::ops::{Add, BitAnd, BitOr, BitXor, Mul, Neg, Sub};

src/sea_of_nodes/tests/scheduler.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
2424
use crate::sea_of_nodes::nodes::node::{Phi, Start, TypedNode};
2525
use crate::sea_of_nodes::nodes::{Node, Nodes, Op};
26-
use std::collections::HashMap;
26+
use hashbrown::HashMap;
2727

2828
/// A basic block with a schedule of the containing nodes.
2929
pub struct Block {
@@ -599,7 +599,7 @@ impl Scheduler {
599599
None => {}
600600
Some(n) if n.is_if(sea) => {
601601
for p in sea.outputs[n].iter().filter_map(|n| n.to_cproj(sea)) {
602-
block.next[sea[p].index] = blocks[&*p];
602+
block.next[sea[p].index] = blocks[&p];
603603
}
604604
}
605605
Some(n) if n.is_region(sea) => {

0 commit comments

Comments
 (0)