weirflow 0.1.0

GPU-first dataflow analysis primitives for Vyre and Santh compiler pipelines.
Documentation
#[must_use]
#[deprecated(
    note = "reference oracle only; production code must dispatch the Weir Program on a concrete GPU backend or use weir::oracle for parity evidence"
)]
pub(crate) fn callgraph_build_cpu(
    direct_edges: &[u32],
    indirect_sites: &[u32],
    pts_closure: &[u32],
    node_count: u32,
) -> Vec<u32> {
    let words = crate::graph_layout::LinearDomain::new(node_count).bitset_words() as usize;
    crate::dispatch_decode::require_bitset_words(
        "callgraph_build_cpu direct_edges",
        direct_edges,
        words,
    )
    .expect("callgraph_build CPU oracle received malformed direct edge bitset");
    crate::dispatch_decode::require_bitset_words(
        "callgraph_build_cpu indirect_sites",
        indirect_sites,
        words,
    )
    .expect("callgraph_build CPU oracle received malformed indirect-site bitset");
    crate::dispatch_decode::require_bitset_words(
        "callgraph_build_cpu pts_closure",
        pts_closure,
        words,
    )
    .expect("callgraph_build CPU oracle received malformed points-to closure bitset");
    let mut out = crate::staging_reserve::reserved_vec(words, "callgraph CPU oracle output")
        .unwrap_or_else(|error| panic!("callgraph CPU oracle output reservation failed: {error}"));
    for idx in 0..words {
        out.push(direct_edges[idx] | (indirect_sites[idx] & pts_closure[idx]));
    }
    out
}

#[cfg(test)]
#[allow(deprecated)]
mod tests {
    use super::callgraph_build_cpu;

    #[test]
    #[should_panic(expected = "callgraph_build CPU oracle received malformed direct edge bitset")]
    fn callgraph_build_rejects_bad_direct_edges() {
        let _ = callgraph_build_cpu(&[0b1, 0b0], &[0b1], &[0b1], 2);
    }

    #[test]
    #[should_panic(expected = "callgraph_build CPU oracle received malformed indirect-site bitset")]
    fn callgraph_build_rejects_bad_indirect_sites() {
        let _ = callgraph_build_cpu(&[0b1], &[0b1, 0b0], &[0b1], 2);
    }

    #[test]
    #[should_panic(
        expected = "callgraph_build CPU oracle received malformed points-to closure bitset"
    )]
    fn callgraph_build_rejects_bad_pts_closure() {
        let _ = callgraph_build_cpu(&[0b1], &[0b1], &[0b1, 0b0], 2);
    }
}