use cubecl::prelude::*;
use crate::tile::{
BounceTile, CmmaTile, InterleavedTile, MmaTile, PlaneVecTile, RegisterTile, ScopeMarker,
SharedTile, TileScope, UnitTile, WhiteboxFragment,
};
#[derive(CubeType)]
pub enum Tile<N: Numeric, Sc: TileScope, IO: SliceVisibility> {
SharedMemory(SharedTile<N, IO>),
Cmma(CmmaTile<N>),
Mma(MmaTile<N>),
Register(RegisterTile<N>),
PlaneVec(PlaneVecTile<N>),
Interleaved(InterleavedTile<N>),
Unit(UnitTile<N>),
WhiteboxFragment(WhiteboxFragment<N>),
Bounce(BounceTile<N>),
Broadcasted(Value<N>),
None,
_Phantom(ScopeMarker<Sc>),
}
#[derive(CubeType)]
pub struct Value<E: Numeric> {
pub val: E,
}