calyx 0.7.1

Compiler Infrastructure for Hardware Accelerator Generation
use calyx_frontend as frontend;
use calyx_ir as ir;
use calyx_opt::passes;
use calyx_opt::traversal::Visitor;
use criterion::{
    criterion_group, criterion_main, BatchSize, BenchmarkId, Criterion,
};
use std::path::Path;

fn cell_share_bench(c: &mut Criterion) {
    let mut gemm_group = c.benchmark_group("gemm");
    for name in &["gemm2", "gemm3", "gemm4", "gemm6", "gemm8"] {
        gemm_group.bench_with_input(
            BenchmarkId::from_parameter(name),
            name,
            |b, &name| {
                b.iter_batched(
                    || {
                        let name =
                            format!("benches/component-sharing/{}.futil", name);
                        let bench = Path::new(&name);
                        let lib = Path::new(".");

                        let ws = frontend::Workspace::construct(
                            &Some(bench.into()),
                            lib,
                        )
                        .unwrap();

                        let mut rep = ir::from_ast::ast_to_ir(ws).unwrap();

                        passes::SimplifyWithControl::do_pass_default(&mut rep)
                            .unwrap();
                        rep
                    },
                    |mut rep: ir::Context| {
                        passes::CellShare::do_pass_default(&mut rep).unwrap();
                    },
                    BatchSize::SmallInput,
                )
            },
        );
    }
    gemm_group.finish();
}

criterion_group! {
    name = cell_share;
    config = Criterion::default().sample_size(20);
    targets = cell_share_bench
}
criterion_main!(cell_share);