Unify type uniquing and construction.
This allows for us to decouple type uniquing/construction from MLIRContext and pave the way for dialect specific types. To accomplish this we two new classes, TypeUniquer and TypeStorageAllocator. * TypeUniquer is now responsible for all construction and uniquing of types. * TypeStorageAllocator is a utility used by derived type storage objects to allocate memory within an MLIRContext. This cl also standardizes what a derived type storage class needs to provide: - Define a type alias, KeyTy, to a type that uniquely identifies the instance of the type within its kind. * The key type must be constructible from the values passed into the detail::TypeUniquer::get call after the type kind. * The key type must have a llvm::DenseMapInfo specialization for hashing. - Provide a method, 'KeyTy getKey() const', to construct the key type from an existing storage instance. - Provide a construction method: 'DerivedStorage *construct(TypeStorageAllocator &, ...)' that builds a unique instance of the derived storage. The arguments after the TypeStorageAllocator must correspond with the values passed into the detail::TypeUniquer::get call after the type kind. PiperOrigin-RevId: 226507184
Loading
Please sign in to comment