Expand description
Multi-pass optimization pipeline for TLExpr expressions.
This module provides a unified optimization pipeline that combines multiple optimization passes and applies them iteratively until a fixed point is reached.
§Architecture
The pipeline applies 7 optimization passes in this order:
- Negation optimization: Push negations inward using De Morgan’s laws
- Constant folding: Evaluate constant expressions at compile time
- Algebraic simplification: Apply mathematical identities (x+0=x, x*1=x, etc.)
- Strength reduction: Replace expensive operations with cheaper equivalents (x^2→x*x)
- Distributivity: Factor common subexpressions (ab + ac → a*(b+c))
- Quantifier optimization: Loop-invariant code motion (∃x.(a+p(x)) → a + ∃x.p(x))
- Dead code elimination: Remove unreachable code and constant branches
This order is chosen because:
- Negation optimization can expose more opportunities for other passes
- Constant folding creates simpler expressions for subsequent passes
- Algebraic simplification can create new constants and identity patterns
- Strength reduction makes operations more efficient
- Distributivity reduces redundant computation
- Quantifier optimization hoists loop-invariant code
- Dead code elimination removes unreachable branches created by earlier passes
§Examples
use tensorlogic_compiler::optimize::{OptimizationPipeline, PipelineConfig};
use tensorlogic_ir::{TLExpr, Term};
// Create a pipeline with default configuration
let pipeline = OptimizationPipeline::new();
// Optimize an expression: NOT(AND(x + 0, 2.0 * 3.0))
let x = TLExpr::pred("x", vec![Term::var("i")]);
let expr = TLExpr::negate(TLExpr::and(
TLExpr::add(x, TLExpr::Constant(0.0)),
TLExpr::mul(TLExpr::Constant(2.0), TLExpr::Constant(3.0)),
));
let (optimized, stats) = pipeline.optimize(&expr);
// Pipeline applies multiple passes and reports statistics
assert!(stats.total_iterations > 0);
assert!(stats.constant_folding.binary_ops_folded > 0);
assert!(stats.algebraic.identities_eliminated > 0);Structs§
- Iteration
Stats - Statistics from a single pipeline iteration.
- Optimization
Pipeline - Multi-pass optimization pipeline for TLExpr expressions.
- Pipeline
Config - Configuration for the optimization pipeline.
- Pipeline
Stats - Cumulative statistics from all pipeline iterations.