Change code to use map insead of for-loop

This commit is contained in:
Bryan Garza 2022-12-29 04:43:13 +00:00
parent b763f9094f
commit 009beb00bc

View File

@ -1,6 +1,8 @@
use crate::MirPass;
use rustc_middle::mir::{BasicBlockData, Body, Statement, StatementKind, TerminatorKind};
use rustc_middle::mir::{
BasicBlock, BasicBlockData, Body, Statement, StatementKind, TerminatorKind,
};
use rustc_middle::ty::TyCtxt;
pub struct CtfeLimit;
@ -9,15 +11,14 @@ impl<'tcx> MirPass<'tcx> for CtfeLimit {
#[instrument(skip(self, _tcx, body))]
fn run_pass(&self, _tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
let doms = body.basic_blocks.dominators();
let mut indices = Vec::new();
for (node, node_data) in body.basic_blocks.iter_enumerated() {
if let TerminatorKind::Call { .. } = node_data.terminator().kind {
indices.push(node);
continue;
}
let indices: Vec<BasicBlock> =
body.basic_blocks
.iter_enumerated()
.filter_map(|(node, node_data)| {
if matches!(node_data.terminator().kind, TerminatorKind::Call { .. }) ||
// Back edges in a CFG indicate loops
for (potential_dom, _) in body.basic_blocks.iter_enumerated() {
if doms.is_reachable(potential_dom)
body.basic_blocks.iter_enumerated().any(|(potential_dom, _)| {
doms.is_reachable(potential_dom)
&& doms.is_reachable(node)
&& doms.is_dominated_by(node, potential_dom)
&& node_data
@ -25,12 +26,13 @@ impl<'tcx> MirPass<'tcx> for CtfeLimit {
.successors()
.into_iter()
.any(|succ| succ == potential_dom)
{
indices.push(node);
continue;
}
}
}) {
Some(node)
} else {
None
}
})
.collect();
for index in indices {
insert_counter(
body.basic_blocks_mut()