Skip to content

Commit c81a607

Browse files
committed
Auto merge of #56724 - michaelwoerister:depgraph-readindex-tweak, r=<try>
[experiment] Allocate DepGraph::read_index de-duplication hashset more lazily. Possibly an optimization for `DepGraph::read_index()`. Might need some tweaking. I also want to try a SIMD-based version.
2 parents 8375ab4 + 661f6fc commit c81a607

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

src/librustc/dep_graph/graph.rs

+25-3
Original file line numberDiff line numberDiff line change
@@ -1039,13 +1039,35 @@ impl CurrentDepGraph {
10391039
match *icx.task {
10401040
OpenTask::Regular(ref task) => {
10411041
let mut task = task.lock();
1042+
let RegularOpenTask {
1043+
ref mut reads,
1044+
ref mut read_set,
1045+
ref node,
1046+
} = *task;
10421047
self.total_read_count += 1;
1043-
if task.read_set.insert(source) {
1044-
task.reads.push(source);
1048+
1049+
let is_new_entry = if reads.spilled() {
1050+
read_set.insert(source)
1051+
} else {
1052+
if reads.as_slice().contains(&source) {
1053+
false
1054+
} else {
1055+
if reads.inline_size() == reads.len() {
1056+
read_set.reserve(16);
1057+
read_set.extend(reads.iter().cloned());
1058+
read_set.insert(source);
1059+
}
1060+
true
1061+
}
1062+
};
1063+
1064+
if is_new_entry {
1065+
reads.push(source);
1066+
debug_assert!(read_set.is_empty() ^ reads.spilled());
10451067

10461068
if cfg!(debug_assertions) {
10471069
if let Some(ref forbidden_edge) = self.forbidden_edge {
1048-
let target = &task.node;
1070+
let target = node;
10491071
let source = self.nodes[source];
10501072
if forbidden_edge.test(&source, &target) {
10511073
bug!("forbidden edge {:?} -> {:?} created",

0 commit comments

Comments
 (0)