polydat_core/compile/jit/
mod.rs1#[cfg(feature = "jit")]
28mod codegen;
29#[cfg(feature = "jit")]
30pub mod host_isa;
31#[cfg(feature = "jit")]
32mod kernels;
33#[cfg(feature = "jit")]
34pub mod simd;
35
36#[cfg(feature = "jit")]
37pub use codegen::*;
38#[cfg(feature = "jit")]
39pub use kernels::*;
40
41#[cfg(all(test, feature = "jit"))]
42mod tests {
43 use super::*;
44
45 #[test]
46 fn test_inventory_tier_distribution() {
47 use crate::ast::PortType;
48 use crate::compile::assembly::WireRef;
49 use crate::dsl::factory::{ConstArg, build_node};
50 use crate::dsl::registry::registry;
51
52 let reg = registry();
53 let total = reg.len();
54
55 let mut p1_count = 0;
56 let mut p2_count = 0;
57 let mut p3_count = 0;
58 let mut unbuilt = 0;
59
60 for sig in ® {
61 let mut consts = Vec::new();
62 for p in sig.params {
63 match p.slot_type {
64 crate::ast::SlotType::ConstU64 => consts.push(ConstArg::Int(1)),
65 crate::ast::SlotType::ConstF64 => consts.push(ConstArg::Float(1.0)),
66 crate::ast::SlotType::ConstStr => consts.push(ConstArg::Str("test".into())),
67 crate::ast::SlotType::ConstVecU64 => consts.push(ConstArg::Int(1)),
68 crate::ast::SlotType::ConstVecF64 => consts.push(ConstArg::Float(1.0)),
69 crate::ast::SlotType::ConstVec => consts.push(ConstArg::Int(1)),
70 crate::ast::SlotType::Wire => {}
71 }
72 }
73 let wires = vec![WireRef::Input("cycle".to_string()); sig.wire_input_count().max(1)];
74 let wire_types = vec![PortType::U64; wires.len()];
75
76 let node_res = build_node(sig.name, &wires, &wire_types, &consts);
77 if let Ok(node) = node_res {
78 let p2_eligible = crate::compile::node_tier(node.as_ref(), &wire_types)
81 != crate::ast::CompileLevel::Phase1;
82 let p3_eligible = classify_node(node.as_ref()) != JitOp::Fallback;
83 if p3_eligible {
84 p3_count += 1;
85 } else if p2_eligible {
86 p2_count += 1;
87 } else {
88 p1_count += 1;
89 }
90 } else {
91 unbuilt += 1;
92 p1_count += 1;
93 }
94 }
95
96 println!("\n=== COMPILER OPTIMIZATION INVENTORY SUMMARY ===");
97 println!("Total Registered Functions: {total}");
98 println!(
99 "Phase 3 (Full Native JIT): {p3_count} ({:.1}%)",
100 (p3_count as f64 / total as f64) * 100.0
101 );
102 println!(
103 "Phase 2 (Captured Closure): {p2_count} ({:.1}%)",
104 (p2_count as f64 / total as f64) * 100.0
105 );
106 println!(
107 "Phase 1 (Interpreter Cones):{p1_count} ({:.1}%) (unbuilt fallback: {unbuilt})",
108 (p1_count as f64 / total as f64) * 100.0
109 );
110 println!("===============================================\n");
111
112 let p1_share = p1_count as f64 / total as f64;
121 assert!(
122 p1_share < 0.15,
123 "{p1_count} of {total} registered nodes reach no compiled form \
124 ({:.1}%); the tier predicate has narrowed",
125 p1_share * 100.0
126 );
127 }
128}