Skip to content

Commit 4e0662c

Browse files
authored
Rollup merge of rust-lang#109847 - clubby789:graphviz-reachable, r=oli-obk
Only create graphviz nodes for reachable MIR bb's Fixes rust-lang#109832
2 parents 630f2fc + 47ae42e commit 4e0662c

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

compiler/rustc_mir_dataflow/src/framework/graphviz.rs

+10-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use std::{io, ops, str};
66

77
use regex::Regex;
88
use rustc_graphviz as dot;
9+
use rustc_index::bit_set::BitSet;
910
use rustc_middle::mir::graphviz_safe_def_name;
1011
use rustc_middle::mir::{self, BasicBlock, Body, Location};
1112

@@ -34,14 +35,16 @@ where
3435
body: &'a Body<'tcx>,
3536
results: &'a Results<'tcx, A>,
3637
style: OutputStyle,
38+
reachable: BitSet<BasicBlock>,
3739
}
3840

3941
impl<'a, 'tcx, A> Formatter<'a, 'tcx, A>
4042
where
4143
A: Analysis<'tcx>,
4244
{
4345
pub fn new(body: &'a Body<'tcx>, results: &'a Results<'tcx, A>, style: OutputStyle) -> Self {
44-
Formatter { body, results, style }
46+
let reachable = mir::traversal::reachable_as_bitset(body);
47+
Formatter { body, results, style, reachable }
4548
}
4649
}
4750

@@ -108,7 +111,12 @@ where
108111
type Edge = CfgEdge;
109112

110113
fn nodes(&self) -> dot::Nodes<'_, Self::Node> {
111-
self.body.basic_blocks.indices().collect::<Vec<_>>().into()
114+
self.body
115+
.basic_blocks
116+
.indices()
117+
.filter(|&idx| self.reachable.contains(idx))
118+
.collect::<Vec<_>>()
119+
.into()
112120
}
113121

114122
fn edges(&self) -> dot::Edges<'_, Self::Edge> {

0 commit comments

Comments
 (0)