mod bindings;
mod exprs;
mod helpers;
mod lower;
mod short_circuit;
mod structure;
#[cfg(test)]
mod tests;
use self::lower::{ChildAnalyses, LowerArtifacts, lower_proto};
use super::simplify::simplify_hir;
use crate::cfg::{CfgGraph, DataflowFacts, GraphFacts};
use crate::hir::common::HirModule;
use crate::generate::GenerateMode;
use crate::readability::ReadabilityOptions;
use crate::structure::StructureFacts;
use crate::timing::TimingCollector;
use crate::transformer::LoweredChunk;
use self::exprs::lower_branch_cond;
use self::helpers::{assign_stmt, branch_stmt, build_label_map_for_summary, goto_block};
use self::lower::{
ProtoBindings, ProtoLowering, is_control_terminator, lower_control_instr,
lower_phi_materialization_with_allowed_blocks_except, lower_regular_instr,
};
#[allow(clippy::too_many_arguments)]
pub(crate) fn analyze_hir(
chunk: &LoweredChunk,
cfg_graph: &CfgGraph,
graph_facts: &GraphFacts,
dataflow: &DataflowFacts,
structure: &StructureFacts,
timings: &TimingCollector,
readability: ReadabilityOptions,
generate_mode: GenerateMode,
) -> HirModule {
let child_analyses = ChildAnalyses {
cfg_graphs: &cfg_graph.children,
graph_facts: &graph_facts.children,
dataflow: &dataflow.children,
structure: &structure.children,
};
let mut artifacts = LowerArtifacts::default();
let entry = timings.record("lower", || {
lower_proto(
&chunk.main,
&cfg_graph.cfg,
graph_facts,
dataflow,
structure,
child_analyses,
&mut artifacts,
)
});
let mut module = HirModule {
entry,
protos: artifacts.protos,
};
timings.record("simplify", || {
simplify_hir(
&mut module,
readability,
timings,
&artifacts.promotion_facts,
generate_mode,
);
});
module
}