@@ -17,14 +17,12 @@ pub trait ToMlir {
1717}
1818
1919impl Nat {
20- fn to_dimension_i64 ( self : & Self ) -> i64 {
20+ fn to_dimension ( self : & Self ) -> Vec < i64 > {
2121 // Try to evaluate the Nat with an empty context
2222 let nat_ctx = NatCtx :: new ( ) ;
2323 match self . eval ( & nat_ctx) {
24- Ok ( size) => size as i64 ,
25- Err ( _) => panic ! (
26- "Array dimensions must be compile-time known. Dynamic arrays are not supported."
27- ) ,
24+ Ok ( size) => vec ! [ size as i64 ] ,
25+ Err ( _) => vec ! [ ] ,
2826 }
2927 }
3028}
@@ -149,8 +147,8 @@ fn ref_array_to_mlir<'c>(
149147) -> Type < ' c > {
150148 // Array reference -> memref with dimensions
151149 let elem_type = elem_ty. to_mlir ( context) ;
152- let dim = size. to_dimension_i64 ( ) ;
153- let base_type: Type < ' c > = MemRefType :: new ( elem_type, & [ dim] , None , None ) . into ( ) ;
150+ let dim = size. to_dimension ( ) ;
151+ let base_type: Type < ' c > = MemRefType :: new ( elem_type, & dim, None , None ) . into ( ) ;
154152
155153 // Add HIVM address space if needed
156154 let base_str = base_type. to_string ( ) ;
@@ -169,8 +167,8 @@ fn ref_at_to_mlir<'c>(inner: &DataTy, mem: &Memory, context: &'c Context) -> Typ
169167 }
170168 DataTyKind :: Array ( elem_ty, size) | DataTyKind :: ArrayShape ( elem_ty, size) => {
171169 let elem_type = elem_ty. to_mlir ( context) ;
172- let dim = size. to_dimension_i64 ( ) ;
173- MemRefType :: new ( elem_type, & [ dim] , None , None ) . into ( )
170+ let dim = size. to_dimension ( ) ;
171+ MemRefType :: new ( elem_type, & dim, None , None ) . into ( )
174172 }
175173 DataTyKind :: Tuple ( _) => {
176174 unimplemented ! ( "Tuple references with At not yet supported in MLIR conversion" )
@@ -239,13 +237,13 @@ impl ToMlir for DataTy {
239237 DataTyKind :: Ident ( ident) => ident. to_mlir ( context) ,
240238 DataTyKind :: Array ( elem_ty, size) => {
241239 let elem_type = elem_ty. to_mlir ( context) ;
242- let dim = size. to_dimension_i64 ( ) ;
243- MemRefType :: new ( elem_type, & [ dim] , None , None ) . into ( )
240+ let dim = size. to_dimension ( ) ;
241+ MemRefType :: new ( elem_type, & dim, None , None ) . into ( )
244242 }
245243 DataTyKind :: ArrayShape ( elem_ty, size) => {
246244 let elem_type = elem_ty. to_mlir ( context) ;
247- let dim = size. to_dimension_i64 ( ) ;
248- MemRefType :: new ( elem_type, & [ dim] , None , None ) . into ( )
245+ let dim = size. to_dimension ( ) ;
246+ MemRefType :: new ( elem_type, & dim, None , None ) . into ( )
249247 }
250248 DataTyKind :: Struct ( _) => {
251249 unimplemented ! ( "Struct types not yet supported in MLIR conversion" )
0 commit comments