1use cubecl::prelude::*;
2
3use crate::tile::{
4 BounceTile, CmmaTile, InterleavedTile, MmaTile, PlaneVecTile, RegisterTile, ScopeMarker,
5 SharedTile, TileScope, UnitTile, WhiteboxFragment,
6};
7
8#[derive(CubeType)]
9pub enum Tile<N: Numeric, Sc: TileScope, IO: SliceVisibility> {
10 SharedMemory(SharedTile<N, IO>),
11 Cmma(CmmaTile<N>),
12 Mma(MmaTile<N>),
13 Register(RegisterTile<N>),
14 PlaneVec(PlaneVecTile<N>),
15 Interleaved(InterleavedTile<N>),
16 Unit(UnitTile<N>),
19 WhiteboxFragment(WhiteboxFragment<N>),
22 Bounce(BounceTile<N>),
26 Broadcasted(Value<N>),
27 None,
28 _Phantom(ScopeMarker<Sc>),
29}
30
31#[derive(CubeType)]
33pub struct Value<E: Numeric> {
34 pub val: E,
35}