cubecl_opt/
transformers.rs1use std::rc::Rc;
2
3use cubecl_common::{CubeDim, ExecutionMode};
4use cubecl_ir::{Instruction, Scope};
5
6use crate::Optimizer;
7
8#[derive(Debug, Default)]
10pub struct OptimizerBuilder {
11 transformers: Vec<Rc<dyn IrTransformer>>,
12}
13
14impl OptimizerBuilder {
15 pub fn with_transformer(mut self, transformer: impl IrTransformer + 'static) -> Self {
17 self.transformers.push(Rc::new(transformer));
18 self
19 }
20
21 pub fn optimize(self, expand: Scope, cube_dim: CubeDim, mode: ExecutionMode) -> Optimizer {
23 Optimizer::new(expand, cube_dim, mode, self.transformers)
24 }
25}
26
27pub enum TransformAction {
29 Ignore,
31 Replace(Vec<Instruction>),
33 Remove,
35}
36
37pub trait IrTransformer: core::fmt::Debug {
39 fn maybe_transform(&self, scope: &mut Scope, inst: &Instruction) -> TransformAction;
41}