Skip to content

Commit 274647c

Browse files
committed
[mlir-c] expand the mlir llvm dialect C api with more attributes/enums
1 parent 90a9979 commit 274647c

File tree

6 files changed

+264
-101
lines changed

6 files changed

+264
-101
lines changed

mlir/include/mlir-c/Dialect/LLVM.h

Lines changed: 84 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "mlir-c/IR.h"
1414
#include "mlir-c/Support.h"
15+
#include "mlir/Dialect/LLVMIR/LLVMOpsEnums.capi.h.inc"
1516

1617
#ifdef __cplusplus
1718
extern "C" {
@@ -106,89 +107,14 @@ MLIR_CAPI_EXPORTED MlirLogicalResult
106107
mlirLLVMStructTypeSetBody(MlirType structType, intptr_t nFieldTypes,
107108
MlirType const *fieldTypes, bool isPacked);
108109

109-
enum MlirLLVMCConv {
110-
MlirLLVMCConvC = 0,
111-
MlirLLVMCConvFast = 8,
112-
MlirLLVMCConvCold = 9,
113-
MlirLLVMCConvGHC = 10,
114-
MlirLLVMCConvHiPE = 11,
115-
MlirLLVMCConvAnyReg = 13,
116-
MlirLLVMCConvPreserveMost = 14,
117-
MlirLLVMCConvPreserveAll = 15,
118-
MlirLLVMCConvSwift = 16,
119-
MlirLLVMCConvCXX_FAST_TLS = 17,
120-
MlirLLVMCConvTail = 18,
121-
MlirLLVMCConvCFGuard_Check = 19,
122-
MlirLLVMCConvSwiftTail = 20,
123-
MlirLLVMCConvX86_StdCall = 64,
124-
MlirLLVMCConvX86_FastCall = 65,
125-
MlirLLVMCConvARM_APCS = 66,
126-
MlirLLVMCConvARM_AAPCS = 67,
127-
MlirLLVMCConvARM_AAPCS_VFP = 68,
128-
MlirLLVMCConvMSP430_INTR = 69,
129-
MlirLLVMCConvX86_ThisCall = 70,
130-
MlirLLVMCConvPTX_Kernel = 71,
131-
MlirLLVMCConvPTX_Device = 72,
132-
MlirLLVMCConvSPIR_FUNC = 75,
133-
MlirLLVMCConvSPIR_KERNEL = 76,
134-
MlirLLVMCConvIntel_OCL_BI = 77,
135-
MlirLLVMCConvX86_64_SysV = 78,
136-
MlirLLVMCConvWin64 = 79,
137-
MlirLLVMCConvX86_VectorCall = 80,
138-
MlirLLVMCConvDUMMY_HHVM = 81,
139-
MlirLLVMCConvDUMMY_HHVM_C = 82,
140-
MlirLLVMCConvX86_INTR = 83,
141-
MlirLLVMCConvAVR_INTR = 84,
142-
MlirLLVMCConvAVR_BUILTIN = 86,
143-
MlirLLVMCConvAMDGPU_VS = 87,
144-
MlirLLVMCConvAMDGPU_GS = 88,
145-
MlirLLVMCConvAMDGPU_CS = 90,
146-
MlirLLVMCConvAMDGPU_KERNEL = 91,
147-
MlirLLVMCConvX86_RegCall = 92,
148-
MlirLLVMCConvAMDGPU_HS = 93,
149-
MlirLLVMCConvMSP430_BUILTIN = 94,
150-
MlirLLVMCConvAMDGPU_LS = 95,
151-
MlirLLVMCConvAMDGPU_ES = 96,
152-
MlirLLVMCConvAArch64_VectorCall = 97,
153-
MlirLLVMCConvAArch64_SVE_VectorCall = 98,
154-
MlirLLVMCConvWASM_EmscriptenInvoke = 99,
155-
MlirLLVMCConvAMDGPU_Gfx = 100,
156-
MlirLLVMCConvM68k_INTR = 101,
157-
};
158-
typedef enum MlirLLVMCConv MlirLLVMCConv;
159-
160110
/// Creates a LLVM CConv attribute.
161111
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMCConvAttrGet(MlirContext ctx,
162112
MlirLLVMCConv cconv);
163113

164-
enum MlirLLVMComdat {
165-
MlirLLVMComdatAny = 0,
166-
MlirLLVMComdatExactMatch = 1,
167-
MlirLLVMComdatLargest = 2,
168-
MlirLLVMComdatNoDeduplicate = 3,
169-
MlirLLVMComdatSameSize = 4,
170-
};
171-
typedef enum MlirLLVMComdat MlirLLVMComdat;
172-
173114
/// Creates a LLVM Comdat attribute.
174115
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMComdatAttrGet(MlirContext ctx,
175116
MlirLLVMComdat comdat);
176117

177-
enum MlirLLVMLinkage {
178-
MlirLLVMLinkagePrivate = 0,
179-
MlirLLVMLinkageInternal = 1,
180-
MlirLLVMLinkageAvailableExternally = 2,
181-
MlirLLVMLinkageLinkonce = 3,
182-
MlirLLVMLinkageWeak = 4,
183-
MlirLLVMLinkageCommon = 5,
184-
MlirLLVMLinkageAppending = 6,
185-
MlirLLVMLinkageExternWeak = 7,
186-
MlirLLVMLinkageLinkonceODR = 8,
187-
MlirLLVMLinkageWeakODR = 9,
188-
MlirLLVMLinkageExternal = 10,
189-
};
190-
typedef enum MlirLLVMLinkage MlirLLVMLinkage;
191-
192118
/// Creates a LLVM Linkage attribute.
193119
MLIR_CAPI_EXPORTED MlirAttribute
194120
mlirLLVMLinkageAttrGet(MlirContext ctx, MlirLLVMLinkage linkage);
@@ -258,7 +184,7 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIStringTypeAttrGet(
258184
MlirLLVMTypeEncoding encoding);
259185

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

263189
/// Gets the base type from a LLVM DIDerivedType attribute.
264190
MLIR_CAPI_EXPORTED MlirAttribute
@@ -269,22 +195,6 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIFileAttrGet(MlirContext ctx,
269195
MlirAttribute name,
270196
MlirAttribute directory);
271197

272-
enum MlirLLVMDIEmissionKind {
273-
MlirLLVMDIEmissionKindNone = 0,
274-
MlirLLVMDIEmissionKindFull = 1,
275-
MlirLLVMDIEmissionKindLineTablesOnly = 2,
276-
MlirLLVMDIEmissionKindDebugDirectivesOnly = 3,
277-
};
278-
typedef enum MlirLLVMDIEmissionKind MlirLLVMDIEmissionKind;
279-
280-
enum MlirLLVMDINameTableKind {
281-
MlirLLVMDINameTableKindDefault = 0,
282-
MlirLLVMDINameTableKindGNU = 1,
283-
MlirLLVMDINameTableKindNone = 2,
284-
MlirLLVMDINameTableKindApple = 3,
285-
};
286-
typedef enum MlirLLVMDINameTableKind MlirLLVMDINameTableKind;
287-
288198
/// Creates a LLVM DICompileUnit attribute.
289199
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDICompileUnitAttrGet(
290200
MlirContext ctx, MlirAttribute id, unsigned int sourceLanguage,
@@ -293,7 +203,7 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDICompileUnitAttrGet(
293203

294204
/// Creates a LLVM DIFlags attribute.
295205
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIFlagsAttrGet(MlirContext ctx,
296-
uint64_t value);
206+
MlirLLVMDIFlags value);
297207

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

224+
/// Creates a LLVM DINamespaceAttr attribute.
225+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDINamespaceAttrGet(MlirContext ctx,
226+
MlirAttribute name,
227+
MlirAttribute scope,
228+
bool exportSymbols);
229+
314230
/// Creates a LLVM DISubprogramAttr attribute.
315231
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDISubprogramAttrGet(
316232
MlirContext ctx, MlirAttribute id, MlirAttribute compileUnit,
317233
MlirAttribute scope, MlirAttribute name, MlirAttribute linkageName,
318234
MlirAttribute file, unsigned int line, unsigned int scopeLine,
319-
uint64_t subprogramFlags, MlirAttribute type);
235+
MlirLLVMDISubprogramFlags subprogramFlags, MlirAttribute type);
320236

321237
/// Gets the scope from this DISubprogramAttr.
322238
MLIR_CAPI_EXPORTED MlirAttribute
@@ -330,6 +246,18 @@ mlirLLVMDISubprogramAttrGetLine(MlirAttribute diSubprogram);
330246
MLIR_CAPI_EXPORTED unsigned int
331247
mlirLLVMDISubprogramAttrGetScopeLine(MlirAttribute diSubprogram);
332248

249+
/// Gets the linkage name from this DISubprogramAttr.
250+
MLIR_CAPI_EXPORTED MlirIdentifier
251+
mlirLLVMDISubprogramAttrGetLinkageName(MlirAttribute diSubprogram);
252+
253+
/// Gets the name from this DISubprogramAttr.
254+
MLIR_CAPI_EXPORTED MlirIdentifier
255+
mlirLLVMDISubprogramAttrGetName(MlirAttribute diSubprogram);
256+
257+
/// Gets the subprogram flags from this DISubprogramAttr.
258+
MLIR_CAPI_EXPORTED MlirLLVMDISubprogramFlags
259+
mlirLLVMDISubprogramAttrGetSubprogramFlags(MlirAttribute diSubprogram);
260+
333261
/// Gets the compile unit from this DISubprogram.
334262
MLIR_CAPI_EXPORTED MlirAttribute
335263
mlirLLVMDISubprogramAttrGetCompileUnit(MlirAttribute diSubprogram);
@@ -357,6 +285,68 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIModuleAttrGet(
357285
MLIR_CAPI_EXPORTED MlirAttribute
358286
mlirLLVMDIModuleAttrGetScope(MlirAttribute diModule);
359287

288+
/// Gets the api notes of this DIModuleAttr.
289+
MLIR_CAPI_EXPORTED MlirIdentifier
290+
mlirLLVMDIModuleAttrGetApinotes(MlirAttribute diModule);
291+
292+
/// Gets the config macros of this DIModuleAttr.
293+
MLIR_CAPI_EXPORTED MlirIdentifier
294+
mlirLLVMDIModuleAttrGetConfigMacros(MlirAttribute diModule);
295+
296+
/// Gets the file of this DIModuleAttr.
297+
MLIR_CAPI_EXPORTED MlirAttribute
298+
mlirLLVMDIModuleAttrGetFile(MlirAttribute diModule);
299+
300+
/// Gets the include path of this DIModuleAttr.
301+
MLIR_CAPI_EXPORTED MlirIdentifier
302+
mlirLLVMDIModuleAttrGetIncludePath(MlirAttribute diModule);
303+
304+
/// Gets whether this DIModuleAttr is a declaration.
305+
MLIR_CAPI_EXPORTED bool mlirLLVMDIModuleAttrGetIsDecl(MlirAttribute diModule);
306+
307+
/// Creates a LLVM DISubrange attribute.
308+
///
309+
/// All parameters have the type IntegerAttr.
310+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDISubrangeAttrGet(
311+
MlirContext ctx, MlirAttribute count, MlirAttribute lowerBound,
312+
MlirAttribute upperBound, MlirAttribute stride);
313+
314+
/// Creates a LLVM AtomicOrderingAttr.
315+
MLIR_CAPI_EXPORTED MlirAttribute
316+
mlirLLVMAtomicOrderingAttrGet(MlirContext ctx, MlirLLVMAtomicOrdering ordering);
317+
318+
/// Creates a LLVM AtomicBinOpAttr.
319+
MLIR_CAPI_EXPORTED MlirAttribute
320+
mlirLLVMAtomicBinOpAttrGet(MlirContext ctx, MlirLLVMAtomicBinOp val);
321+
322+
/// Creates a LLVM VisibilityAttr.
323+
MLIR_CAPI_EXPORTED MlirAttribute
324+
mlirLLVMVisibilityAttrGet(MlirContext ctx, MlirLLVMVisibility visibility);
325+
326+
/// Creates a LLVM UnnamedAddrAttr.
327+
MLIR_CAPI_EXPORTED MlirAttribute
328+
mlirLLVMUnnamedAddrAttrGet(MlirContext ctx, MlirLLVMUnnamedAddr val);
329+
330+
/// Creates a LLVM ICmpPredicateAttr.
331+
MLIR_CAPI_EXPORTED MlirAttribute
332+
mlirLLVMICmpPredicateAttrGet(MlirContext ctx, MlirLLVMICmpPredicate val);
333+
334+
/// Creates a LLVM FCmpPredicateAttr.
335+
MLIR_CAPI_EXPORTED MlirAttribute
336+
mlirLLVMFCmpPredicateAttrGet(MlirContext ctx, MlirLLVMFCmpPredicate val);
337+
338+
/// Creates a LLVM FramePointerKindAttr.
339+
MLIR_CAPI_EXPORTED MlirAttribute
340+
mlirLLVMFramePointerKindAttrGet(MlirContext ctx, MlirLLVMFramePointerKind val);
341+
342+
/// Creates a LLVM FastmathFlagsAttr.
343+
MLIR_CAPI_EXPORTED MlirAttribute
344+
mlirLLVMFastmathFlagsAttrGet(MlirContext ctx, MlirLLVMFastmathFlags val);
345+
346+
/// Creates a LLVM ModRefInfoAttr.
347+
MLIR_CAPI_EXPORTED MlirAttribute
348+
mlirLLVMModRefInfoAttrGet(MlirContext ctx, MlirLLVMModRefInfo val);
349+
360350
#ifdef __cplusplus
361351
}
362352
#endif

mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ mlir_tablegen(LLVMOps.cpp.inc -gen-op-defs)
66
mlir_tablegen(LLVMOpsDialect.h.inc -gen-dialect-decls)
77
mlir_tablegen(LLVMOpsDialect.cpp.inc -gen-dialect-defs)
88
mlir_tablegen(LLVMOpsEnums.h.inc -gen-enum-decls)
9+
mlir_tablegen(LLVMOpsEnums.capi.h.inc -gen-enum-capi-decls)
910
mlir_tablegen(LLVMOpsEnums.cpp.inc -gen-enum-defs)
1011
mlir_tablegen(LLVMOpsAttrDefs.h.inc -gen-attrdef-decls
1112
-attrdefs-dialect=llvm)

mlir/lib/CAPI/Dialect/LLVM.cpp

Lines changed: 101 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ mlirLLVMDICompileUnitAttrGet(MlirContext ctx, MlirAttribute id,
243243
DINameTableKind(nameTableKind)));
244244
}
245245

246-
MlirAttribute mlirLLVMDIFlagsAttrGet(MlirContext ctx, uint64_t value) {
246+
MlirAttribute mlirLLVMDIFlagsAttrGet(MlirContext ctx, MlirLLVMDIFlags value) {
247247
return wrap(DIFlagsAttr::get(unwrap(ctx), DIFlags(value)));
248248
}
249249

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

292+
MlirAttribute mlirLLVMDINamespaceAttrGet(MlirContext ctx, MlirAttribute name,
293+
MlirAttribute scope,
294+
bool exportSymbols) {
295+
return wrap(DINamespaceAttr::get(unwrap(ctx), cast<StringAttr>(unwrap(name)),
296+
cast<DIScopeAttr>(unwrap(scope)),
297+
exportSymbols));
298+
}
299+
292300
MlirAttribute mlirLLVMDISubprogramAttrGet(
293301
MlirContext ctx, MlirAttribute id, MlirAttribute compileUnit,
294302
MlirAttribute scope, MlirAttribute name, MlirAttribute linkageName,
295303
MlirAttribute file, unsigned int line, unsigned int scopeLine,
296-
uint64_t subprogramFlags, MlirAttribute type) {
304+
MlirLLVMDISubprogramFlags subprogramFlags, MlirAttribute type) {
297305
return wrap(DISubprogramAttr::get(
298306
unwrap(ctx), cast<DistinctAttr>(unwrap(id)),
299307
cast<DICompileUnitAttr>(unwrap(compileUnit)),
@@ -315,6 +323,21 @@ unsigned int mlirLLVMDISubprogramAttrGetScopeLine(MlirAttribute diSubprogram) {
315323
return cast<DISubprogramAttr>(unwrap(diSubprogram)).getScopeLine();
316324
}
317325

326+
MlirIdentifier
327+
mlirLLVMDISubprogramAttrGetLinkageName(MlirAttribute diSubprogram) {
328+
return wrap(cast<DISubprogramAttr>(unwrap(diSubprogram)).getLinkageName());
329+
}
330+
331+
MlirIdentifier mlirLLVMDISubprogramAttrGetName(MlirAttribute diSubprogram) {
332+
return wrap(cast<DISubprogramAttr>(unwrap(diSubprogram)).getName());
333+
}
334+
335+
MlirLLVMDISubprogramFlags
336+
mlirLLVMDISubprogramAttrGetSubprogramFlags(MlirAttribute diSubprogram) {
337+
return static_cast<MlirLLVMDISubprogramFlags>(
338+
cast<DISubprogramAttr>(unwrap(diSubprogram)).getSubprogramFlags());
339+
}
340+
318341
MlirAttribute
319342
mlirLLVMDISubprogramAttrGetCompileUnit(MlirAttribute diSubprogram) {
320343
return wrap(cast<DISubprogramAttr>(unwrap(diSubprogram)).getCompileUnit());
@@ -345,3 +368,79 @@ MlirAttribute mlirLLVMDIModuleAttrGet(MlirContext ctx, MlirAttribute file,
345368
MlirAttribute mlirLLVMDIModuleAttrGetScope(MlirAttribute diModule) {
346369
return wrap(cast<DIModuleAttr>(unwrap(diModule)).getScope());
347370
}
371+
372+
MlirIdentifier mlirLLVMDIModuleAttrGetApinotes(MlirAttribute diModule) {
373+
return wrap(cast<DIModuleAttr>(unwrap(diModule)).getApinotes());
374+
}
375+
376+
MlirIdentifier mlirLLVMDIModuleAttrGetConfigMacros(MlirAttribute diModule) {
377+
return wrap(cast<DIModuleAttr>(unwrap(diModule)).getConfigMacros());
378+
}
379+
380+
MlirAttribute mlirLLVMDIModuleAttrGetFile(MlirAttribute diModule) {
381+
return wrap(cast<DIModuleAttr>(unwrap(diModule)).getFile());
382+
}
383+
384+
MlirIdentifier mlirLLVMDIModuleAttrGetIncludePath(MlirAttribute diModule) {
385+
return wrap(cast<DIModuleAttr>(unwrap(diModule)).getIncludePath());
386+
}
387+
388+
bool mlirLLVMDIModuleAttrGetIsDecl(MlirAttribute diModule) {
389+
return cast<DIModuleAttr>(unwrap(diModule)).getIsDecl();
390+
}
391+
392+
MlirAttribute mlirLLVMDISubrangeAttrGet(MlirContext ctx, MlirAttribute count,
393+
MlirAttribute lowerBound,
394+
MlirAttribute upperBound,
395+
MlirAttribute stride) {
396+
return wrap(DISubrangeAttr::get(unwrap(ctx), cast<IntegerAttr>(unwrap(count)),
397+
cast<IntegerAttr>(unwrap(lowerBound)),
398+
cast<IntegerAttr>(unwrap(upperBound)),
399+
cast<IntegerAttr>(unwrap(stride))));
400+
}
401+
402+
MlirAttribute mlirLLVMAtomicOrderingAttrGet(MlirContext ctx,
403+
MlirLLVMAtomicOrdering ordering) {
404+
return wrap(AtomicOrderingAttr::get(unwrap(ctx), AtomicOrdering(ordering)));
405+
}
406+
407+
MlirAttribute mlirLLVMAtomicBinOpAttrGet(MlirContext ctx,
408+
MlirLLVMAtomicBinOp val) {
409+
return wrap(AtomicBinOpAttr::get(unwrap(ctx), AtomicBinOp(val)));
410+
}
411+
412+
MlirAttribute mlirLLVMVisibilityAttrGet(MlirContext ctx,
413+
MlirLLVMVisibility visibility) {
414+
return wrap(VisibilityAttr::get(unwrap(ctx), Visibility(visibility)));
415+
}
416+
417+
MlirAttribute mlirLLVMUnnamedAddrAttrGet(MlirContext ctx,
418+
MlirLLVMUnnamedAddr val) {
419+
return wrap(UnnamedAddrAttr::get(unwrap(ctx), UnnamedAddr(val)));
420+
}
421+
422+
MlirAttribute mlirLLVMICmpPredicateAttrGet(MlirContext ctx,
423+
MlirLLVMICmpPredicate val) {
424+
return wrap(ICmpPredicateAttr::get(unwrap(ctx), ICmpPredicate(val)));
425+
}
426+
427+
MlirAttribute mlirLLVMFCmpPredicateAttrGet(MlirContext ctx,
428+
MlirLLVMFCmpPredicate val) {
429+
return wrap(FCmpPredicateAttr::get(unwrap(ctx), FCmpPredicate(val)));
430+
}
431+
432+
MlirAttribute mlirLLVMFramePointerKindAttrGet(MlirContext ctx,
433+
MlirLLVMFramePointerKind val) {
434+
return wrap(FramePointerKindAttr::get(
435+
unwrap(ctx), framePointerKind::FramePointerKind(val)));
436+
}
437+
438+
MlirAttribute mlirLLVMFastmathFlagsAttrGet(MlirContext ctx,
439+
MlirLLVMFastmathFlags val) {
440+
return wrap(FastmathFlagsAttr::get(unwrap(ctx), FastmathFlags(val)));
441+
}
442+
443+
MlirAttribute mlirLLVMModRefInfoAttrGet(MlirContext ctx,
444+
MlirLLVMModRefInfo val) {
445+
return wrap(ModRefInfoAttr::get(unwrap(ctx), ModRefInfo(val)));
446+
}

0 commit comments

Comments
 (0)