17 #include "llvm-c/Core.h"
18 #include "llvm/ADT/SmallVector.h"
19 #include "llvm/ADT/SmallVectorExtras.h"
31 return isa<LLVM::LLVMPointerType>(
unwrap(type));
35 return cast<LLVM::LLVMPointerType>(
unwrap(pointerType)).getAddressSpace();
51 MlirType
const *argumentTypes,
bool isVarArg) {
55 unwrapList(nArgumentTypes, argumentTypes, argumentStorage), isVarArg));
59 return isa<LLVM::LLVMStructType>(
unwrap(type));
63 return !cast<LLVM::LLVMStructType>(
unwrap(type)).isIdentified();
67 return cast<LLVM::LLVMStructType>(
unwrap(type)).getBody().size();
71 return wrap(cast<LLVM::LLVMStructType>(
unwrap(type)).getBody()[position]);
75 return cast<LLVM::LLVMStructType>(
unwrap(type)).isPacked();
79 return wrap(cast<LLVM::LLVMStructType>(
unwrap(type)).getName());
83 return cast<LLVM::LLVMStructType>(
unwrap(type)).isOpaque();
87 MlirType
const *fieldTypes,
90 return wrap(LLVMStructType::getLiteral(
97 MlirType
const *fieldTypes,
100 return wrap(LLVMStructType::getLiteralChecked(
102 unwrapList(nFieldTypes, fieldTypes, fieldStorage), isPacked));
114 intptr_t nFieldTypes,
115 MlirType
const *fieldTypes,
118 return wrap(LLVMStructType::getNewIdentified(
124 intptr_t nFieldTypes,
125 MlirType
const *fieldTypes,
129 cast<LLVM::LLVMStructType>(
unwrap(structType))
130 .setBody(
unwrapList(nFieldTypes, fieldTypes, fields), isPacked));
136 uint64_t
const *arguments) {
142 MlirAttribute
const *operations) {
144 attrStorage.reserve(nOperations);
149 unwrapList(nOperations, operations, attrStorage),
150 [](
Attribute a) {
return cast<DIExpressionElemAttr>(a); })));
163 unwrap(ctx), tag, cast<StringAttr>(
unwrap(name)), sizeInBits, encoding));
168 DICompositeTypeAttr::getRecSelf(cast<DistinctAttr>(
unwrap(recId))));
172 MlirContext ctx, MlirAttribute recId,
bool isRecSelf,
unsigned int tag,
173 MlirAttribute name, MlirAttribute file, uint32_t line, MlirAttribute scope,
174 MlirAttribute baseType, int64_t flags, uint64_t sizeInBits,
175 uint64_t alignInBits, intptr_t nElements, MlirAttribute
const *elements,
176 MlirAttribute dataLocation, MlirAttribute rank, MlirAttribute allocated,
177 MlirAttribute associated) {
179 elementsStorage.reserve(nElements);
182 unwrap(ctx), cast<DistinctAttr>(
unwrap(recId)), isRecSelf, tag,
183 cast<StringAttr>(
unwrap(name)), cast<DIFileAttr>(
unwrap(file)), line,
184 cast<DIScopeAttr>(
unwrap(scope)), cast<DITypeAttr>(
unwrap(baseType)),
185 DIFlags(flags), sizeInBits, alignInBits,
186 llvm::map_to_vector(
unwrapList(nElements, elements, elementsStorage),
187 [](
Attribute a) {
return cast<DINodeAttr>(a); }),
188 cast<DIExpressionAttr>(
unwrap(dataLocation)),
189 cast<DIExpressionAttr>(
unwrap(rank)),
190 cast<DIExpressionAttr>(
unwrap(allocated)),
191 cast<DIExpressionAttr>(
unwrap(associated))));
195 MlirContext ctx,
unsigned int tag, MlirAttribute name,
196 MlirAttribute baseType, uint64_t sizeInBits, uint32_t alignInBits,
197 uint64_t offsetInBits, int64_t dwarfAddressSpace, MlirAttribute extraData) {
198 std::optional<unsigned> addressSpace = std::nullopt;
199 if (dwarfAddressSpace >= 0)
200 addressSpace = (unsigned)dwarfAddressSpace;
203 cast<DITypeAttr>(
unwrap(baseType)), sizeInBits, alignInBits, offsetInBits,
204 addressSpace, cast<DINodeAttr>(
unwrap(extraData))));
208 MlirContext ctx,
unsigned int tag, MlirAttribute name, uint64_t sizeInBits,
209 uint32_t alignInBits, MlirAttribute stringLength,
210 MlirAttribute stringLengthExp, MlirAttribute stringLocationExp,
213 unwrap(ctx), tag, cast<StringAttr>(
unwrap(name)), sizeInBits, alignInBits,
214 cast<DIVariableAttr>(
unwrap(stringLength)),
215 cast<DIExpressionAttr>(
unwrap(stringLengthExp)),
216 cast<DIExpressionAttr>(
unwrap(stringLocationExp)), encoding));
221 return wrap(cast<DIDerivedTypeAttr>(
unwrap(diDerivedType)).getBaseType());
237 MlirAttribute directory) {
239 cast<StringAttr>(
unwrap(directory))));
244 unsigned int sourceLanguage, MlirAttribute file,
245 MlirAttribute producer,
bool isOptimized,
249 unwrap(ctx), cast<DistinctAttr>(
unwrap(
id)), sourceLanguage,
250 cast<DIFileAttr>(
unwrap(file)), cast<StringAttr>(
unwrap(producer)),
251 isOptimized, DIEmissionKind(emissionKind),
252 DINameTableKind(nameTableKind)));
263 unsigned int column) {
266 cast<DIFileAttr>(
unwrap(file)), line, column));
272 unsigned int discriminator) {
275 cast<DIFileAttr>(
unwrap(file)), discriminator));
279 MlirContext ctx, MlirAttribute scope, MlirAttribute name,
280 MlirAttribute diFile,
unsigned int line,
unsigned int arg,
281 unsigned int alignInBits, MlirAttribute diType, int64_t flags) {
284 cast<StringAttr>(
unwrap(name)), cast<DIFileAttr>(
unwrap(diFile)), line,
285 arg, alignInBits, cast<DITypeAttr>(
unwrap(diType)), DIFlags(flags)));
289 unsigned int callingConvention,
291 MlirAttribute
const *types) {
293 attrStorage.reserve(nTypes);
296 unwrap(ctx), callingConvention,
297 llvm::map_to_vector(
unwrapList(nTypes, types, attrStorage),
298 [](
Attribute a) {
return cast<DITypeAttr>(a); })));
302 return wrap(DISubprogramAttr::getRecSelf(cast<DistinctAttr>(
unwrap(recId))));
306 MlirContext ctx, MlirAttribute recId,
bool isRecSelf, MlirAttribute
id,
307 MlirAttribute compileUnit, MlirAttribute scope, MlirAttribute name,
308 MlirAttribute linkageName, MlirAttribute file,
unsigned int line,
309 unsigned int scopeLine, uint64_t subprogramFlags, MlirAttribute type,
310 intptr_t nRetainedNodes, MlirAttribute
const *retainedNodes,
311 intptr_t nAnnotations, MlirAttribute
const *annotations) {
313 nodesStorage.reserve(nRetainedNodes);
316 annotationsStorage.reserve(nAnnotations);
319 unwrap(ctx), cast<DistinctAttr>(
unwrap(recId)), isRecSelf,
320 cast<DistinctAttr>(
unwrap(
id)),
321 cast<DICompileUnitAttr>(
unwrap(compileUnit)),
322 cast<DIScopeAttr>(
unwrap(scope)), cast<StringAttr>(
unwrap(name)),
323 cast<StringAttr>(
unwrap(linkageName)), cast<DIFileAttr>(
unwrap(file)),
324 line, scopeLine, DISubprogramFlags(subprogramFlags),
325 cast<DISubroutineTypeAttr>(
unwrap(type)),
327 unwrapList(nRetainedNodes, retainedNodes, nodesStorage),
328 [](
Attribute a) {
return cast<DINodeAttr>(a); }),
330 unwrapList(nAnnotations, annotations, annotationsStorage),
331 [](
Attribute a) {
return cast<DINodeAttr>(a); })));
335 return wrap(cast<DISubprogramAttr>(
unwrap(diSubprogram)).getScope());
339 return cast<DISubprogramAttr>(
unwrap(diSubprogram)).getLine();
343 return cast<DISubprogramAttr>(
unwrap(diSubprogram)).getScopeLine();
348 return wrap(cast<DISubprogramAttr>(
unwrap(diSubprogram)).getCompileUnit());
352 return wrap(cast<DISubprogramAttr>(
unwrap(diSubprogram)).getFile());
360 MlirAttribute scope, MlirAttribute name,
361 MlirAttribute configMacros,
362 MlirAttribute includePath,
363 MlirAttribute apinotes,
unsigned int line,
367 cast<DIScopeAttr>(
unwrap(scope)), cast<StringAttr>(
unwrap(name)),
368 cast<StringAttr>(
unwrap(configMacros)),
369 cast<StringAttr>(
unwrap(includePath)), cast<StringAttr>(
unwrap(apinotes)),
374 return wrap(cast<DIModuleAttr>(
unwrap(diModule)).getScope());
378 MlirContext ctx,
unsigned int tag, MlirAttribute scope,
379 MlirAttribute entity, MlirAttribute file,
unsigned int line,
380 MlirAttribute name, intptr_t nElements, MlirAttribute
const *elements) {
382 elementsStorage.reserve(nElements);
385 cast<DINodeAttr>(
unwrap(entity)), cast<DIFileAttr>(
unwrap(file)), line,
386 cast<StringAttr>(
unwrap(name)),
387 llvm::map_to_vector(
unwrapList(nElements, elements, elementsStorage),
388 [](
Attribute a) {
return cast<DINodeAttr>(a); })));
392 MlirAttribute value) {
394 cast<StringAttr>(
unwrap(value))));
bool mlirLLVMStructTypeIsLiteral(MlirType type)
Returns true if the type is a literal (unnamed) LLVM struct type.
MlirAttribute mlirLLVMLinkageAttrGet(MlirContext ctx, MlirLLVMLinkage linkage)
Creates a LLVM Linkage attribute.
MlirAttribute mlirLLVMDISubprogramAttrGetFile(MlirAttribute diSubprogram)
Gets the file from this DISubprogramAttr.
MlirType mlirLLVMFunctionTypeGet(MlirType resultType, intptr_t nArgumentTypes, MlirType const *argumentTypes, bool isVarArg)
Creates an llvm.func type.
MlirAttribute mlirLLVMDIModuleAttrGetScope(MlirAttribute diModule)
Gets the scope of this DIModuleAttr.
intptr_t mlirLLVMStructTypeGetNumElementTypes(MlirType type)
Returns the number of fields in the struct.
MlirAttribute mlirLLVMDINullTypeAttrGet(MlirContext ctx)
Creates a LLVM DINullType attribute.
MlirType mlirLLVMArrayTypeGetElementType(MlirType type)
Returns the element type of the llvm.array type.
MlirLogicalResult mlirLLVMStructTypeSetBody(MlirType structType, intptr_t nFieldTypes, MlirType const *fieldTypes, bool isPacked)
Sets the body of the identified struct if it hasn't been set yet.
MlirAttribute mlirLLVMDIFileAttrGet(MlirContext ctx, MlirAttribute name, MlirAttribute directory)
Creates a LLVM DIFileAttr attribute.
MlirAttribute mlirLLVMDICompileUnitAttrGet(MlirContext ctx, MlirAttribute id, unsigned int sourceLanguage, MlirAttribute file, MlirAttribute producer, bool isOptimized, MlirLLVMDIEmissionKind emissionKind, MlirLLVMDINameTableKind nameTableKind)
Creates a LLVM DICompileUnit attribute.
bool mlirTypeIsALLVMStructType(MlirType type)
Returns true if the type is an LLVM dialect struct type.
MlirStringRef mlirLLVMStructTypeGetIdentifier(MlirType type)
Returns the identifier of the identified struct.
MlirAttribute mlirLLVMDIStringTypeAttrGet(MlirContext ctx, unsigned int tag, MlirAttribute name, uint64_t sizeInBits, uint32_t alignInBits, MlirAttribute stringLength, MlirAttribute stringLengthExp, MlirAttribute stringLocationExp, MlirLLVMTypeEncoding encoding)
MlirAttribute mlirLLVMDICompositeTypeAttrGet(MlirContext ctx, MlirAttribute recId, bool isRecSelf, unsigned int tag, MlirAttribute name, MlirAttribute file, uint32_t line, MlirAttribute scope, MlirAttribute baseType, int64_t flags, uint64_t sizeInBits, uint64_t alignInBits, intptr_t nElements, MlirAttribute const *elements, MlirAttribute dataLocation, MlirAttribute rank, MlirAttribute allocated, MlirAttribute associated)
Creates a LLVM DICompositeType attribute.
MlirAttribute mlirLLVMDISubprogramAttrGetScope(MlirAttribute diSubprogram)
Gets the scope from this DISubprogramAttr.
MlirAttribute mlirLLVMDILexicalBlockAttrGet(MlirContext ctx, MlirAttribute scope, MlirAttribute file, unsigned int line, unsigned int column)
Creates a LLVM DILexicalBlock attribute.
MlirAttribute mlirLLVMDIExpressionElemAttrGet(MlirContext ctx, unsigned int opcode, intptr_t nArguments, uint64_t const *arguments)
Creates a LLVM DIExpressionElem attribute.
MlirAttribute mlirLLVMDICompositeTypeAttrGetRecSelf(MlirAttribute recId)
Creates a self-referencing LLVM DICompositeType attribute.
MlirAttribute mlirLLVMDIBasicTypeAttrGet(MlirContext ctx, unsigned int tag, MlirAttribute name, uint64_t sizeInBits, MlirLLVMTypeEncoding encoding)
Creates a LLVM DIBasicType attribute.
MlirAttribute mlirLLVMComdatAttrGet(MlirContext ctx, MlirLLVMComdat comdat)
Creates a LLVM Comdat attribute.
MlirAttribute mlirLLVMDISubprogramAttrGetRecSelf(MlirAttribute recId)
Creates a self-referencing LLVM DISubprogramAttr attribute.
MlirType mlirLLVMVoidTypeGet(MlirContext ctx)
Creates an llmv.void type.
MlirAttribute mlirLLVMDIImportedEntityAttrGet(MlirContext ctx, unsigned int tag, MlirAttribute scope, MlirAttribute entity, MlirAttribute file, unsigned int line, MlirAttribute name, intptr_t nElements, MlirAttribute const *elements)
Creates a LLVM DIImportedEntityAttr attribute.
MlirType mlirLLVMStructTypeIdentifiedNewGet(MlirContext ctx, MlirStringRef name, intptr_t nFieldTypes, MlirType const *fieldTypes, bool isPacked)
Creates an LLVM identified struct type with no body and a name starting with the given prefix.
MlirType mlirLLVMStructTypeGetElementType(MlirType type, intptr_t position)
Returns the positions-th field of the struct.
MlirType mlirLLVMStructTypeOpaqueGet(MlirContext ctx, MlirStringRef name)
MlirType mlirLLVMArrayTypeGet(MlirType elementType, unsigned numElements)
Creates an llvm.array type.
MlirAttribute mlirLLVMDISubprogramAttrGetType(MlirAttribute diSubprogram)
Gets the type from this DISubprogramAttr.
MlirAttribute mlirLLVMDISubprogramAttrGetCompileUnit(MlirAttribute diSubprogram)
Gets the compile unit from this DISubprogram.
MlirAttribute mlirLLVMDIModuleAttrGet(MlirContext ctx, MlirAttribute file, MlirAttribute scope, MlirAttribute name, MlirAttribute configMacros, MlirAttribute includePath, MlirAttribute apinotes, unsigned int line, bool isDecl)
Creates a LLVM DIModuleAttr attribute.
MlirAttribute mlirLLVMCConvAttrGet(MlirContext ctx, MlirLLVMCConv cconv)
Creates a LLVM CConv attribute.
MlirAttribute mlirLLVMDIAnnotationAttrGet(MlirContext ctx, MlirAttribute name, MlirAttribute value)
Creates a LLVM DIAnnotation attribute.
MlirType mlirLLVMStructTypeLiteralGetChecked(MlirLocation loc, intptr_t nFieldTypes, MlirType const *fieldTypes, bool isPacked)
Creates an LLVM literal (unnamed) struct type if possible.
MlirAttribute mlirLLVMDILexicalBlockFileAttrGet(MlirContext ctx, MlirAttribute scope, MlirAttribute file, unsigned int discriminator)
Creates a LLVM DILexicalBlockFile attribute.
MlirAttribute mlirLLVMDIExpressionAttrGet(MlirContext ctx, intptr_t nOperations, MlirAttribute const *operations)
Creates a LLVM DIExpression attribute.
bool mlirLLVMStructTypeIsPacked(MlirType type)
Returns true if the struct is packed.
MlirAttribute mlirLLVMDISubprogramAttrGet(MlirContext ctx, MlirAttribute recId, bool isRecSelf, MlirAttribute id, MlirAttribute compileUnit, MlirAttribute scope, MlirAttribute name, MlirAttribute linkageName, MlirAttribute file, unsigned int line, unsigned int scopeLine, uint64_t subprogramFlags, MlirAttribute type, intptr_t nRetainedNodes, MlirAttribute const *retainedNodes, intptr_t nAnnotations, MlirAttribute const *annotations)
Creates a LLVM DISubprogramAttr attribute.
unsigned mlirLLVMPointerTypeGetAddressSpace(MlirType pointerType)
Returns address space of llvm.ptr.
MlirAttribute mlirLLVMDIFlagsAttrGet(MlirContext ctx, uint64_t value)
Creates a LLVM DIFlags attribute.
MlirType mlirLLVMStructTypeIdentifiedGet(MlirContext ctx, MlirStringRef name)
Creates an LLVM identified struct type with no body.
MlirAttribute mlirLLVMDISubroutineTypeAttrGet(MlirContext ctx, unsigned int callingConvention, intptr_t nTypes, MlirAttribute const *types)
Creates a LLVM DISubroutineTypeAttr attribute.
MlirAttribute mlirLLVMDIDerivedTypeAttrGetBaseType(MlirAttribute diDerivedType)
Gets the base type from a LLVM DIDerivedType attribute.
bool mlirLLVMStructTypeIsOpaque(MlirType type)
Returns true is the struct is explicitly opaque (will not have a body) or uninitialized (will eventua...
bool mlirTypeIsALLVMPointerType(MlirType type)
Returns true if the type is an LLVM dialect pointer type.
unsigned int mlirLLVMDISubprogramAttrGetLine(MlirAttribute diSubprogram)
Gets the line from this DISubprogramAttr.
MlirAttribute mlirLLVMDILocalVariableAttrGet(MlirContext ctx, MlirAttribute scope, MlirAttribute name, MlirAttribute diFile, unsigned int line, unsigned int arg, unsigned int alignInBits, MlirAttribute diType, int64_t flags)
Creates a LLVM DILocalVariableAttr attribute.
MlirType mlirLLVMPointerTypeGet(MlirContext ctx, unsigned addressSpace)
Creates an llvm.ptr type.
unsigned int mlirLLVMDISubprogramAttrGetScopeLine(MlirAttribute diSubprogram)
Gets the scope line from this DISubprogram.
MlirAttribute mlirLLVMDIDerivedTypeAttrGet(MlirContext ctx, unsigned int tag, MlirAttribute name, MlirAttribute baseType, uint64_t sizeInBits, uint32_t alignInBits, uint64_t offsetInBits, int64_t dwarfAddressSpace, MlirAttribute extraData)
Creates a LLVM DIDerivedType attribute.
MlirType mlirLLVMStructTypeLiteralGet(MlirContext ctx, intptr_t nFieldTypes, MlirType const *fieldTypes, bool isPacked)
Creates an LLVM literal (unnamed) struct type.
#define MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(Name, Namespace, ClassName)
static Type getElementType(Type type, ArrayRef< int32_t > indices, function_ref< InFlightDiagnostic(StringRef)> emitErrorFn)
Walks the given type hierarchy with the given indices, potentially down to component granularity,...
static llvm::ArrayRef< CppTy > unwrapList(size_t size, CTy *first, llvm::SmallVectorImpl< CppTy > &storage)
Attributes are known-constant values of operations.
mlir::Diagnostic & unwrap(MlirDiagnostic diagnostic)
MlirDiagnostic wrap(mlir::Diagnostic &diagnostic)
The OpAsmOpInterface, see OpAsmInterface.td for more details.
Include the generated interface declarations.
Type getType(OpFoldResult ofr)
Returns the int type of the integer in ofr.
InFlightDiagnostic emitError(Location loc)
Utility method to emit an error message using this location.
auto get(MLIRContext *context, Ts &&...params)
Helper method that injects context only if needed, this helps unify some of the attribute constructio...
A logical result value, essentially a boolean with named states.
A pointer to a sized fragment of a string, not necessarily null-terminated.