13#ifndef CIR_DIALECT_IR_CIRTYPESDETAILS_H
14#define CIR_DIALECT_IR_CIRTYPESDETAILS_H
16#include "mlir/IR/BuiltinAttributes.h"
17#include "mlir/Support/LogicalResult.h"
19#include "llvm/ADT/Hashing.h"
58 assert((
name || !
incomplete) &&
"Incomplete records must have a name");
60 "every member must say what it holds");
91 llvm::LogicalResult
mutate(mlir::TypeStorageAllocator &allocator,
95 return llvm::failure();
101 return mlir::success((this->members ==
members) &&
102 (this->packed ==
packed) &&
103 (this->member_kinds == memberKinds));
107 if (memberKinds.size() !=
members.size())
108 return llvm::failure();
110 this->members = allocator.copyInto(
members);
112 this->member_kinds = allocator.copyInto(memberKinds);
114 return llvm::success();
151 assert((
name || !
incomplete) &&
"Incomplete records must have a name");
153 "every member must say what it holds");
170 return llvm::hash_combine(key.
name);
183 llvm::LogicalResult
mutate(mlir::TypeStorageAllocator &allocator,
188 return llvm::failure();
194 return mlir::success(
196 (this->padding ==
padding) && (this->member_kinds == memberKinds));
200 if (memberKinds.size() !=
members.size())
201 return llvm::failure();
203 this->members = allocator.copyInto(
members);
206 this->member_kinds = allocator.copyInto(memberKinds);
208 return llvm::success();
KeyTy(llvm::ArrayRef< mlir::Type > members, mlir::StringAttr name, bool incomplete, bool packed, llvm::ArrayRef< RecordMemberKind > member_kinds, bool is_class)
llvm::ArrayRef< RecordMemberKind > member_kinds
llvm::ArrayRef< mlir::Type > members
static llvm::hash_code hashKey(const KeyTy &key)
llvm::LogicalResult mutate(mlir::TypeStorageAllocator &allocator, llvm::ArrayRef< mlir::Type > members, bool packed, llvm::ArrayRef< RecordMemberKind > memberKinds)
Mutates the members and attributes of an identified struct/class.
llvm::ArrayRef< mlir::Type > members
static StructTypeStorage * construct(mlir::TypeStorageAllocator &allocator, const KeyTy &key)
bool operator==(const KeyTy &key) const
llvm::ArrayRef< RecordMemberKind > member_kinds
StructTypeStorage(llvm::ArrayRef< mlir::Type > members, mlir::StringAttr name, bool incomplete, bool packed, llvm::ArrayRef< RecordMemberKind > member_kinds, bool is_class)
llvm::ArrayRef< RecordMemberKind > member_kinds
llvm::ArrayRef< mlir::Type > members
KeyTy(llvm::ArrayRef< mlir::Type > members, mlir::StringAttr name, bool incomplete, bool packed, mlir::Type padding, llvm::ArrayRef< RecordMemberKind > member_kinds)
llvm::ArrayRef< mlir::Type > members
bool operator==(const KeyTy &key) const
static llvm::hash_code hashKey(const KeyTy &key)
static UnionTypeStorage * construct(mlir::TypeStorageAllocator &allocator, const KeyTy &key)
llvm::ArrayRef< RecordMemberKind > member_kinds
llvm::LogicalResult mutate(mlir::TypeStorageAllocator &allocator, llvm::ArrayRef< mlir::Type > members, bool packed, mlir::Type padding, llvm::ArrayRef< RecordMemberKind > memberKinds)
Mutates the members and attributes of an identified union.
UnionTypeStorage(llvm::ArrayRef< mlir::Type > members, mlir::StringAttr name, bool incomplete, bool packed, mlir::Type padding, llvm::ArrayRef< RecordMemberKind > member_kinds)