pd-vm 0.22.5

RustScript bytecode compiler and VM
Documentation
use super::ir::{SsaInstKind, SsaMaterialization, SsaTrace};

pub(crate) fn boxed_load_site_count(trace: &SsaTrace) -> u64 {
    trace
        .blocks
        .iter()
        .flat_map(|block| block.insts.iter())
        .filter(|inst| {
            matches!(
                inst.kind,
                SsaInstKind::UnboxInt { .. }
                    | SsaInstKind::UnboxFloat { .. }
                    | SsaInstKind::UnboxBool { .. }
                    | SsaInstKind::UnboxHeapPtr { .. }
            )
        })
        .count() as u64
}

pub(crate) fn boxed_store_site_count(trace: &SsaTrace) -> u64 {
    trace
        .exits
        .iter()
        .flat_map(|exit| exit.stack.iter().chain(exit.locals.iter()))
        .filter(|materialization| {
            matches!(
                materialization,
                SsaMaterialization::BoxInt(_)
                    | SsaMaterialization::BoxFloat(_)
                    | SsaMaterialization::BoxBool(_)
                    | SsaMaterialization::BoxHeapPtr { .. }
            )
        })
        .count() as u64
}