use crate::ir::{Elem, KernelDefinition};
use cubecl_runtime::ExecutionMode;
use std::fmt::Display;
pub trait CompilerRepresentation: Display {
fn shared_memory_size(&self) -> usize;
}
pub trait Compiler: Sync + Send + 'static + Clone + Default + core::fmt::Debug {
type Representation: CompilerRepresentation;
type CompilationOptions: Send + Default + core::fmt::Debug;
fn compile(
kernel: KernelDefinition,
compilation_options: &Self::CompilationOptions,
mode: ExecutionMode,
) -> Self::Representation;
fn elem_size(elem: Elem) -> usize;
fn max_shared_memory_size() -> usize;
}