Skip to content

[mlir-c] expand the mlir llvm dialect C api with more attributes/enums #84453

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
178 changes: 84 additions & 94 deletions mlir/include/mlir-c/Dialect/LLVM.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

#include "mlir-c/IR.h"
#include "mlir-c/Support.h"
#include "mlir/Dialect/LLVMIR/LLVMOpsEnums.capi.h.inc"

#ifdef __cplusplus
extern "C" {
Expand Down Expand Up @@ -106,89 +107,14 @@ 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);
Expand Down Expand Up @@ -258,7 +184,7 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIStringTypeAttrGet(
MlirLLVMTypeEncoding encoding);

/// Constant to represent std::nullopt for dwarfAddressSpace to omit the field.
#define MLIR_CAPI_DWARF_ADDRESS_SPACE_NULL -1
#define MLIR_CAPI_DWARF_ADDRESS_SPACE_NULL (-1)

/// Gets the base type from a LLVM DIDerivedType attribute.
MLIR_CAPI_EXPORTED MlirAttribute
Expand All @@ -269,22 +195,6 @@ 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;

enum MlirLLVMDINameTableKind {
MlirLLVMDINameTableKindDefault = 0,
MlirLLVMDINameTableKindGNU = 1,
MlirLLVMDINameTableKindNone = 2,
MlirLLVMDINameTableKindApple = 3,
};
typedef enum MlirLLVMDINameTableKind MlirLLVMDINameTableKind;

/// Creates a LLVM DICompileUnit attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDICompileUnitAttrGet(
MlirContext ctx, MlirAttribute id, unsigned int sourceLanguage,
Expand All @@ -293,7 +203,7 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDICompileUnitAttrGet(

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

/// Creates a LLVM DILexicalBlock attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDILexicalBlockAttrGet(
Expand All @@ -311,12 +221,18 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDILocalVariableAttrGet(
MlirAttribute diFile, unsigned int line, unsigned int arg,
unsigned int alignInBits, MlirAttribute diType, int64_t flags);

/// Creates a LLVM DINamespaceAttr attribute.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDINamespaceAttrGet(MlirContext ctx,
MlirAttribute name,
MlirAttribute scope,
bool exportSymbols);

/// 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);
MlirLLVMDISubprogramFlags subprogramFlags, MlirAttribute type);

/// Gets the scope from this DISubprogramAttr.
MLIR_CAPI_EXPORTED MlirAttribute
Expand All @@ -330,6 +246,18 @@ mlirLLVMDISubprogramAttrGetLine(MlirAttribute diSubprogram);
MLIR_CAPI_EXPORTED unsigned int
mlirLLVMDISubprogramAttrGetScopeLine(MlirAttribute diSubprogram);

/// Gets the linkage name from this DISubprogramAttr.
MLIR_CAPI_EXPORTED MlirIdentifier
mlirLLVMDISubprogramAttrGetLinkageName(MlirAttribute diSubprogram);

/// Gets the name from this DISubprogramAttr.
MLIR_CAPI_EXPORTED MlirIdentifier
mlirLLVMDISubprogramAttrGetName(MlirAttribute diSubprogram);

/// Gets the subprogram flags from this DISubprogramAttr.
MLIR_CAPI_EXPORTED MlirLLVMDISubprogramFlags
mlirLLVMDISubprogramAttrGetSubprogramFlags(MlirAttribute diSubprogram);

/// Gets the compile unit from this DISubprogram.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMDISubprogramAttrGetCompileUnit(MlirAttribute diSubprogram);
Expand Down Expand Up @@ -357,6 +285,68 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIModuleAttrGet(
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMDIModuleAttrGetScope(MlirAttribute diModule);

/// Gets the api notes of this DIModuleAttr.
MLIR_CAPI_EXPORTED MlirIdentifier
mlirLLVMDIModuleAttrGetApinotes(MlirAttribute diModule);

/// Gets the config macros of this DIModuleAttr.
MLIR_CAPI_EXPORTED MlirIdentifier
mlirLLVMDIModuleAttrGetConfigMacros(MlirAttribute diModule);

/// Gets the file of this DIModuleAttr.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMDIModuleAttrGetFile(MlirAttribute diModule);

/// Gets the include path of this DIModuleAttr.
MLIR_CAPI_EXPORTED MlirIdentifier
mlirLLVMDIModuleAttrGetIncludePath(MlirAttribute diModule);

/// Gets whether this DIModuleAttr is a declaration.
MLIR_CAPI_EXPORTED bool mlirLLVMDIModuleAttrGetIsDecl(MlirAttribute diModule);

/// Creates a LLVM DISubrange attribute.
///
/// All parameters have the type IntegerAttr.
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDISubrangeAttrGet(
MlirContext ctx, MlirAttribute count, MlirAttribute lowerBound,
MlirAttribute upperBound, MlirAttribute stride);

/// Creates a LLVM AtomicOrderingAttr.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMAtomicOrderingAttrGet(MlirContext ctx, MlirLLVMAtomicOrdering ordering);

/// Creates a LLVM AtomicBinOpAttr.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMAtomicBinOpAttrGet(MlirContext ctx, MlirLLVMAtomicBinOp val);

/// Creates a LLVM VisibilityAttr.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMVisibilityAttrGet(MlirContext ctx, MlirLLVMVisibility visibility);

/// Creates a LLVM UnnamedAddrAttr.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMUnnamedAddrAttrGet(MlirContext ctx, MlirLLVMUnnamedAddr val);

/// Creates a LLVM ICmpPredicateAttr.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMICmpPredicateAttrGet(MlirContext ctx, MlirLLVMICmpPredicate val);

/// Creates a LLVM FCmpPredicateAttr.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMFCmpPredicateAttrGet(MlirContext ctx, MlirLLVMFCmpPredicate val);

/// Creates a LLVM FramePointerKindAttr.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMFramePointerKindAttrGet(MlirContext ctx, MlirLLVMFramePointerKind val);

/// Creates a LLVM FastmathFlagsAttr.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMFastmathFlagsAttrGet(MlirContext ctx, MlirLLVMFastmathFlags val);

/// Creates a LLVM ModRefInfoAttr.
MLIR_CAPI_EXPORTED MlirAttribute
mlirLLVMModRefInfoAttrGet(MlirContext ctx, MlirLLVMModRefInfo val);

#ifdef __cplusplus
}
#endif
Expand Down
1 change: 1 addition & 0 deletions mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ mlir_tablegen(LLVMOps.cpp.inc -gen-op-defs)
mlir_tablegen(LLVMOpsDialect.h.inc -gen-dialect-decls)
mlir_tablegen(LLVMOpsDialect.cpp.inc -gen-dialect-defs)
mlir_tablegen(LLVMOpsEnums.h.inc -gen-enum-decls)
mlir_tablegen(LLVMOpsEnums.capi.h.inc -gen-enum-capi-decls)
mlir_tablegen(LLVMOpsEnums.cpp.inc -gen-enum-defs)
mlir_tablegen(LLVMOpsAttrDefs.h.inc -gen-attrdef-decls
-attrdefs-dialect=llvm)
Expand Down
103 changes: 101 additions & 2 deletions mlir/lib/CAPI/Dialect/LLVM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ mlirLLVMDICompileUnitAttrGet(MlirContext ctx, MlirAttribute id,
DINameTableKind(nameTableKind)));
}

MlirAttribute mlirLLVMDIFlagsAttrGet(MlirContext ctx, uint64_t value) {
MlirAttribute mlirLLVMDIFlagsAttrGet(MlirContext ctx, MlirLLVMDIFlags value) {
return wrap(DIFlagsAttr::get(unwrap(ctx), DIFlags(value)));
}

Expand Down Expand Up @@ -289,11 +289,19 @@ MlirAttribute mlirLLVMDISubroutineTypeAttrGet(MlirContext ctx,
[](Attribute a) { return cast<DITypeAttr>(a); })));
}

MlirAttribute mlirLLVMDINamespaceAttrGet(MlirContext ctx, MlirAttribute name,
MlirAttribute scope,
bool exportSymbols) {
return wrap(DINamespaceAttr::get(unwrap(ctx), cast<StringAttr>(unwrap(name)),
cast<DIScopeAttr>(unwrap(scope)),
exportSymbols));
}

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) {
MlirLLVMDISubprogramFlags subprogramFlags, MlirAttribute type) {
return wrap(DISubprogramAttr::get(
unwrap(ctx), cast<DistinctAttr>(unwrap(id)),
cast<DICompileUnitAttr>(unwrap(compileUnit)),
Expand All @@ -315,6 +323,21 @@ unsigned int mlirLLVMDISubprogramAttrGetScopeLine(MlirAttribute diSubprogram) {
return cast<DISubprogramAttr>(unwrap(diSubprogram)).getScopeLine();
}

MlirIdentifier
mlirLLVMDISubprogramAttrGetLinkageName(MlirAttribute diSubprogram) {
return wrap(cast<DISubprogramAttr>(unwrap(diSubprogram)).getLinkageName());
}

MlirIdentifier mlirLLVMDISubprogramAttrGetName(MlirAttribute diSubprogram) {
return wrap(cast<DISubprogramAttr>(unwrap(diSubprogram)).getName());
}

MlirLLVMDISubprogramFlags
mlirLLVMDISubprogramAttrGetSubprogramFlags(MlirAttribute diSubprogram) {
return static_cast<MlirLLVMDISubprogramFlags>(
cast<DISubprogramAttr>(unwrap(diSubprogram)).getSubprogramFlags());
}

MlirAttribute
mlirLLVMDISubprogramAttrGetCompileUnit(MlirAttribute diSubprogram) {
return wrap(cast<DISubprogramAttr>(unwrap(diSubprogram)).getCompileUnit());
Expand Down Expand Up @@ -345,3 +368,79 @@ MlirAttribute mlirLLVMDIModuleAttrGet(MlirContext ctx, MlirAttribute file,
MlirAttribute mlirLLVMDIModuleAttrGetScope(MlirAttribute diModule) {
return wrap(cast<DIModuleAttr>(unwrap(diModule)).getScope());
}

MlirIdentifier mlirLLVMDIModuleAttrGetApinotes(MlirAttribute diModule) {
return wrap(cast<DIModuleAttr>(unwrap(diModule)).getApinotes());
}

MlirIdentifier mlirLLVMDIModuleAttrGetConfigMacros(MlirAttribute diModule) {
return wrap(cast<DIModuleAttr>(unwrap(diModule)).getConfigMacros());
}

MlirAttribute mlirLLVMDIModuleAttrGetFile(MlirAttribute diModule) {
return wrap(cast<DIModuleAttr>(unwrap(diModule)).getFile());
}

MlirIdentifier mlirLLVMDIModuleAttrGetIncludePath(MlirAttribute diModule) {
return wrap(cast<DIModuleAttr>(unwrap(diModule)).getIncludePath());
}

bool mlirLLVMDIModuleAttrGetIsDecl(MlirAttribute diModule) {
return cast<DIModuleAttr>(unwrap(diModule)).getIsDecl();
}

MlirAttribute mlirLLVMDISubrangeAttrGet(MlirContext ctx, MlirAttribute count,
MlirAttribute lowerBound,
MlirAttribute upperBound,
MlirAttribute stride) {
return wrap(DISubrangeAttr::get(unwrap(ctx), cast<IntegerAttr>(unwrap(count)),
cast<IntegerAttr>(unwrap(lowerBound)),
cast<IntegerAttr>(unwrap(upperBound)),
cast<IntegerAttr>(unwrap(stride))));
}

MlirAttribute mlirLLVMAtomicOrderingAttrGet(MlirContext ctx,
MlirLLVMAtomicOrdering ordering) {
return wrap(AtomicOrderingAttr::get(unwrap(ctx), AtomicOrdering(ordering)));
}

MlirAttribute mlirLLVMAtomicBinOpAttrGet(MlirContext ctx,
MlirLLVMAtomicBinOp val) {
return wrap(AtomicBinOpAttr::get(unwrap(ctx), AtomicBinOp(val)));
}

MlirAttribute mlirLLVMVisibilityAttrGet(MlirContext ctx,
MlirLLVMVisibility visibility) {
return wrap(VisibilityAttr::get(unwrap(ctx), Visibility(visibility)));
}

MlirAttribute mlirLLVMUnnamedAddrAttrGet(MlirContext ctx,
MlirLLVMUnnamedAddr val) {
return wrap(UnnamedAddrAttr::get(unwrap(ctx), UnnamedAddr(val)));
}

MlirAttribute mlirLLVMICmpPredicateAttrGet(MlirContext ctx,
MlirLLVMICmpPredicate val) {
return wrap(ICmpPredicateAttr::get(unwrap(ctx), ICmpPredicate(val)));
}

MlirAttribute mlirLLVMFCmpPredicateAttrGet(MlirContext ctx,
MlirLLVMFCmpPredicate val) {
return wrap(FCmpPredicateAttr::get(unwrap(ctx), FCmpPredicate(val)));
}

MlirAttribute mlirLLVMFramePointerKindAttrGet(MlirContext ctx,
MlirLLVMFramePointerKind val) {
return wrap(FramePointerKindAttr::get(
unwrap(ctx), framePointerKind::FramePointerKind(val)));
}

MlirAttribute mlirLLVMFastmathFlagsAttrGet(MlirContext ctx,
MlirLLVMFastmathFlags val) {
return wrap(FastmathFlagsAttr::get(unwrap(ctx), FastmathFlags(val)));
}

MlirAttribute mlirLLVMModRefInfoAttrGet(MlirContext ctx,
MlirLLVMModRefInfo val) {
return wrap(ModRefInfoAttr::get(unwrap(ctx), ModRefInfo(val)));
}
Loading
Loading