use super::{Mir, MirEdge, MirGraph, MirNode, Region};
pub fn destroy_metadata(mir: &mut Mir) {
destroy_metadata_inner(&mut mir.graph);
}
fn destroy_metadata_inner(graph: &mut MirGraph) {
let new = graph.filter_map(
|_idx, node| match node {
MirNode::Loop(region, ty) => {
let mut new = region.graph.clone();
destroy_metadata_inner(&mut new);
Some(MirNode::Loop(
Region {
graph: new,
end: region.end,
},
ty.clone(),
))
}
MirNode::FunctionDefinition(region) => {
let mut new = region.graph.clone();
destroy_metadata_inner(&mut new);
Some(MirNode::FunctionDefinition(Region {
graph: new,
end: region.end,
}))
}
node => Some(node.clone()),
},
|_idx, edge| match edge {
MirEdge::IntermediateResultDependency { port: _ } => None,
edge => Some(edge.clone()),
},
);
*graph = new;
}