| 1 | //===-- mlir-c/Dialect/LLVM.h - C API for LLVM --------------------*- C -*-===// |
| 2 | // |
| 3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM |
| 4 | // Exceptions. |
| 5 | // See https://llvm.org/LICENSE.txt for license information. |
| 6 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | |
| 10 | #ifndef MLIR_C_DIALECT_LLVM_H |
| 11 | #define MLIR_C_DIALECT_LLVM_H |
| 12 | |
| 13 | #include "mlir-c/IR.h" |
| 14 | #include "mlir-c/Support.h" |
| 15 | |
| 16 | #ifdef __cplusplus |
| 17 | extern "C" { |
| 18 | #endif |
| 19 | |
| 20 | MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(LLVM, llvm); |
| 21 | |
| 22 | /// Creates an llvm.ptr type. |
| 23 | MLIR_CAPI_EXPORTED MlirType mlirLLVMPointerTypeGet(MlirContext ctx, |
| 24 | unsigned addressSpace); |
| 25 | |
| 26 | /// Returns `true` if the type is an LLVM dialect pointer type. |
| 27 | MLIR_CAPI_EXPORTED bool mlirTypeIsALLVMPointerType(MlirType type); |
| 28 | |
| 29 | /// Returns address space of llvm.ptr |
| 30 | MLIR_CAPI_EXPORTED unsigned |
| 31 | mlirLLVMPointerTypeGetAddressSpace(MlirType pointerType); |
| 32 | |
| 33 | /// Creates an llmv.void type. |
| 34 | MLIR_CAPI_EXPORTED MlirType mlirLLVMVoidTypeGet(MlirContext ctx); |
| 35 | |
| 36 | /// Creates an llvm.array type. |
| 37 | MLIR_CAPI_EXPORTED MlirType mlirLLVMArrayTypeGet(MlirType elementType, |
| 38 | unsigned numElements); |
| 39 | |
| 40 | /// Returns the element type of the llvm.array type. |
| 41 | MLIR_CAPI_EXPORTED MlirType mlirLLVMArrayTypeGetElementType(MlirType type); |
| 42 | |
| 43 | /// Creates an llvm.func type. |
| 44 | MLIR_CAPI_EXPORTED MlirType |
| 45 | mlirLLVMFunctionTypeGet(MlirType resultType, intptr_t nArgumentTypes, |
| 46 | MlirType const *argumentTypes, bool isVarArg); |
| 47 | |
| 48 | /// Returns the number of input types. |
| 49 | MLIR_CAPI_EXPORTED intptr_t mlirLLVMFunctionTypeGetNumInputs(MlirType type); |
| 50 | |
| 51 | /// Returns the pos-th input type. |
| 52 | MLIR_CAPI_EXPORTED MlirType mlirLLVMFunctionTypeGetInput(MlirType type, |
| 53 | intptr_t pos); |
| 54 | |
| 55 | /// Returns the return type of the function type. |
| 56 | MLIR_CAPI_EXPORTED MlirType mlirLLVMFunctionTypeGetReturnType(MlirType type); |
| 57 | |
| 58 | /// Returns `true` if the type is an LLVM dialect struct type. |
| 59 | MLIR_CAPI_EXPORTED bool mlirTypeIsALLVMStructType(MlirType type); |
| 60 | |
| 61 | /// Returns `true` if the type is a literal (unnamed) LLVM struct type. |
| 62 | MLIR_CAPI_EXPORTED bool mlirLLVMStructTypeIsLiteral(MlirType type); |
| 63 | |
| 64 | /// Returns the number of fields in the struct. Asserts if the struct is opaque |
| 65 | /// or not yet initialized. |
| 66 | MLIR_CAPI_EXPORTED intptr_t mlirLLVMStructTypeGetNumElementTypes(MlirType type); |
| 67 | |
| 68 | /// Returns the `positions`-th field of the struct. Asserts if the struct is |
| 69 | /// opaque, not yet initialized or if the position is out of range. |
| 70 | MLIR_CAPI_EXPORTED MlirType mlirLLVMStructTypeGetElementType(MlirType type, |
| 71 | intptr_t position); |
| 72 | |
| 73 | /// Returns `true` if the struct is packed. |
| 74 | MLIR_CAPI_EXPORTED bool mlirLLVMStructTypeIsPacked(MlirType type); |
| 75 | |
| 76 | /// Returns the identifier of the identified struct. Asserts that the struct is |
| 77 | /// identified, i.e., not literal. |
| 78 | MLIR_CAPI_EXPORTED MlirStringRef mlirLLVMStructTypeGetIdentifier(MlirType type); |
| 79 | |
| 80 | /// Returns `true` is the struct is explicitly opaque (will not have a body) or |
| 81 | /// uninitialized (will eventually have a body). |
| 82 | MLIR_CAPI_EXPORTED bool mlirLLVMStructTypeIsOpaque(MlirType type); |
| 83 | |
| 84 | /// Creates an LLVM literal (unnamed) struct type. This may assert if the fields |
| 85 | /// have types not compatible with the LLVM dialect. For a graceful failure, use |
| 86 | /// the checked version. |
| 87 | MLIR_CAPI_EXPORTED MlirType |
| 88 | mlirLLVMStructTypeLiteralGet(MlirContext ctx, intptr_t nFieldTypes, |
| 89 | MlirType const *fieldTypes, bool isPacked); |
| 90 | |
| 91 | /// Creates an LLVM literal (unnamed) struct type if possible. Emits a |
| 92 | /// diagnostic at the given location and returns null otherwise. |
| 93 | MLIR_CAPI_EXPORTED MlirType |
| 94 | mlirLLVMStructTypeLiteralGetChecked(MlirLocation loc, intptr_t nFieldTypes, |
| 95 | MlirType const *fieldTypes, bool isPacked); |
| 96 | |
| 97 | /// Creates an LLVM identified struct type with no body. If a struct type with |
| 98 | /// this name already exists in the context, returns that type. Use |
| 99 | /// mlirLLVMStructTypeIdentifiedNewGet to create a fresh struct type, |
| 100 | /// potentially renaming it. The body should be set separatelty by calling |
| 101 | /// mlirLLVMStructTypeSetBody, if it isn't set already. |
| 102 | MLIR_CAPI_EXPORTED MlirType mlirLLVMStructTypeIdentifiedGet(MlirContext ctx, |
| 103 | MlirStringRef name); |
| 104 | |
| 105 | /// Creates an LLVM identified struct type with no body and a name starting with |
| 106 | /// the given prefix. If a struct with the exact name as the given prefix |
| 107 | /// already exists, appends an unspecified suffix to the name so that the name |
| 108 | /// is unique in context. |
| 109 | MLIR_CAPI_EXPORTED MlirType mlirLLVMStructTypeIdentifiedNewGet( |
| 110 | MlirContext ctx, MlirStringRef name, intptr_t nFieldTypes, |
| 111 | MlirType const *fieldTypes, bool isPacked); |
| 112 | |
| 113 | MLIR_CAPI_EXPORTED MlirType mlirLLVMStructTypeOpaqueGet(MlirContext ctx, |
| 114 | MlirStringRef name); |
| 115 | |
| 116 | /// Sets the body of the identified struct if it hasn't been set yet. Returns |
| 117 | /// whether the operation was successful. |
| 118 | MLIR_CAPI_EXPORTED MlirLogicalResult |
| 119 | mlirLLVMStructTypeSetBody(MlirType structType, intptr_t nFieldTypes, |
| 120 | MlirType const *fieldTypes, bool isPacked); |
| 121 | |
| 122 | enum MlirLLVMCConv { |
| 123 | MlirLLVMCConvC = 0, |
| 124 | MlirLLVMCConvFast = 8, |
| 125 | MlirLLVMCConvCold = 9, |
| 126 | MlirLLVMCConvGHC = 10, |
| 127 | MlirLLVMCConvHiPE = 11, |
| 128 | MlirLLVMCConvAnyReg = 13, |
| 129 | MlirLLVMCConvPreserveMost = 14, |
| 130 | MlirLLVMCConvPreserveAll = 15, |
| 131 | MlirLLVMCConvSwift = 16, |
| 132 | MlirLLVMCConvCXX_FAST_TLS = 17, |
| 133 | MlirLLVMCConvTail = 18, |
| 134 | MlirLLVMCConvCFGuard_Check = 19, |
| 135 | MlirLLVMCConvSwiftTail = 20, |
| 136 | MlirLLVMCConvX86_StdCall = 64, |
| 137 | MlirLLVMCConvX86_FastCall = 65, |
| 138 | MlirLLVMCConvARM_APCS = 66, |
| 139 | MlirLLVMCConvARM_AAPCS = 67, |
| 140 | MlirLLVMCConvARM_AAPCS_VFP = 68, |
| 141 | MlirLLVMCConvMSP430_INTR = 69, |
| 142 | MlirLLVMCConvX86_ThisCall = 70, |
| 143 | MlirLLVMCConvPTX_Kernel = 71, |
| 144 | MlirLLVMCConvPTX_Device = 72, |
| 145 | MlirLLVMCConvSPIR_FUNC = 75, |
| 146 | MlirLLVMCConvSPIR_KERNEL = 76, |
| 147 | MlirLLVMCConvIntel_OCL_BI = 77, |
| 148 | MlirLLVMCConvX86_64_SysV = 78, |
| 149 | MlirLLVMCConvWin64 = 79, |
| 150 | MlirLLVMCConvX86_VectorCall = 80, |
| 151 | MlirLLVMCConvDUMMY_HHVM = 81, |
| 152 | MlirLLVMCConvDUMMY_HHVM_C = 82, |
| 153 | MlirLLVMCConvX86_INTR = 83, |
| 154 | MlirLLVMCConvAVR_INTR = 84, |
| 155 | MlirLLVMCConvAVR_BUILTIN = 86, |
| 156 | MlirLLVMCConvAMDGPU_VS = 87, |
| 157 | MlirLLVMCConvAMDGPU_GS = 88, |
| 158 | MlirLLVMCConvAMDGPU_CS = 90, |
| 159 | MlirLLVMCConvAMDGPU_KERNEL = 91, |
| 160 | MlirLLVMCConvX86_RegCall = 92, |
| 161 | MlirLLVMCConvAMDGPU_HS = 93, |
| 162 | MlirLLVMCConvMSP430_BUILTIN = 94, |
| 163 | MlirLLVMCConvAMDGPU_LS = 95, |
| 164 | MlirLLVMCConvAMDGPU_ES = 96, |
| 165 | MlirLLVMCConvAArch64_VectorCall = 97, |
| 166 | MlirLLVMCConvAArch64_SVE_VectorCall = 98, |
| 167 | MlirLLVMCConvWASM_EmscriptenInvoke = 99, |
| 168 | MlirLLVMCConvAMDGPU_Gfx = 100, |
| 169 | MlirLLVMCConvM68k_INTR = 101, |
| 170 | }; |
| 171 | typedef enum MlirLLVMCConv MlirLLVMCConv; |
| 172 | |
| 173 | /// Creates a LLVM CConv attribute. |
| 174 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMCConvAttrGet(MlirContext ctx, |
| 175 | MlirLLVMCConv cconv); |
| 176 | |
| 177 | enum MlirLLVMComdat { |
| 178 | MlirLLVMComdatAny = 0, |
| 179 | MlirLLVMComdatExactMatch = 1, |
| 180 | MlirLLVMComdatLargest = 2, |
| 181 | MlirLLVMComdatNoDeduplicate = 3, |
| 182 | MlirLLVMComdatSameSize = 4, |
| 183 | }; |
| 184 | typedef enum MlirLLVMComdat MlirLLVMComdat; |
| 185 | |
| 186 | /// Creates a LLVM Comdat attribute. |
| 187 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMComdatAttrGet(MlirContext ctx, |
| 188 | MlirLLVMComdat comdat); |
| 189 | |
| 190 | enum MlirLLVMLinkage { |
| 191 | MlirLLVMLinkageExternal = 0, |
| 192 | MlirLLVMLinkageAvailableExternally = 1, |
| 193 | MlirLLVMLinkageLinkonce = 2, |
| 194 | MlirLLVMLinkageLinkonceODR = 3, |
| 195 | MlirLLVMLinkageWeak = 4, |
| 196 | MlirLLVMLinkageWeakODR = 5, |
| 197 | MlirLLVMLinkageAppending = 6, |
| 198 | MlirLLVMLinkageInternal = 7, |
| 199 | MlirLLVMLinkagePrivate = 8, |
| 200 | MlirLLVMLinkageExternWeak = 9, |
| 201 | MlirLLVMLinkageCommon = 10, |
| 202 | }; |
| 203 | typedef enum MlirLLVMLinkage MlirLLVMLinkage; |
| 204 | |
| 205 | /// Creates a LLVM Linkage attribute. |
| 206 | MLIR_CAPI_EXPORTED MlirAttribute |
| 207 | mlirLLVMLinkageAttrGet(MlirContext ctx, MlirLLVMLinkage linkage); |
| 208 | |
| 209 | /// Creates a LLVM DINullType attribute. |
| 210 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDINullTypeAttrGet(MlirContext ctx); |
| 211 | |
| 212 | /// Creates a LLVM DIExpressionElem attribute. |
| 213 | MLIR_CAPI_EXPORTED MlirAttribute |
| 214 | mlirLLVMDIExpressionElemAttrGet(MlirContext ctx, unsigned int opcode, |
| 215 | intptr_t nArguments, uint64_t const *arguments); |
| 216 | |
| 217 | /// Creates a LLVM DIExpression attribute. |
| 218 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIExpressionAttrGet( |
| 219 | MlirContext ctx, intptr_t nOperations, MlirAttribute const *operations); |
| 220 | |
| 221 | enum MlirLLVMTypeEncoding { |
| 222 | MlirLLVMTypeEncodingAddress = 0x1, |
| 223 | MlirLLVMTypeEncodingBoolean = 0x2, |
| 224 | MlirLLVMTypeEncodingComplexFloat = 0x31, |
| 225 | MlirLLVMTypeEncodingFloatT = 0x4, |
| 226 | MlirLLVMTypeEncodingSigned = 0x5, |
| 227 | MlirLLVMTypeEncodingSignedChar = 0x6, |
| 228 | MlirLLVMTypeEncodingUnsigned = 0x7, |
| 229 | MlirLLVMTypeEncodingUnsignedChar = 0x08, |
| 230 | MlirLLVMTypeEncodingImaginaryFloat = 0x09, |
| 231 | MlirLLVMTypeEncodingPackedDecimal = 0x0a, |
| 232 | MlirLLVMTypeEncodingNumericString = 0x0b, |
| 233 | MlirLLVMTypeEncodingEdited = 0x0c, |
| 234 | MlirLLVMTypeEncodingSignedFixed = 0x0d, |
| 235 | MlirLLVMTypeEncodingUnsignedFixed = 0x0e, |
| 236 | MlirLLVMTypeEncodingDecimalFloat = 0x0f, |
| 237 | MlirLLVMTypeEncodingUTF = 0x10, |
| 238 | MlirLLVMTypeEncodingUCS = 0x11, |
| 239 | MlirLLVMTypeEncodingASCII = 0x12, |
| 240 | MlirLLVMTypeEncodingLoUser = 0x80, |
| 241 | MlirLLVMTypeEncodingHiUser = 0xff, |
| 242 | }; |
| 243 | typedef enum MlirLLVMTypeEncoding MlirLLVMTypeEncoding; |
| 244 | |
| 245 | /// Creates a LLVM DIBasicType attribute. |
| 246 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIBasicTypeAttrGet( |
| 247 | MlirContext ctx, unsigned int tag, MlirAttribute name, uint64_t sizeInBits, |
| 248 | MlirLLVMTypeEncoding encoding); |
| 249 | |
| 250 | /// Creates a self-referencing LLVM DICompositeType attribute. |
| 251 | MLIR_CAPI_EXPORTED MlirAttribute |
| 252 | mlirLLVMDICompositeTypeAttrGetRecSelf(MlirAttribute recId); |
| 253 | |
| 254 | /// Creates a LLVM DICompositeType attribute. |
| 255 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDICompositeTypeAttrGet( |
| 256 | MlirContext ctx, MlirAttribute recId, bool isRecSelf, unsigned int tag, |
| 257 | MlirAttribute name, MlirAttribute file, uint32_t line, MlirAttribute scope, |
| 258 | MlirAttribute baseType, int64_t flags, uint64_t sizeInBits, |
| 259 | uint64_t alignInBits, intptr_t nElements, MlirAttribute const *elements, |
| 260 | MlirAttribute dataLocation, MlirAttribute rank, MlirAttribute allocated, |
| 261 | MlirAttribute associated); |
| 262 | |
| 263 | /// Creates a LLVM DIDerivedType attribute. Note that `dwarfAddressSpace` is an |
| 264 | /// optional field, where `MLIR_CAPI_DWARF_ADDRESS_SPACE_NULL` indicates null |
| 265 | /// and non-negative values indicate a value present. |
| 266 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIDerivedTypeAttrGet( |
| 267 | MlirContext ctx, unsigned int tag, MlirAttribute name, |
| 268 | MlirAttribute baseType, uint64_t sizeInBits, uint32_t alignInBits, |
| 269 | uint64_t offsetInBits, int64_t dwarfAddressSpace, MlirAttribute ); |
| 270 | |
| 271 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIStringTypeAttrGet( |
| 272 | MlirContext ctx, unsigned int tag, MlirAttribute name, uint64_t sizeInBits, |
| 273 | uint32_t alignInBits, MlirAttribute stringLength, |
| 274 | MlirAttribute stringLengthExp, MlirAttribute stringLocationExp, |
| 275 | MlirLLVMTypeEncoding encoding); |
| 276 | |
| 277 | /// Constant to represent std::nullopt for dwarfAddressSpace to omit the field. |
| 278 | #define MLIR_CAPI_DWARF_ADDRESS_SPACE_NULL -1 |
| 279 | |
| 280 | /// Gets the base type from a LLVM DIDerivedType attribute. |
| 281 | MLIR_CAPI_EXPORTED MlirAttribute |
| 282 | mlirLLVMDIDerivedTypeAttrGetBaseType(MlirAttribute diDerivedType); |
| 283 | |
| 284 | /// Creates a LLVM DIFileAttr attribute. |
| 285 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIFileAttrGet(MlirContext ctx, |
| 286 | MlirAttribute name, |
| 287 | MlirAttribute directory); |
| 288 | |
| 289 | enum MlirLLVMDIEmissionKind { |
| 290 | MlirLLVMDIEmissionKindNone = 0, |
| 291 | MlirLLVMDIEmissionKindFull = 1, |
| 292 | MlirLLVMDIEmissionKindLineTablesOnly = 2, |
| 293 | MlirLLVMDIEmissionKindDebugDirectivesOnly = 3, |
| 294 | }; |
| 295 | typedef enum MlirLLVMDIEmissionKind MlirLLVMDIEmissionKind; |
| 296 | |
| 297 | enum MlirLLVMDINameTableKind { |
| 298 | MlirLLVMDINameTableKindDefault = 0, |
| 299 | MlirLLVMDINameTableKindGNU = 1, |
| 300 | MlirLLVMDINameTableKindNone = 2, |
| 301 | MlirLLVMDINameTableKindApple = 3, |
| 302 | }; |
| 303 | typedef enum MlirLLVMDINameTableKind MlirLLVMDINameTableKind; |
| 304 | |
| 305 | /// Creates a LLVM DICompileUnit attribute. |
| 306 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDICompileUnitAttrGet( |
| 307 | MlirContext ctx, MlirAttribute id, unsigned int sourceLanguage, |
| 308 | MlirAttribute file, MlirAttribute producer, bool isOptimized, |
| 309 | MlirLLVMDIEmissionKind emissionKind, MlirLLVMDINameTableKind nameTableKind); |
| 310 | |
| 311 | /// Creates a LLVM DIFlags attribute. |
| 312 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIFlagsAttrGet(MlirContext ctx, |
| 313 | uint64_t value); |
| 314 | |
| 315 | /// Creates a LLVM DILexicalBlock attribute. |
| 316 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDILexicalBlockAttrGet( |
| 317 | MlirContext ctx, MlirAttribute scope, MlirAttribute file, unsigned int line, |
| 318 | unsigned int column); |
| 319 | |
| 320 | /// Creates a LLVM DILexicalBlockFile attribute. |
| 321 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDILexicalBlockFileAttrGet( |
| 322 | MlirContext ctx, MlirAttribute scope, MlirAttribute file, |
| 323 | unsigned int discriminator); |
| 324 | |
| 325 | /// Creates a LLVM DILocalVariableAttr attribute. |
| 326 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDILocalVariableAttrGet( |
| 327 | MlirContext ctx, MlirAttribute scope, MlirAttribute name, |
| 328 | MlirAttribute diFile, unsigned int line, unsigned int arg, |
| 329 | unsigned int alignInBits, MlirAttribute diType, int64_t flags); |
| 330 | |
| 331 | /// Creates a self-referencing LLVM DISubprogramAttr attribute. |
| 332 | MLIR_CAPI_EXPORTED MlirAttribute |
| 333 | mlirLLVMDISubprogramAttrGetRecSelf(MlirAttribute recId); |
| 334 | |
| 335 | /// Creates a LLVM DISubprogramAttr attribute. |
| 336 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDISubprogramAttrGet( |
| 337 | MlirContext ctx, MlirAttribute recId, bool isRecSelf, MlirAttribute id, |
| 338 | MlirAttribute compileUnit, MlirAttribute scope, MlirAttribute name, |
| 339 | MlirAttribute linkageName, MlirAttribute file, unsigned int line, |
| 340 | unsigned int scopeLine, uint64_t subprogramFlags, MlirAttribute type, |
| 341 | intptr_t nRetainedNodes, MlirAttribute const *retainedNodes, |
| 342 | intptr_t nAnnotations, MlirAttribute const *annotations); |
| 343 | |
| 344 | /// Creates a LLVM DIAnnotation attribute. |
| 345 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIAnnotationAttrGet( |
| 346 | MlirContext ctx, MlirAttribute name, MlirAttribute value); |
| 347 | |
| 348 | /// Gets the scope from this DISubprogramAttr. |
| 349 | MLIR_CAPI_EXPORTED MlirAttribute |
| 350 | mlirLLVMDISubprogramAttrGetScope(MlirAttribute diSubprogram); |
| 351 | |
| 352 | /// Gets the line from this DISubprogramAttr. |
| 353 | MLIR_CAPI_EXPORTED unsigned int |
| 354 | mlirLLVMDISubprogramAttrGetLine(MlirAttribute diSubprogram); |
| 355 | |
| 356 | /// Gets the scope line from this DISubprogram. |
| 357 | MLIR_CAPI_EXPORTED unsigned int |
| 358 | mlirLLVMDISubprogramAttrGetScopeLine(MlirAttribute diSubprogram); |
| 359 | |
| 360 | /// Gets the compile unit from this DISubprogram. |
| 361 | MLIR_CAPI_EXPORTED MlirAttribute |
| 362 | mlirLLVMDISubprogramAttrGetCompileUnit(MlirAttribute diSubprogram); |
| 363 | |
| 364 | /// Gets the file from this DISubprogramAttr. |
| 365 | MLIR_CAPI_EXPORTED MlirAttribute |
| 366 | mlirLLVMDISubprogramAttrGetFile(MlirAttribute diSubprogram); |
| 367 | |
| 368 | /// Gets the type from this DISubprogramAttr. |
| 369 | MLIR_CAPI_EXPORTED MlirAttribute |
| 370 | mlirLLVMDISubprogramAttrGetType(MlirAttribute diSubprogram); |
| 371 | |
| 372 | /// Creates a LLVM DISubroutineTypeAttr attribute. |
| 373 | MLIR_CAPI_EXPORTED MlirAttribute |
| 374 | mlirLLVMDISubroutineTypeAttrGet(MlirContext ctx, unsigned int callingConvention, |
| 375 | intptr_t nTypes, MlirAttribute const *types); |
| 376 | |
| 377 | /// Creates a LLVM DIModuleAttr attribute. |
| 378 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIModuleAttrGet( |
| 379 | MlirContext ctx, MlirAttribute file, MlirAttribute scope, |
| 380 | MlirAttribute name, MlirAttribute configMacros, MlirAttribute includePath, |
| 381 | MlirAttribute apinotes, unsigned int line, bool isDecl); |
| 382 | |
| 383 | /// Creates a LLVM DIImportedEntityAttr attribute. |
| 384 | MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIImportedEntityAttrGet( |
| 385 | MlirContext ctx, unsigned int tag, MlirAttribute scope, |
| 386 | MlirAttribute entity, MlirAttribute file, unsigned int line, |
| 387 | MlirAttribute name, intptr_t nElements, MlirAttribute const *elements); |
| 388 | |
| 389 | /// Gets the scope of this DIModuleAttr. |
| 390 | MLIR_CAPI_EXPORTED MlirAttribute |
| 391 | mlirLLVMDIModuleAttrGetScope(MlirAttribute diModule); |
| 392 | |
| 393 | #ifdef __cplusplus |
| 394 | } |
| 395 | #endif |
| 396 | |
| 397 | #endif // MLIR_C_DIALECT_LLVM_H |
| 398 | |