Skip to content

Commit 124d776

Browse files
committed
[mlir-c] expand the mlir llvm dialect C api with more attributes/enums
1 parent 56ad7cc commit 124d776

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);
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

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

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

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

0 commit comments

Comments
 (0)