Skip to content

Commit 3714f93

Browse files
authored
[MLIR] Add llvm (debug) attributes to CAPI (#83992)
This PR adds the following to the mlir c api: - The disctinct mlir builtin attribute. - LLVM attributes (mostly debug related ones)
1 parent 96049fc commit 3714f93

File tree

6 files changed

+562
-1
lines changed

6 files changed

+562
-1
lines changed

mlir/include/mlir-c/BuiltinAttributes.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,10 @@ mlirSymbolRefAttrGetNestedReference(MlirAttribute attr, intptr_t pos);
266266
/// Returns the typeID of an SymbolRef attribute.
267267
MLIR_CAPI_EXPORTED MlirTypeID mlirSymbolRefAttrGetTypeID(void);
268268

269+
/// Creates a DisctinctAttr with the referenced attribute.
270+
MLIR_CAPI_EXPORTED MlirAttribute
271+
mlirDisctinctAttrCreate(MlirAttribute referencedAttr);
272+
269273
//===----------------------------------------------------------------------===//
270274
// Flat SymbolRef attribute.
271275
//===----------------------------------------------------------------------===//

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

Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#define MLIR_C_DIALECT_LLVM_H
1212

1313
#include "mlir-c/IR.h"
14+
#include "mlir-c/Support.h"
1415

1516
#ifdef __cplusplus
1617
extern "C" {
@@ -98,6 +99,236 @@ MLIR_CAPI_EXPORTED MlirLogicalResult
9899
mlirLLVMStructTypeSetBody(MlirType structType, intptr_t nFieldTypes,
99100
MlirType const *fieldTypes, bool isPacked);
100101

102+
enum MlirLLVMCConv {
103+
MlirLLVMCConvC = 0,
104+
MlirLLVMCConvFast = 8,
105+
MlirLLVMCConvCold = 9,
106+
MlirLLVMCConvGHC = 10,
107+
MlirLLVMCConvHiPE = 11,
108+
MlirLLVMCConvAnyReg = 13,
109+
MlirLLVMCConvPreserveMost = 14,
110+
MlirLLVMCConvPreserveAll = 15,
111+
MlirLLVMCConvSwift = 16,
112+
MlirLLVMCConvCXX_FAST_TLS = 17,
113+
MlirLLVMCConvTail = 18,
114+
MlirLLVMCConvCFGuard_Check = 19,
115+
MlirLLVMCConvSwiftTail = 20,
116+
MlirLLVMCConvX86_StdCall = 64,
117+
MlirLLVMCConvX86_FastCall = 65,
118+
MlirLLVMCConvARM_APCS = 66,
119+
MlirLLVMCConvARM_AAPCS = 67,
120+
MlirLLVMCConvARM_AAPCS_VFP = 68,
121+
MlirLLVMCConvMSP430_INTR = 69,
122+
MlirLLVMCConvX86_ThisCall = 70,
123+
MlirLLVMCConvPTX_Kernel = 71,
124+
MlirLLVMCConvPTX_Device = 72,
125+
MlirLLVMCConvSPIR_FUNC = 75,
126+
MlirLLVMCConvSPIR_KERNEL = 76,
127+
MlirLLVMCConvIntel_OCL_BI = 77,
128+
MlirLLVMCConvX86_64_SysV = 78,
129+
MlirLLVMCConvWin64 = 79,
130+
MlirLLVMCConvX86_VectorCall = 80,
131+
MlirLLVMCConvDUMMY_HHVM = 81,
132+
MlirLLVMCConvDUMMY_HHVM_C = 82,
133+
MlirLLVMCConvX86_INTR = 83,
134+
MlirLLVMCConvAVR_INTR = 84,
135+
MlirLLVMCConvAVR_BUILTIN = 86,
136+
MlirLLVMCConvAMDGPU_VS = 87,
137+
MlirLLVMCConvAMDGPU_GS = 88,
138+
MlirLLVMCConvAMDGPU_CS = 90,
139+
MlirLLVMCConvAMDGPU_KERNEL = 91,
140+
MlirLLVMCConvX86_RegCall = 92,
141+
MlirLLVMCConvAMDGPU_HS = 93,
142+
MlirLLVMCConvMSP430_BUILTIN = 94,
143+
MlirLLVMCConvAMDGPU_LS = 95,
144+
MlirLLVMCConvAMDGPU_ES = 96,
145+
MlirLLVMCConvAArch64_VectorCall = 97,
146+
MlirLLVMCConvAArch64_SVE_VectorCall = 98,
147+
MlirLLVMCConvWASM_EmscriptenInvoke = 99,
148+
MlirLLVMCConvAMDGPU_Gfx = 100,
149+
MlirLLVMCConvM68k_INTR = 101,
150+
};
151+
typedef enum MlirLLVMCConv MlirLLVMCConv;
152+
153+
/// Creates a LLVM CConv attribute.
154+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMCConvAttrGet(MlirContext ctx,
155+
MlirLLVMCConv cconv);
156+
157+
enum MlirLLVMComdat {
158+
MlirLLVMComdatAny = 0,
159+
MlirLLVMComdatExactMatch = 1,
160+
MlirLLVMComdatLargest = 2,
161+
MlirLLVMComdatNoDeduplicate = 3,
162+
MlirLLVMComdatSameSize = 4,
163+
};
164+
typedef enum MlirLLVMComdat MlirLLVMComdat;
165+
166+
/// Creates a LLVM Comdat attribute.
167+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMComdatAttrGet(MlirContext ctx,
168+
MlirLLVMComdat comdat);
169+
170+
enum MlirLLVMLinkage {
171+
MlirLLVMLinkagePrivate = 0,
172+
MlirLLVMLinkageInternal = 1,
173+
MlirLLVMLinkageAvailableExternally = 2,
174+
MlirLLVMLinkageLinkonce = 3,
175+
MlirLLVMLinkageWeak = 4,
176+
MlirLLVMLinkageCommon = 5,
177+
MlirLLVMLinkageAppending = 6,
178+
MlirLLVMLinkageExternWeak = 7,
179+
MlirLLVMLinkageLinkonceODR = 8,
180+
MlirLLVMLinkageWeakODR = 9,
181+
MlirLLVMLinkageExternal = 10,
182+
};
183+
typedef enum MlirLLVMLinkage MlirLLVMLinkage;
184+
185+
/// Creates a LLVM Linkage attribute.
186+
MLIR_CAPI_EXPORTED MlirAttribute
187+
mlirLLVMLinkageAttrGet(MlirContext ctx, MlirLLVMLinkage linkage);
188+
189+
/// Creates a LLVM DINullType attribute.
190+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDINullTypeAttrGet(MlirContext ctx);
191+
192+
/// Creates a LLVM DIExpressionElem attribute.
193+
MLIR_CAPI_EXPORTED MlirAttribute
194+
mlirLLVMDIExpressionElemAttrGet(MlirContext ctx, unsigned int opcode,
195+
intptr_t nArguments, uint64_t const *arguments);
196+
197+
/// Creates a LLVM DIExpression attribute.
198+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIExpressionAttrGet(
199+
MlirContext ctx, intptr_t nOperations, MlirAttribute const *operations);
200+
201+
enum MlirLLVMTypeEncoding {
202+
MlirLLVMTypeEncodingAddress = 0x1,
203+
MlirLLVMTypeEncodingBoolean = 0x2,
204+
MlirLLVMTypeEncodingComplexFloat = 0x31,
205+
MlirLLVMTypeEncodingFloatT = 0x4,
206+
MlirLLVMTypeEncodingSigned = 0x5,
207+
MlirLLVMTypeEncodingSignedChar = 0x6,
208+
MlirLLVMTypeEncodingUnsigned = 0x7,
209+
MlirLLVMTypeEncodingUnsignedChar = 0x08,
210+
MlirLLVMTypeEncodingImaginaryFloat = 0x09,
211+
MlirLLVMTypeEncodingPackedDecimal = 0x0a,
212+
MlirLLVMTypeEncodingNumericString = 0x0b,
213+
MlirLLVMTypeEncodingEdited = 0x0c,
214+
MlirLLVMTypeEncodingSignedFixed = 0x0d,
215+
MlirLLVMTypeEncodingUnsignedFixed = 0x0e,
216+
MlirLLVMTypeEncodingDecimalFloat = 0x0f,
217+
MlirLLVMTypeEncodingUTF = 0x10,
218+
MlirLLVMTypeEncodingUCS = 0x11,
219+
MlirLLVMTypeEncodingASCII = 0x12,
220+
MlirLLVMTypeEncodingLoUser = 0x80,
221+
MlirLLVMTypeEncodingHiUser = 0xff,
222+
};
223+
typedef enum MlirLLVMTypeEncoding MlirLLVMTypeEncoding;
224+
225+
/// Creates a LLVM DIBasicType attribute.
226+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIBasicTypeAttrGet(
227+
MlirContext ctx, unsigned int tag, MlirAttribute name, uint64_t sizeInBits,
228+
MlirLLVMTypeEncoding encoding);
229+
230+
/// Creates a LLVM DICompositeType attribute.
231+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDICompositeTypeAttrGet(
232+
MlirContext ctx, unsigned int tag, MlirAttribute name, MlirAttribute file,
233+
uint32_t line, MlirAttribute scope, MlirAttribute baseType, int64_t flags,
234+
uint64_t sizeInBits, uint64_t alignInBits, intptr_t nElements,
235+
MlirAttribute const *elements);
236+
237+
/// Creates a LLVM DIDerivedType attribute.
238+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIDerivedTypeAttrGet(
239+
MlirContext ctx, unsigned int tag, MlirAttribute name,
240+
MlirAttribute baseType, uint64_t sizeInBits, uint32_t alignInBits,
241+
uint64_t offsetInBits);
242+
243+
/// Gets the base type from a LLVM DIDerivedType attribute.
244+
MLIR_CAPI_EXPORTED MlirAttribute
245+
mlirLLVMDIDerivedTypeAttrGetBaseType(MlirAttribute diDerivedType);
246+
247+
/// Creates a LLVM DIFileAttr attribute.
248+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIFileAttrGet(MlirContext ctx,
249+
MlirAttribute name,
250+
MlirAttribute directory);
251+
252+
enum MlirLLVMDIEmissionKind {
253+
MlirLLVMDIEmissionKindNone = 0,
254+
MlirLLVMDIEmissionKindFull = 1,
255+
MlirLLVMDIEmissionKindLineTablesOnly = 2,
256+
MlirLLVMDIEmissionKindDebugDirectivesOnly = 3,
257+
};
258+
typedef enum MlirLLVMDIEmissionKind MlirLLVMDIEmissionKind;
259+
260+
/// Creates a LLVM DICompileUnit attribute.
261+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDICompileUnitAttrGet(
262+
MlirContext ctx, MlirAttribute id, unsigned int sourceLanguage,
263+
MlirAttribute file, MlirAttribute producer, bool isOptimized,
264+
MlirLLVMDIEmissionKind emissionKind);
265+
266+
/// Creates a LLVM DIFlags attribute.
267+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIFlagsAttrGet(MlirContext ctx,
268+
uint64_t value);
269+
270+
/// Creates a LLVM DILexicalBlock attribute.
271+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDILexicalBlockAttrGet(
272+
MlirContext ctx, MlirAttribute scope, MlirAttribute file, unsigned int line,
273+
unsigned int column);
274+
275+
/// Creates a LLVM DILexicalBlockFile attribute.
276+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDILexicalBlockFileAttrGet(
277+
MlirContext ctx, MlirAttribute scope, MlirAttribute file,
278+
unsigned int discriminator);
279+
280+
/// Creates a LLVM DILocalVariableAttr attribute.
281+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDILocalVariableAttrGet(
282+
MlirContext ctx, MlirAttribute scope, MlirAttribute name,
283+
MlirAttribute diFile, unsigned int line, unsigned int arg,
284+
unsigned int alignInBits, MlirAttribute diType);
285+
286+
/// Creates a LLVM DISubprogramAttr attribute.
287+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDISubprogramAttrGet(
288+
MlirContext ctx, MlirAttribute id, MlirAttribute compileUnit,
289+
MlirAttribute scope, MlirAttribute name, MlirAttribute linkageName,
290+
MlirAttribute file, unsigned int line, unsigned int scopeLine,
291+
uint64_t subprogramFlags, MlirAttribute type);
292+
293+
/// Gets the scope from this DISubprogramAttr.
294+
MLIR_CAPI_EXPORTED MlirAttribute
295+
mlirLLVMDISubprogramAttrGetScope(MlirAttribute diSubprogram);
296+
297+
/// Gets the line from this DISubprogramAttr.
298+
MLIR_CAPI_EXPORTED unsigned int
299+
mlirLLVMDISubprogramAttrGetLine(MlirAttribute diSubprogram);
300+
301+
/// Gets the scope line from this DISubprogram.
302+
MLIR_CAPI_EXPORTED unsigned int
303+
mlirLLVMDISubprogramAttrGetScopeLine(MlirAttribute diSubprogram);
304+
305+
/// Gets the compile unit from this DISubprogram.
306+
MLIR_CAPI_EXPORTED MlirAttribute
307+
mlirLLVMDISubprogramAttrGetCompileUnit(MlirAttribute diSubprogram);
308+
309+
/// Gets the file from this DISubprogramAttr.
310+
MLIR_CAPI_EXPORTED MlirAttribute
311+
mlirLLVMDISubprogramAttrGetFile(MlirAttribute diSubprogram);
312+
313+
/// Gets the type from this DISubprogramAttr.
314+
MLIR_CAPI_EXPORTED MlirAttribute
315+
mlirLLVMDISubprogramAttrGetType(MlirAttribute diSubprogram);
316+
317+
/// Creates a LLVM DISubroutineTypeAttr attribute.
318+
MLIR_CAPI_EXPORTED MlirAttribute
319+
mlirLLVMDISubroutineTypeAttrGet(MlirContext ctx, unsigned int callingConvention,
320+
intptr_t nTypes, MlirAttribute const *types);
321+
322+
/// Creates a LLVM DIModuleAttr attribute.
323+
MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMDIModuleAttrGet(
324+
MlirContext ctx, MlirAttribute file, MlirAttribute scope,
325+
MlirAttribute name, MlirAttribute configMacros, MlirAttribute includePath,
326+
MlirAttribute apinotes, unsigned int line, bool isDecl);
327+
328+
/// Gets the scope of this DIModuleAttr.
329+
MLIR_CAPI_EXPORTED MlirAttribute
330+
mlirLLVMDIModuleAttrGetScope(MlirAttribute diModule);
331+
101332
#ifdef __cplusplus
102333
}
103334
#endif

0 commit comments

Comments
 (0)