vyre-lower 0.6.5

Substrate-neutral lowering: vyre Program → KernelDescriptor consumed by vyre-emit-* crates.
Documentation
use vyre_lower::analyses::alias_facts::AliasFactSet;
use vyre_lower::analyses::reaching_def_facts::ReachingDefFactSet;
use vyre_lower::analyses::weir_alias::AliasFactSet as WeirAliasFactSet;
use vyre_lower::analyses::weir_reaching_def::ReachingDefFactSet as WeirReachingDefFactSet;
use vyre_lower::rewrites::{
    dead_store_with_alias_facts, dead_store_with_dataflow_analysis_facts,
    dead_store_with_dataflow_facts, dead_store_with_weir_alias_facts, licm_with_alias_facts,
    licm_with_dataflow_analysis_facts, licm_with_dataflow_facts, licm_with_weir_alias_facts,
    load_forwarding_with_alias_facts, load_forwarding_with_dataflow_analysis_facts,
    load_forwarding_with_dataflow_facts, load_forwarding_with_weir_alias_facts,
    loop_fission_with_alias_facts, loop_fission_with_dataflow_analysis_facts,
    loop_fission_with_dataflow_facts, loop_fission_with_weir_alias_facts,
    loop_fusion_with_alias_facts, loop_fusion_with_dataflow_analysis_facts,
    loop_fusion_with_dataflow_facts, loop_fusion_with_weir_alias_facts,
};
use vyre_lower::KernelDescriptor;

type AliasRewriteFn = fn(&KernelDescriptor, &AliasFactSet) -> KernelDescriptor;
type DataflowRewriteFn =
    fn(&KernelDescriptor, &AliasFactSet, &ReachingDefFactSet) -> KernelDescriptor;
type WeirAliasRewriteFn = fn(&KernelDescriptor, &WeirAliasFactSet) -> KernelDescriptor;
type DataflowAnalysisRewriteFn =
    fn(&KernelDescriptor, &WeirAliasFactSet, &WeirReachingDefFactSet) -> KernelDescriptor;

#[test]
fn public_dataflow_rewrite_api_signatures_are_stable() {
    let alias_aware_rewrites: [AliasRewriteFn; 5] = [
        dead_store_with_alias_facts,
        licm_with_alias_facts,
        load_forwarding_with_alias_facts,
        loop_fission_with_alias_facts,
        loop_fusion_with_alias_facts,
    ];
    let dataflow_aware_rewrites: [DataflowRewriteFn; 5] = [
        dead_store_with_dataflow_facts,
        licm_with_dataflow_facts,
        load_forwarding_with_dataflow_facts,
        loop_fission_with_dataflow_facts,
        loop_fusion_with_dataflow_facts,
    ];
    let weir_alias_rewrites: [WeirAliasRewriteFn; 5] = [
        dead_store_with_weir_alias_facts,
        licm_with_weir_alias_facts,
        load_forwarding_with_weir_alias_facts,
        loop_fission_with_weir_alias_facts,
        loop_fusion_with_weir_alias_facts,
    ];
    let dataflow_analysis_rewrites: [DataflowAnalysisRewriteFn; 5] = [
        dead_store_with_dataflow_analysis_facts,
        licm_with_dataflow_analysis_facts,
        load_forwarding_with_dataflow_analysis_facts,
        loop_fission_with_dataflow_analysis_facts,
        loop_fusion_with_dataflow_analysis_facts,
    ];

    assert_eq!(alias_aware_rewrites.len(), 5);
    assert_eq!(dataflow_aware_rewrites.len(), 5);
    assert_eq!(weir_alias_rewrites.len(), 5);
    assert_eq!(dataflow_analysis_rewrites.len(), 5);
}