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 = node.compiled_u64().is_some();
79 let p3_eligible = classify_node(node.as_ref()) != JitOp::Fallback;
80 if p3_eligible {
81 p3_count += 1;
82 } else if p2_eligible {
83 p2_count += 1;
84 } else {
85 p1_count += 1;
86 }
87 } else {
88 unbuilt += 1;
89 p1_count += 1;
90 }
91 }
92
93 println!("\n=== COMPILER OPTIMIZATION INVENTORY SUMMARY ===");
94 println!("Total Registered Functions: {total}");
95 println!(
96 "Phase 3 (Full Native JIT): {p3_count} ({:.1}%)",
97 (p3_count as f64 / total as f64) * 100.0
98 );
99 println!(
100 "Phase 2 (Captured Closure): {p2_count} ({:.1}%)",
101 (p2_count as f64 / total as f64) * 100.0
102 );
103 println!(
104 "Phase 1 (Interpreter Cones):{p1_count} ({:.1}%) (unbuilt fallback: {unbuilt})",
105 (p1_count as f64 / total as f64) * 100.0
106 );
107 println!("===============================================\n");
108 }
109}