From 009beb00bcbaf5367937e50196d7d40d5d112068 Mon Sep 17 00:00:00 2001 From: Bryan Garza <1396101+bryangarza@users.noreply.github.com> Date: Thu, 29 Dec 2022 04:43:13 +0000 Subject: [PATCH] Change code to use map insead of for-loop --- .../rustc_mir_transform/src/ctfe_limit.rs | 48 ++++++++++--------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/compiler/rustc_mir_transform/src/ctfe_limit.rs b/compiler/rustc_mir_transform/src/ctfe_limit.rs index f2c99b19433..462be8afaaf 100644 --- a/compiler/rustc_mir_transform/src/ctfe_limit.rs +++ b/compiler/rustc_mir_transform/src/ctfe_limit.rs @@ -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,28 +11,28 @@ 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; - } - // Back edges in a CFG indicate loops - for (potential_dom, _) in body.basic_blocks.iter_enumerated() { - if doms.is_reachable(potential_dom) - && doms.is_reachable(node) - && doms.is_dominated_by(node, potential_dom) - && node_data - .terminator() - .successors() - .into_iter() - .any(|succ| succ == potential_dom) - { - indices.push(node); - continue; - } - } - } + let indices: Vec = + 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 + 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 + .terminator() + .successors() + .into_iter() + .any(|succ| succ == potential_dom) + }) { + Some(node) + } else { + None + } + }) + .collect(); for index in indices { insert_counter( body.basic_blocks_mut()