Skip to main content

Module pipeline

Module pipeline 

Source
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:

  1. Negation optimization: Push negations inward using De Morgan’s laws
  2. Constant folding: Evaluate constant expressions at compile time
  3. Algebraic simplification: Apply mathematical identities (x+0=x, x*1=x, etc.)
  4. Strength reduction: Replace expensive operations with cheaper equivalents (x^2→x*x)
  5. Distributivity: Factor common subexpressions (ab + ac → a*(b+c))
  6. Quantifier optimization: Loop-invariant code motion (∃x.(a+p(x)) → a + ∃x.p(x))
  7. 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§

IterationStats
Statistics from a single pipeline iteration.
OptimizationPipeline
Multi-pass optimization pipeline for TLExpr expressions.
PipelineConfig
Configuration for the optimization pipeline.
PipelineStats
Cumulative statistics from all pipeline iterations.