[Mlir-commits] [mlir] [mlir] Add loaded URI attribute type (PR #67276)
Jeff Niu
llvmlistbot at llvm.org
Mon Sep 25 09:55:02 PDT 2023
================
@@ -1761,6 +1762,193 @@ Attribute DistinctAttr::getReferencedAttr() const {
return getImpl()->referencedAttr;
}
+//===----------------------------------------------------------------------===//
+// LoadedURIDenseResourceAttr
+//===----------------------------------------------------------------------===//
+
+namespace mlir {
+namespace detail {
+struct LoadedURIDenseResourceAttrStorage : public ::mlir::AttributeStorage {
+ using KeyTy =
+ std::tuple<StringRef, Type, std::optional<int64_t>,
+ std::optional<int64_t>, std::optional<int64_t>,
+ ArrayRef<FlatSymbolRefAttr>,
+ std::optional<FailureOr<DenseResourceElementsHandle>>>;
+ LoadedURIDenseResourceAttrStorage(
+ StringRef uri, Type type, std::optional<int64_t> alignment,
+ std::optional<int64_t> offset, std::optional<int64_t> size,
+ ArrayRef<FlatSymbolRefAttr> nestedReferences,
+ std::optional<FailureOr<DenseResourceElementsHandle>> rawHandle)
+ : uri(uri), type(type), nestedReferences(nestedReferences),
+ alignment(alignment), offset(offset), size(size), rawHandle(rawHandle) {
+ }
+
+ KeyTy getAsKey() const {
+ return KeyTy(uri, type, alignment, offset, size, nestedReferences,
+ rawHandle);
+ }
+
+ bool operator==(const KeyTy &key) const {
+ return (uri == std::get<0>(key)) && (type == std::get<1>(key)) &&
+ (alignment == std::get<2>(key)) && (offset == std::get<3>(key)) &&
+ (size == std::get<4>(key)) && (nestedReferences == std::get<5>(key));
+ }
+
+ static llvm::hash_code hashKey(const KeyTy &key) {
+ return llvm::hash_combine(std::get<0>(key), std::get<1>(key),
+ std::get<2>(key), std::get<3>(key),
+ std::get<4>(key), std::get<5>(key));
+ }
+
+ static LoadedURIDenseResourceAttrStorage *
+ construct(AttributeStorageAllocator &allocator, const KeyTy &key) {
+ auto uri = std::get<0>(key);
+ auto type = std::get<1>(key);
+ auto alignment = std::get<2>(key);
+ auto offset = std::get<3>(key);
+ auto size = std::get<4>(key);
+ auto nestedReferences = std::get<5>(key);
+ auto rawHandle = std::get<6>(key);
+ uri = allocator.copyInto(uri);
+ nestedReferences = allocator.copyInto(nestedReferences);
+
+ return new (allocator.allocate<LoadedURIDenseResourceAttrStorage>())
+ LoadedURIDenseResourceAttrStorage(uri, type, alignment, offset, size,
+ nestedReferences, rawHandle);
+ }
+
+ void initialize(MLIRContext *context) {
----------------
Mogball wrote:
I didn't know there was an `initialize` hook! When does it get called?
https://github.com/llvm/llvm-project/pull/67276
More information about the Mlir-commits
mailing list