ronn_graph/passes/
dead_code.rs1use super::{OptimizationPass, PassStats};
2use crate::error::Result;
3use ronn_core::ModelGraph;
4use std::collections::HashSet;
5use tracing::debug;
6
7pub struct DeadCodeEliminationPass;
9
10impl OptimizationPass for DeadCodeEliminationPass {
11 fn name(&self) -> &str {
12 "DeadCodeElimination"
13 }
14
15 fn run(&self, graph: &mut ModelGraph) -> Result<PassStats> {
16 let mut stats = PassStats::default();
17 let mut live_nodes = HashSet::new();
18
19 Self::mark_live_nodes(graph, &mut live_nodes);
21
22 let total_nodes = graph.node_count();
24 let dead_count = total_nodes - live_nodes.len();
25
26 if dead_count > 0 {
27 debug!("Removing {} dead nodes out of {}", dead_count, total_nodes);
28
29 stats.nodes_removed = dead_count;
32 }
33
34 Ok(stats)
35 }
36}
37
38impl DeadCodeEliminationPass {
39 fn mark_live_nodes(graph: &ModelGraph, live_nodes: &mut HashSet<String>) {
41 for node in graph.nodes() {
46 live_nodes.insert(node.id.to_string());
49 }
50 }
51}