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

Conversation

edg-l
Copy link
Contributor

@edg-l edg-l commented Mar 8, 2024

This is kind of a followup to #83992

@llvmbot
Copy link
Member

llvmbot commented Mar 8, 2024

@llvm/pr-subscribers-mlir-core
@llvm/pr-subscribers-mlir

@llvm/pr-subscribers-mlir-llvm

Author: Edgar (edg-l)

Changes

This is kind of a followup to #83992


Full diff: https://github.com/llvm/llvm-project/pull/84453.diff

3 Files Affected:

  • (modified) mlir/include/mlir-c/Dialect/LLVM.h (+248-8)
  • (modified) mlir/lib/CAPI/Dialect/LLVM.cpp (+104-6)
  • (modified) mlir/test/CAPI/llvm.c (+11)
diff --git a/mlir/include/mlir-c/Dialect/LLVM.h b/mlir/include/mlir-c/Dialect/LLVM.h
index d823afb659c8db..68c502b1ca6b9c 100644
--- a/mlir/include/mlir-c/Dialect/LLVM.h
+++ b/mlir/include/mlir-c/Dialect/LLVM.h
@@ -227,12 +227,54 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIBasicTypeAttrGet(
     MlirContext ctx, unsigned int tag, MlirAttribute name, uint64_t sizeInBits,
     MlirLLVMTypeEncoding encoding);
 
+enum MlirLLVMDIFlags {
+  MlirLLVMDIFlagsZero = 0,
+  MlirLLVMDIFlagsBit0 = 1,
+  MlirLLVMDIFlagsBit1 = 2,
+  MlirLLVMDIFlagsPrivate = 1,
+  MlirLLVMDIFlagsProtected = 2,
+  MlirLLVMDIFlagsPublic = 3,
+  MlirLLVMDIFlagsFwdDecl = 4,
+  MlirLLVMDIFlagsAppleBlock = 8,
+  MlirLLVMDIFlagsReservedBit4 = 16,
+  MlirLLVMDIFlagsVirtual = 32,
+  MlirLLVMDIFlagsArtificial = 64,
+  MlirLLVMDIFlagsExplicit = 128,
+  MlirLLVMDIFlagsPrototyped = 256,
+  MlirLLVMDIFlagsObjcClassComplete = 512,
+  MlirLLVMDIFlagsObjectPointer = 1024,
+  MlirLLVMDIFlagsVector = 2048,
+  MlirLLVMDIFlagsStaticMember = 4096,
+  MlirLLVMDIFlagsLValueReference = 8192,
+  MlirLLVMDIFlagsRValueReference = 16384,
+  MlirLLVMDIFlagsExportSymbols = 32768,
+  MlirLLVMDIFlagsSingleInheritance = 65536,
+  MlirLLVMDIFlagsMultipleInheritance = 65536,
+  MlirLLVMDIFlagsVirtualInheritance = 65536,
+  MlirLLVMDIFlagsIntroducedVirtual = 262144,
+  MlirLLVMDIFlagsBitField = 524288,
+  MlirLLVMDIFlagsNoReturn = 1048576,
+  MlirLLVMDIFlagsTypePassByValue = 4194304,
+  MlirLLVMDIFlagsTypePassByReference = 8388608,
+  MlirLLVMDIFlagsEnumClass = 16777216,
+  MlirLLVMDIFlagsThunk = 33554432,
+  MlirLLVMDIFlagsNonTrivial = 67108864,
+  MlirLLVMDIFlagsBigEndian = 134217728,
+  MlirLLVMDIFlagsLittleEndian = 268435456,
+  MlirLLVMDIFlagsAllCallsDescribed = 536870912,
+};
+typedef enum MlirLLVMDIFlags MlirLLVMDIFlags;
+
+/// Creates a LLVM DIFlags attribute.
+MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIFlagsAttrGet(MlirContext ctx,
+                                                        MlirLLVMDIFlags value);
+
 /// 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);
+    uint32_t line, MlirAttribute scope, MlirAttribute baseType,
+    MlirLLVMDIFlags flags, uint64_t sizeInBits, uint64_t alignInBits,
+    intptr_t nElements, MlirAttribute const *elements);
 
 /// Creates a LLVM DIDerivedType attribute.
 MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIDerivedTypeAttrGet(
@@ -263,10 +305,6 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDICompileUnitAttrGet(
     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,
@@ -283,12 +321,33 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDILocalVariableAttrGet(
     MlirAttribute diFile, unsigned int line, unsigned int arg,
     unsigned int alignInBits, MlirAttribute diType);
 
+/// Creates a LLVM DINamespaceAttr attribute.
+MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDINamespaceAttrGet(MlirContext ctx,
+                                                            MlirAttribute name,
+                                                            MlirAttribute scope,
+                                                            bool exportSymbols);
+
+enum MlirLLVMDISubprogramFlags {
+  MlirLLVMDISubprogramFlagsVirtual = 1,
+  MlirLLVMDISubprogramFlagsPureVirtual = 2,
+  MlirLLVMDISubprogramFlagsLocalToUnit = 4,
+  MlirLLVMDISubprogramFlagsDefinition = 8,
+  MlirLLVMDISubprogramFlagsOptimized = 16,
+  MlirLLVMDISubprogramFlagsPure = 32,
+  MlirLLVMDISubprogramFlagsElemental = 64,
+  MlirLLVMDISubprogramFlagsRecursive = 128,
+  MlirLLVMDISubprogramFlagsMainSubprogram = 256,
+  MlirLLVMDISubprogramFlagsDeleted = 512,
+  MlirLLVMDISubprogramFlagsObjCDirect = 2048,
+};
+typedef enum MlirLLVMDISubprogramFlags MlirLLVMDISubprogramFlags;
+
 /// 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
@@ -314,6 +373,18 @@ mlirLLVMDISubprogramAttrGetFile(MlirAttribute diSubprogram);
 MLIR_CAPI_EXPORTED MlirAttribute
 mlirLLVMDISubprogramAttrGetType(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);
+
 /// Creates a LLVM DISubroutineTypeAttr attribute.
 MLIR_CAPI_EXPORTED MlirAttribute
 mlirLLVMDISubroutineTypeAttrGet(MlirContext ctx, unsigned int callingConvention,
@@ -329,6 +400,175 @@ 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);
+
+enum MlirLLVMAtomicOrdering {
+  MlirLLVMAtomicOrderingNot_atomic = 0,
+  MlirLLVMAtomicOrderingUnordered = 1,
+  MlirLLVMAtomicOrderingMonotonic = 2,
+  MlirLLVMAtomicOrderingAcquire = 4,
+  MlirLLVMAtomicOrderingRelease = 5,
+  MlirLLVMAtomicOrderingAcq_rel = 6,
+  MlirLLVMAtomicOrderingSeq_cst = 7,
+};
+typedef enum MlirLLVMAtomicOrdering MlirLLVMAtomicOrdering;
+
+/// Creates a LLVM AtomicOrderingAttr.
+MLIR_CAPI_EXPORTED MlirAttribute
+mlirLLVMAtomicOrderingAttrGet(MlirContext ctx, MlirLLVMAtomicOrdering ordering);
+
+enum MlirLLVMAtomicBinOp {
+  MlirLLVMAtomicBinOpxchg = 0,
+  MlirLLVMAtomicBinOpadd = 1,
+  MlirLLVMAtomicBinOpsub = 2,
+  MlirLLVMAtomicBinOp_and = 3,
+  MlirLLVMAtomicBinOpnand = 4,
+  MlirLLVMAtomicBinOp_or = 5,
+  MlirLLVMAtomicBinOp_xor = 6,
+  MlirLLVMAtomicBinOpmax = 7,
+  MlirLLVMAtomicBinOpmin = 8,
+  MlirLLVMAtomicBinOpumax = 9,
+  MlirLLVMAtomicBinOpumin = 10,
+  MlirLLVMAtomicBinOpfadd = 11,
+  MlirLLVMAtomicBinOpfsub = 12,
+  MlirLLVMAtomicBinOpfmax = 13,
+  MlirLLVMAtomicBinOpfmin = 14,
+  MlirLLVMAtomicBinOpuinc_wrap = 15,
+  MlirLLVMAtomicBinOpudec_wrap = 16,
+};
+typedef enum MlirLLVMAtomicBinOp MlirLLVMAtomicBinOp;
+
+/// Creates a LLVM AtomicBinOpAttr.
+MLIR_CAPI_EXPORTED MlirAttribute
+mlirLLVMAtomicBinOpAttrGet(MlirContext ctx, MlirLLVMAtomicBinOp val);
+
+enum MlirLLVMVisibility {
+  MlirLLVMVisibilityDefault = 0,
+  MlirLLVMVisibilityHidden = 1,
+  MlirLLVMVisibilityProtected = 2,
+};
+typedef enum MlirLLVMVisibility MlirLLVMVisibility;
+
+/// Creates a LLVM VisibilityAttr.
+MLIR_CAPI_EXPORTED MlirAttribute
+mlirLLVMVisibilityAttrGet(MlirContext ctx, MlirLLVMVisibility visibility);
+
+enum MlirLLVMUnnamedAddr {
+  MlirLLVMUnnamedAddrNone = 0,
+  MlirLLVMUnnamedAddrLocal = 1,
+  MlirLLVMUnnamedAddrGlobal = 2,
+};
+typedef enum MlirLLVMUnnamedAddr MlirLLVMUnnamedAddr;
+
+/// Creates a LLVM UnnamedAddrAttr.
+MLIR_CAPI_EXPORTED MlirAttribute
+mlirLLVMUnnamedAddrAttrGet(MlirContext ctx, MlirLLVMUnnamedAddr val);
+
+enum MlirLLVMICmpPredicate {
+  MlirLLVMICmpPredicateEq = 0,
+  MlirLLVMICmpPredicateNe = 1,
+  MlirLLVMICmpPredicateSlt = 2,
+  MlirLLVMICmpPredicateSle = 3,
+  MlirLLVMICmpPredicateSgt = 4,
+  MlirLLVMICmpPredicateSge = 5,
+  MlirLLVMICmpPredicateUlt = 6,
+  MlirLLVMICmpPredicateUle = 7,
+  MlirLLVMICmpPredicateUgt = 8,
+  MlirLLVMICmpPredicateUge = 9,
+};
+typedef enum MlirLLVMICmpPredicate MlirLLVMICmpPredicate;
+
+/// Creates a LLVM ICmpPredicateAttr.
+MLIR_CAPI_EXPORTED MlirAttribute
+mlirLLVMICmpPredicateAttrGet(MlirContext ctx, MlirLLVMICmpPredicate val);
+
+enum MlirLLVMFCmpPredicate {
+  MlirLLVMFCmpPredicate_false = 0,
+  MlirLLVMFCmpPredicateOeq = 1,
+  MlirLLVMFCmpPredicateOgt = 2,
+  MlirLLVMFCmpPredicateOge = 3,
+  MlirLLVMFCmpPredicateOlt = 4,
+  MlirLLVMFCmpPredicateOle = 5,
+  MlirLLVMFCmpPredicateOne = 6,
+  MlirLLVMFCmpPredicateOrd = 7,
+  MlirLLVMFCmpPredicateUeq = 8,
+  MlirLLVMFCmpPredicateUgt = 9,
+  MlirLLVMFCmpPredicateUge = 10,
+  MlirLLVMFCmpPredicateUlt = 11,
+  MlirLLVMFCmpPredicateUle = 12,
+  MlirLLVMFCmpPredicateUne = 13,
+  MlirLLVMFCmpPredicateUno = 14,
+  MlirLLVMFCmpPredicate_true = 15,
+};
+typedef enum MlirLLVMFCmpPredicate MlirLLVMFCmpPredicate;
+/// Creates a LLVM FCmpPredicateAttr.
+MLIR_CAPI_EXPORTED MlirAttribute
+mlirLLVMFCmpPredicateAttrGet(MlirContext ctx, MlirLLVMFCmpPredicate val);
+
+enum MlirLLVMFramePointerKind {
+  MlirLLVMFramePointerKindNone = 0,
+  MlirLLVMFramePointerKindNonLeaf = 1,
+  MlirLLVMFramePointerKindAll = 2,
+};
+typedef enum MlirLLVMFramePointerKind MlirLLVMFramePointerKind;
+
+/// Creates a LLVM FramePointerKindAttr.
+MLIR_CAPI_EXPORTED MlirAttribute
+mlirLLVMFramePointerKindAttrGet(MlirContext ctx, MlirLLVMFramePointerKind val);
+
+enum MlirLLVMFastmathFlags {
+  MlirLLVMFastmathFlagsNone = 0,
+  MlirLLVMFastmathFlagsNnan = 1,
+  MlirLLVMFastmathFlagsNinf = 2,
+  MlirLLVMFastmathFlagsNsz = 4,
+  MlirLLVMFastmathFlagsArcp = 8,
+  MlirLLVMFastmathFlagsContract = 16,
+  MlirLLVMFastmathFlagsAfn = 32,
+  MlirLLVMFastmathFlagsReassoc = 64,
+  MlirLLVMFastmathFlagsFast = 127,
+};
+typedef enum MlirLLVMFastmathFlags MlirLLVMFastmathFlags;
+
+/// Creates a LLVM FastmathFlagsAttr.
+MLIR_CAPI_EXPORTED MlirAttribute
+mlirLLVMFastmathFlagsAttrGet(MlirContext ctx, MlirLLVMFastmathFlags val);
+
+enum MlirLLVMModRefInfo {
+  MlirLLVMModRefInfoNoModRef = 0,
+  MlirLLVMModRefInfoRef = 1,
+  MlirLLVMModRefInfoMod = 2,
+  MlirLLVMModRefInfoModRef = 3,
+};
+typedef enum MlirLLVMModRefInfo MlirLLVMModRefInfo;
+
+/// Creates a LLVM ModRefInfoAttr.
+MLIR_CAPI_EXPORTED MlirAttribute
+mlirLLVMModRefInfoAttrGet(MlirContext ctx, MlirLLVMModRefInfo val);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/mlir/lib/CAPI/Dialect/LLVM.cpp b/mlir/lib/CAPI/Dialect/LLVM.cpp
index 2d938ce5f4834c..16bf1590fea007 100644
--- a/mlir/lib/CAPI/Dialect/LLVM.cpp
+++ b/mlir/lib/CAPI/Dialect/LLVM.cpp
@@ -14,7 +14,6 @@
 #include "mlir/Dialect/LLVMIR/LLVMAttrs.h"
 #include "mlir/Dialect/LLVMIR/LLVMDialect.h"
 #include "mlir/Dialect/LLVMIR/LLVMTypes.h"
-#include "llvm-c/Core.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/SmallVectorExtras.h"
 
@@ -153,9 +152,9 @@ MlirAttribute mlirLLVMDIBasicTypeAttrGet(MlirContext ctx, unsigned int tag,
 
 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) {
+    uint32_t line, MlirAttribute scope, MlirAttribute baseType,
+    MlirLLVMDIFlags flags, uint64_t sizeInBits, uint64_t alignInBits,
+    intptr_t nElements, MlirAttribute const *elements) {
   SmallVector<Attribute> elementsStorage;
   elementsStorage.reserve(nElements);
 
@@ -203,6 +202,14 @@ MlirAttribute mlirLLVMDIFileAttrGet(MlirContext ctx, MlirAttribute name,
                               cast<StringAttr>(unwrap(directory))));
 }
 
+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
 mlirLLVMDICompileUnitAttrGet(MlirContext ctx, MlirAttribute id,
                              unsigned int sourceLanguage, MlirAttribute file,
@@ -214,7 +221,7 @@ mlirLLVMDICompileUnitAttrGet(MlirContext ctx, MlirAttribute id,
       isOptimized, DIEmissionKind(emissionKind)));
 }
 
-MlirAttribute mlirLLVMDIFlagsAttrGet(MlirContext ctx, uint64_t value) {
+MlirAttribute mlirLLVMDIFlagsAttrGet(MlirContext ctx, MlirLLVMDIFlags value) {
   return wrap(DIFlagsAttr::get(unwrap(ctx), DIFlags(value)));
 }
 
@@ -265,7 +272,7 @@ 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)),
@@ -300,6 +307,21 @@ MlirAttribute mlirLLVMDISubprogramAttrGetType(MlirAttribute diSubprogram) {
   return wrap(cast<DISubprogramAttr>(unwrap(diSubprogram)).getType());
 }
 
+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 mlirLLVMDIModuleAttrGet(MlirContext ctx, MlirAttribute file,
                                       MlirAttribute scope, MlirAttribute name,
                                       MlirAttribute configMacros,
@@ -317,3 +339,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)));
+}
diff --git a/mlir/test/CAPI/llvm.c b/mlir/test/CAPI/llvm.c
index 2fd98b29f487c8..06c9f83f6ce1dd 100644
--- a/mlir/test/CAPI/llvm.c
+++ b/mlir/test/CAPI/llvm.c
@@ -332,6 +332,17 @@ static void testDebugInfoAttributes(MlirContext ctx) {
 
   // CHECK: #llvm.di_expression<[(1)]>
   mlirAttributeDump(mlirLLVMDIExpressionAttrGet(ctx, 1, &expression_elem));
+
+  // CHECK: #llvm.di_namespace<{{.*}}>
+  mlirAttributeDump(mlirLLVMDINamespaceAttrGet(ctx, foo, compile_unit, true));
+
+  MlirType type = mlirIntegerTypeGet(ctx, 64);
+
+  // CHECK: #llvm.di_subrange<count = 1 : i64, lowerBound = 1 : i64, upperBound
+  // CHECK-SAME: = 10 : i64, stride = 1 : i64>
+  mlirAttributeDump(mlirLLVMDISubrangeAttrGet(
+      ctx, mlirIntegerAttrGet(type, 1), mlirIntegerAttrGet(type, 1),
+      mlirIntegerAttrGet(type, 10), mlirIntegerAttrGet(type, 1)));
 }
 
 int main(void) {

@edg-l
Copy link
Contributor Author

edg-l commented Jul 2, 2024

Could someone check this PR? i resolved the conflicts

@makslevental
Copy link
Contributor

Is there really no way to get these just straight from the corresponding LLVM enums? Maybe I'm saying something dumb and they're not enums in LLVM?

@ftynse ftynse self-requested a review July 3, 2024 21:31
@ftynse
Copy link
Member

ftynse commented Jul 3, 2024

+1, I'd rather get these from LLVM if possible. If not, please comment why. We can also consider extending LLVM C API to expose these.

@edg-l edg-l force-pushed the mlir_capi_expanded branch from cf6d76f to 782825f Compare July 22, 2024 07:51
@edg-l edg-l requested review from rupprecht and keith as code owners July 22, 2024 07:51
@llvmbot llvmbot added mlir:core MLIR Core Infrastructure bazel "Peripheral" support tier build system: utils/bazel labels Jul 22, 2024
@edg-l
Copy link
Contributor Author

edg-l commented Jul 22, 2024

+1, I'd rather get these from LLVM if possible. If not, please comment why. We can also consider extending LLVM C API to expose these.

Tried to do it, first time making tablegen stuff, hope its good

@edg-l edg-l force-pushed the mlir_capi_expanded branch 3 times, most recently from 09c8635 to 124d776 Compare July 22, 2024 07:56
@edg-l edg-l force-pushed the mlir_capi_expanded branch from 124d776 to 274647c Compare July 25, 2024 11:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bazel "Peripheral" support tier build system: utils/bazel mlir:core MLIR Core Infrastructure mlir:llvm mlir
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants