Skip to content

Commit

Permalink
[MLIR] Add llvm (debug) attributes to CAPI (llvm#83992)
Browse files Browse the repository at this point in the history
This PR adds the following to the mlir c api:

- The disctinct mlir builtin attribute.
- LLVM attributes (mostly debug related ones)
  • Loading branch information
edg-l authored Mar 7, 2024
1 parent 96049fc commit 3714f93
Show file tree
Hide file tree
Showing 6 changed files with 562 additions and 1 deletion.
4 changes: 4 additions & 0 deletions mlir/include/mlir-c/BuiltinAttributes.h
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,10 @@ mlirSymbolRefAttrGetNestedReference(MlirAttribute attr, intptr_t pos);
/// Returns the typeID of an SymbolRef attribute.
MLIR_CAPI_EXPORTED MlirTypeID mlirSymbolRefAttrGetTypeID(void);

/// Creates a DisctinctAttr with the referenced attribute.
MLIR_CAPI_EXPORTED MlirAttribute
mlirDisctinctAttrCreate(MlirAttribute referencedAttr);

//===----------------------------------------------------------------------===//
// Flat SymbolRef attribute.
//===----------------------------------------------------------------------===//
Expand Down
231 changes: 231 additions & 0 deletions mlir/include/mlir-c/Dialect/LLVM.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#define MLIR_C_DIALECT_LLVM_H

#include "mlir-c/IR.h"
#include "mlir-c/Support.h"

#ifdef __cplusplus
extern "C" {
Expand Down Expand Up @@ -98,6 +99,236 @@ MLIR_CAPI_EXPORTED MlirLogicalResult
mlirLLVMStructTypeSetBody(MlirType structType, intptr_t nFieldTypes,
MlirType const *fieldTypes, bool isPacked);

enum MlirLLVMCConv {
MlirLLVMCConvC = 0,
MlirLLVMCConvFast = 8,
MlirLLVMCConvCold = 9,
MlirLLVMCConvGHC = 10,
MlirLLVMCConvHiPE = 11,
MlirLLVMCConvAnyReg = 13,
MlirLLVMCConvPreserveMost = 14,
MlirLLVMCConvPreserveAll = 15,
MlirLLVMCConvSwift = 16,
MlirLLVMCConvCXX_FAST_TLS = 17,
MlirLLVMCConvTail = 18,
MlirLLVMCConvCFGuard_Check = 19,
MlirLLVMCConvSwiftTail = 20,
MlirLLVMCConvX86_StdCall = 64,
MlirLLVMCConvX86_FastCall = 65,
MlirLLVMCConvARM_APCS = 66,
MlirLLVMCConvARM_AAPCS = 67,
MlirLLVMCConvARM_AAPCS_VFP = 68,
MlirLLVMCConvMSP430_INTR = 69,
MlirLLVMCConvX86_ThisCall = 70,
MlirLLVMCConvPTX_Kernel = 71,
MlirLLVMCConvPTX_Device = 72,
MlirLLVMCConvSPIR_FUNC = 75,
MlirLLVMCConvSPIR_KERNEL = 76,
MlirLLVMCConvIntel_OCL_BI = 77,
MlirLLVMCConvX86_64_SysV = 78,
MlirLLVMCConvWin64 = 79,
MlirLLVMCConvX86_VectorCall = 80,
MlirLLVMCConvDUMMY_HHVM = 81,
MlirLLVMCConvDUMMY_HHVM_C = 82,
MlirLLVMCConvX86_INTR = 83,
MlirLLVMCConvAVR_INTR = 84,
MlirLLVMCConvAVR_BUILTIN = 86,
MlirLLVMCConvAMDGPU_VS = 87,
MlirLLVMCConvAMDGPU_GS = 88,
MlirLLVMCConvAMDGPU_CS = 90,
MlirLLVMCConvAMDGPU_KERNEL = 91,
MlirLLVMCConvX86_RegCall = 92,
MlirLLVMCConvAMDGPU_HS = 93,
MlirLLVMCConvMSP430_BUILTIN = 94,
MlirLLVMCConvAMDGPU_LS = 95,
MlirLLVMCConvAMDGPU_ES = 96,
MlirLLVMCConvAArch64_VectorCall = 97,
MlirLLVMCConvAArch64_SVE_VectorCall = 98,
MlirLLVMCConvWASM_EmscriptenInvoke = 99,
MlirLLVMCConvAMDGPU_Gfx = 100,
MlirLLVMCConvM68k_INTR = 101,
};
typedef enum MlirLLVMCConv MlirLLVMCConv;

/// Creates a LLVM CConv attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMCConvAttrGet(MlirContext ctx,
MlirLLVMCConv cconv);

enum MlirLLVMComdat {
MlirLLVMComdatAny = 0,
MlirLLVMComdatExactMatch = 1,
MlirLLVMComdatLargest = 2,
MlirLLVMComdatNoDeduplicate = 3,
MlirLLVMComdatSameSize = 4,
};
typedef enum MlirLLVMComdat MlirLLVMComdat;

/// Creates a LLVM Comdat attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMComdatAttrGet(MlirContext ctx,
MlirLLVMComdat comdat);

enum MlirLLVMLinkage {
MlirLLVMLinkagePrivate = 0,
MlirLLVMLinkageInternal = 1,
MlirLLVMLinkageAvailableExternally = 2,
MlirLLVMLinkageLinkonce = 3,
MlirLLVMLinkageWeak = 4,
MlirLLVMLinkageCommon = 5,
MlirLLVMLinkageAppending = 6,
MlirLLVMLinkageExternWeak = 7,
MlirLLVMLinkageLinkonceODR = 8,
MlirLLVMLinkageWeakODR = 9,
MlirLLVMLinkageExternal = 10,
};
typedef enum MlirLLVMLinkage MlirLLVMLinkage;

/// Creates a LLVM Linkage attribute.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMLinkageAttrGet(MlirContext ctx, MlirLLVMLinkage linkage);

/// Creates a LLVM DINullType attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDINullTypeAttrGet(MlirContext ctx);

/// Creates a LLVM DIExpressionElem attribute.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMDIExpressionElemAttrGet(MlirContext ctx, unsigned int opcode,
intptr_t nArguments, uint64_t const *arguments);

/// Creates a LLVM DIExpression attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIExpressionAttrGet(
MlirContext ctx, intptr_t nOperations, MlirAttribute const *operations);

enum MlirLLVMTypeEncoding {
MlirLLVMTypeEncodingAddress = 0x1,
MlirLLVMTypeEncodingBoolean = 0x2,
MlirLLVMTypeEncodingComplexFloat = 0x31,
MlirLLVMTypeEncodingFloatT = 0x4,
MlirLLVMTypeEncodingSigned = 0x5,
MlirLLVMTypeEncodingSignedChar = 0x6,
MlirLLVMTypeEncodingUnsigned = 0x7,
MlirLLVMTypeEncodingUnsignedChar = 0x08,
MlirLLVMTypeEncodingImaginaryFloat = 0x09,
MlirLLVMTypeEncodingPackedDecimal = 0x0a,
MlirLLVMTypeEncodingNumericString = 0x0b,
MlirLLVMTypeEncodingEdited = 0x0c,
MlirLLVMTypeEncodingSignedFixed = 0x0d,
MlirLLVMTypeEncodingUnsignedFixed = 0x0e,
MlirLLVMTypeEncodingDecimalFloat = 0x0f,
MlirLLVMTypeEncodingUTF = 0x10,
MlirLLVMTypeEncodingUCS = 0x11,
MlirLLVMTypeEncodingASCII = 0x12,
MlirLLVMTypeEncodingLoUser = 0x80,
MlirLLVMTypeEncodingHiUser = 0xff,
};
typedef enum MlirLLVMTypeEncoding MlirLLVMTypeEncoding;

/// Creates a LLVM DIBasicType attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIBasicTypeAttrGet(
MlirContext ctx, unsigned int tag, MlirAttribute name, uint64_t sizeInBits,
MlirLLVMTypeEncoding encoding);

/// Creates a LLVM DICompositeType attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDICompositeTypeAttrGet(
MlirContext ctx, 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);

/// Creates a LLVM DIDerivedType attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIDerivedTypeAttrGet(
MlirContext ctx, unsigned int tag, MlirAttribute name,
MlirAttribute baseType, uint64_t sizeInBits, uint32_t alignInBits,
uint64_t offsetInBits);

/// Gets the base type from a LLVM DIDerivedType attribute.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMDIDerivedTypeAttrGetBaseType(MlirAttribute diDerivedType);

/// Creates a LLVM DIFileAttr attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIFileAttrGet(MlirContext ctx,
MlirAttribute name,
MlirAttribute directory);

enum MlirLLVMDIEmissionKind {
MlirLLVMDIEmissionKindNone = 0,
MlirLLVMDIEmissionKindFull = 1,
MlirLLVMDIEmissionKindLineTablesOnly = 2,
MlirLLVMDIEmissionKindDebugDirectivesOnly = 3,
};
typedef enum MlirLLVMDIEmissionKind MlirLLVMDIEmissionKind;

/// Creates a LLVM DICompileUnit attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDICompileUnitAttrGet(
MlirContext ctx, MlirAttribute id, unsigned int sourceLanguage,
MlirAttribute file, MlirAttribute producer, bool isOptimized,
MlirLLVMDIEmissionKind emissionKind);

/// Creates a LLVM DIFlags attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIFlagsAttrGet(MlirContext ctx,
uint64_t value);

/// Creates a LLVM DILexicalBlock attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDILexicalBlockAttrGet(
MlirContext ctx, MlirAttribute scope, MlirAttribute file, unsigned int line,
unsigned int column);

/// Creates a LLVM DILexicalBlockFile attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDILexicalBlockFileAttrGet(
MlirContext ctx, MlirAttribute scope, MlirAttribute file,
unsigned int discriminator);

/// Creates a LLVM DILocalVariableAttr attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDILocalVariableAttrGet(
MlirContext ctx, MlirAttribute scope, MlirAttribute name,
MlirAttribute diFile, unsigned int line, unsigned int arg,
unsigned int alignInBits, MlirAttribute diType);

/// Creates a LLVM DISubprogramAttr attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDISubprogramAttrGet(
MlirContext ctx, MlirAttribute id, MlirAttribute compileUnit,
MlirAttribute scope, MlirAttribute name, MlirAttribute linkageName,
MlirAttribute file, unsigned int line, unsigned int scopeLine,
uint64_t subprogramFlags, MlirAttribute type);

/// Gets the scope from this DISubprogramAttr.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMDISubprogramAttrGetScope(MlirAttribute diSubprogram);

/// Gets the line from this DISubprogramAttr.
MLIR_CAPI_EXPORTED unsigned int
mlirLLVMDISubprogramAttrGetLine(MlirAttribute diSubprogram);

/// Gets the scope line from this DISubprogram.
MLIR_CAPI_EXPORTED unsigned int
mlirLLVMDISubprogramAttrGetScopeLine(MlirAttribute diSubprogram);

/// Gets the compile unit from this DISubprogram.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMDISubprogramAttrGetCompileUnit(MlirAttribute diSubprogram);

/// Gets the file from this DISubprogramAttr.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMDISubprogramAttrGetFile(MlirAttribute diSubprogram);

/// Gets the type from this DISubprogramAttr.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMDISubprogramAttrGetType(MlirAttribute diSubprogram);

/// Creates a LLVM DISubroutineTypeAttr attribute.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMDISubroutineTypeAttrGet(MlirContext ctx, unsigned int callingConvention,
intptr_t nTypes, MlirAttribute const *types);

/// Creates a LLVM DIModuleAttr attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIModuleAttrGet(
MlirContext ctx, MlirAttribute file, MlirAttribute scope,
MlirAttribute name, MlirAttribute configMacros, MlirAttribute includePath,
MlirAttribute apinotes, unsigned int line, bool isDecl);

/// Gets the scope of this DIModuleAttr.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMDIModuleAttrGetScope(MlirAttribute diModule);

#ifdef __cplusplus
}
#endif
Expand Down
Loading

0 comments on commit 3714f93

Please sign in to comment.