Expand description
DECY-196: HIR optimization passes.
Three optimization passes run between ownership inference and codegen:
- Constant folding: Evaluate literal arithmetic at compile time
- Dead branch removal: Eliminate
if(1)/if(0)branches - Temporary elimination: Remove single-use let bindings
Passes run in a fixed-point loop (max 3 iterations).
§Examples
use decy_hir::{HirFunction, HirType, HirStatement, HirExpression, BinaryOperator};
// Create function with `return 2 + 3;`
let func = HirFunction::new_with_body(
"test".to_string(),
HirType::Int,
vec![],
vec![HirStatement::Return(Some(HirExpression::BinaryOp {
op: BinaryOperator::Add,
left: Box::new(HirExpression::IntLiteral(2)),
right: Box::new(HirExpression::IntLiteral(3)),
}))],
);
let optimized = decy_core::optimize::optimize_function(&func);
// After constant folding: `return 5;`
assert_eq!(optimized.body().len(), 1);Functions§
- optimize_
function - Run all optimization passes on a function.