-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathllvm.jou
456 lines (432 loc) · 13.3 KB
/
llvm.jou
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
if WINDOWS:
# Please keep in sync with windows_setup.sh
link "../libs/libLLVMCore.a"
link "../libs/libLLVMX86CodeGen.a"
link "../libs/libLLVMAnalysis.a"
link "../libs/libLLVMTarget.a"
link "../libs/libLLVMPasses.a"
link "../libs/libLLVMSupport.a"
link "../libs/libLLVMLinker.a"
link "../libs/libLTO.a"
link "../libs/libLLVMX86AsmParser.a"
link "../libs/libLLVMX86Info.a"
link "../libs/libLLVMX86Desc.a"
else:
# Linker commands are defined in config.jou, which is auto-generated.
pass
@public
class LLVMModule:
pass
@public
class LLVMType:
pass
@public
class LLVMValue:
pass
@public
class LLVMBasicBlock:
pass
@public
class LLVMBuilder:
pass
@public
class LLVMPassManager:
pass
@public
class LLVMTarget:
pass
@public
class LLVMTargetData:
pass
@public
class LLVMTargetMachine:
pass
@public
class LLVMPassBuilderOptions:
pass
@public
class LLVMError:
pass
# =========== Target.h ===========
@public
declare LLVMInitializeX86TargetInfo() -> None
@public
declare LLVMInitializeX86Target() -> None
@public
declare LLVMInitializeX86TargetMC() -> None
@public
declare LLVMInitializeX86AsmPrinter() -> None
@public
declare LLVMInitializeX86AsmParser() -> None
@public
declare LLVMInitializeX86Disassembler() -> None
@public
declare LLVMInitializeAArch64TargetInfo() -> None
@public
declare LLVMInitializeAArch64Target() -> None
@public
declare LLVMInitializeAArch64TargetMC() -> None
@public
declare LLVMInitializeAArch64AsmPrinter() -> None
@public
declare LLVMInitializeAArch64AsmParser() -> None
@public
declare LLVMInitializeAArch64Disassembler() -> None
@public
declare LLVMDisposeTargetData(TD: LLVMTargetData*) -> None
@public
declare LLVMCopyStringRepOfTargetData(TD: LLVMTargetData*) -> byte*
@public
declare LLVMStoreSizeOfType(TD: LLVMTargetData*, Ty: LLVMType*) -> long
@public
declare LLVMABISizeOfType(TD: LLVMTargetData*, Ty: LLVMType*) -> long
# =========== TargetMachine.h ===========
@public
enum LLVMCodeGenOptLevel:
none # can't make it None because that is a keyword
Less
Default
Aggressive
@public
enum LLVMRelocMode:
Default
Static
PIC
DynamicNoPic
ROPI
RWPI
ROPI_RWPI
@public
enum LLVMCodeModel:
Default
JITDefault
Tiny
Small
Kernel
Medium
Large
@public
enum LLVMCodeGenFileType:
AssemblyFile
ObjectFile
@public
declare LLVMCreateTargetMachine(T: LLVMTarget*, Triple: byte*, CPU: byte*, Features: byte*, Level: LLVMCodeGenOptLevel, Reloc: LLVMRelocMode, CodeModel: LLVMCodeModel) -> LLVMTargetMachine*
@public
declare LLVMDisposeTargetMachine(T: LLVMTargetMachine*) -> None
@public
declare LLVMCreateTargetDataLayout(T: LLVMTargetMachine*) -> LLVMTargetData*
@public
declare LLVMTargetMachineEmitToFile(T: LLVMTargetMachine*, M: LLVMModule*, Filename: byte*, codegen: LLVMCodeGenFileType, ErrorMessage: byte**) -> int
@public
declare LLVMGetTargetFromTriple(Triple: byte*, T: LLVMTarget**, ErrorMessage: byte**) -> int
@public
declare LLVMGetDefaultTargetTriple() -> byte*
# =========== Linker.h ===========
@public
declare LLVMLinkModules2(Dest: LLVMModule*, Src: LLVMModule*) -> int
# =========== Analysis.h ===========
@public
enum LLVMVerifierFailureAction:
AbortProcess
PrintMessage
ReturnStatus
@public
declare LLVMVerifyModule(M: LLVMModule*, Action: LLVMVerifierFailureAction, OutMessage: byte**) -> int
# =========== Core.h ===========
@public
enum LLVMTypeKind:
Void
Half
Float
Double
X86_FP80
FP128
PPC_FP128
Label
Integer
Function
Struct
Array
Pointer
Vector
Metadata
X86_MMX
Token
ScalableVector
BFloat
@public
enum LLVMLinkage:
External
AvailableExternally
LinkOnceAny
LinkOnceODR
Obsolete1
WeakAny
WeakODR
Appending
Internal
Private
Obsolete2
Obsolete3
ExternalWeak
Obsolete4
Common
LinkerPrivate
LinkerPrivateWeak
@public
enum LLVMIntPredicate:
# TODO: a better way to start the enum at 32
Dummy0
Dummy1
Dummy2
Dummy3
Dummy4
Dummy5
Dummy6
Dummy7
Dummy8
Dummy9
Dummy10
Dummy11
Dummy12
Dummy13
Dummy14
Dummy15
Dummy16
Dummy17
Dummy18
Dummy19
Dummy20
Dummy21
Dummy22
Dummy23
Dummy24
Dummy25
Dummy26
Dummy27
Dummy28
Dummy29
Dummy30
Dummy31
EQ
NE
UGT
UGE
ULT
ULE
SGT
SGE
SLT
SLE
@public
enum LLVMRealPredicate:
AlwaysFalse
OEQ
OGT
OGE
OLT
OLE
ONE
ORD
UNO
UEQ
UGT
UGE
ULT
ULE
UNE
AlwaysTrue
@public
declare LLVMVoidType() -> LLVMType*
@public
declare LLVMFloatType() -> LLVMType*
@public
declare LLVMDoubleType() -> LLVMType*
@public
declare LLVMFunctionType(ReturnType: LLVMType*, ParamTypes: LLVMType**, ParamCount: int, IsVarArg: int) -> LLVMType*
@public
declare LLVMStructType(ElementTypes: LLVMType**, ElementCount: int, Packed: int) -> LLVMType*
@public
declare LLVMArrayType(ElementType: LLVMType*, ElementCount: int) -> LLVMType*
@public
declare LLVMPointerType(ElementType: LLVMType*, AddressSpace: int) -> LLVMType*
@public
declare LLVMDisposeMessage(Message: byte*) -> None
@public
declare LLVMModuleCreateWithName(ModuleID: byte*) -> LLVMModule*
@public
declare LLVMDisposeModule(M: LLVMModule*) -> None
@public
declare LLVMGetSourceFileName(M: LLVMModule*, Len: long*) -> byte* # Return value not owned
@public
declare LLVMSetDataLayout(M: LLVMModule*, DataLayoutStr: byte*) -> None
@public
declare LLVMSetTarget(M: LLVMModule*, Triple: byte*) -> None
@public
declare LLVMDumpModule(M: LLVMModule*) -> None
@public
declare LLVMPrintModuleToString(M: LLVMModule*) -> byte*
@public
declare LLVMAddFunction(M: LLVMModule*, Name: byte*, FunctionTy: LLVMType*) -> LLVMValue*
@public
declare LLVMGetNamedFunction(M: LLVMModule*, Name: byte*) -> LLVMValue*
@public
declare LLVMGetTypeKind(Ty: LLVMType*) -> LLVMTypeKind
@public
declare LLVMInt1Type() -> LLVMType*
@public
declare LLVMInt8Type() -> LLVMType*
@public
declare LLVMInt16Type() -> LLVMType*
@public
declare LLVMInt32Type() -> LLVMType*
@public
declare LLVMInt64Type() -> LLVMType*
@public
declare LLVMIntType(NumBits: int) -> LLVMType*
@public
declare LLVMGetReturnType(FunctionTy: LLVMType*) -> LLVMType*
@public
declare LLVMGetParam(Fn: LLVMValue*, Index: int) -> LLVMValue*
@public
declare LLVMGetElementType(Ty: LLVMType*) -> LLVMType*
@public
declare LLVMTypeOf(Val: LLVMValue*) -> LLVMType*
@public
declare LLVMConstNull(Ty: LLVMType*) -> LLVMValue*
@public
declare LLVMGetUndef(Ty: LLVMType*) -> LLVMValue*
@public
declare LLVMConstInt(IntTy: LLVMType*, N: long, SignExtend: int) -> LLVMValue*
@public
declare LLVMConstRealOfString(RealTy: LLVMType*, Text: byte*) -> LLVMValue*
@public
declare LLVMConstString(Str: byte*, Length: int, DontNullTerminate: int) -> LLVMValue*
@public
declare LLVMSizeOf(Ty: LLVMType*) -> LLVMValue*
@public
declare LLVMSetLinkage(Global: LLVMValue*, Linkage: LLVMLinkage) -> None
@public
declare LLVMAddGlobal(M: LLVMModule*, Ty: LLVMType*, Name: byte*) -> LLVMValue*
@public
declare LLVMGetNamedGlobal(M: LLVMModule*, Name: byte*) -> LLVMValue*
@public
declare LLVMSetInitializer(GlobalVar: LLVMValue*, ConstantVal: LLVMValue*) -> None
@public
declare LLVMAppendBasicBlock(Fn: LLVMValue*, Name: byte*) -> LLVMBasicBlock*
@public
declare LLVMAddIncoming(PhiNode: LLVMValue*, IncomingValues: LLVMValue**, IncomingBlocks: LLVMBasicBlock**, Count: int) -> None
@public
declare LLVMCreateBuilder() -> LLVMBuilder*
@public
declare LLVMPositionBuilderAtEnd(Builder: LLVMBuilder*, Block: LLVMBasicBlock*) -> None
@public
declare LLVMGetInsertBlock(Builder: LLVMBuilder*) -> LLVMBasicBlock*
@public
declare LLVMDisposeBuilder(Builder: LLVMBuilder*) -> None
@public
declare LLVMBuildRet(Builder: LLVMBuilder*, V: LLVMValue*) -> LLVMValue*
@public
declare LLVMBuildRetVoid(Builder: LLVMBuilder*) -> LLVMValue*
@public
declare LLVMBuildBr(Builder: LLVMBuilder*, Dest: LLVMBasicBlock*) -> LLVMValue*
@public
declare LLVMBuildCondBr(Builder: LLVMBuilder*, If: LLVMValue*, Then: LLVMBasicBlock*, Else: LLVMBasicBlock*) -> LLVMValue*
@public
declare LLVMBuildUnreachable(Builder: LLVMBuilder*) -> LLVMValue*
@public
declare LLVMBuildAdd(Builder: LLVMBuilder*, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildFAdd(Builder: LLVMBuilder*, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildSub(Builder: LLVMBuilder*, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildFSub(Builder: LLVMBuilder*, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildMul(Builder: LLVMBuilder*, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildFMul(Builder: LLVMBuilder*, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildUDiv(Builder: LLVMBuilder*, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildExactSDiv(Builder: LLVMBuilder*, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildFDiv(Builder: LLVMBuilder*, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildURem(Builder: LLVMBuilder*, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildSRem(Builder: LLVMBuilder*, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildFRem(Builder: LLVMBuilder*, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildXor(Builder: LLVMBuilder*, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildNeg(Builder: LLVMBuilder*, V: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildFNeg(Builder: LLVMBuilder*, V: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildMemSet(Builder: LLVMBuilder*, Ptr: LLVMValue*, Val: LLVMValue*, Len: LLVMValue*, Align: int) -> LLVMValue*
@public
declare LLVMBuildAlloca(Builder: LLVMBuilder*, Ty: LLVMType*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildLoad2(Builder: LLVMBuilder*, Ty: LLVMType*, PointerVal: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildStore(Builder: LLVMBuilder*, Val: LLVMValue*, Ptr: LLVMValue*) -> LLVMValue*
@public
declare LLVMBuildGEP2(Builder: LLVMBuilder*, Ty: LLVMType*, Pointer: LLVMValue*, Indices: LLVMValue**, NumIndices: int, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildStructGEP2(Builder: LLVMBuilder*, Ty: LLVMType*, Pointer: LLVMValue*, Idx: int, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildTrunc(Builder: LLVMBuilder*, Val: LLVMValue*, DestTy: LLVMType*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildZExt(Builder: LLVMBuilder*, Val: LLVMValue*, DestTy: LLVMType*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildSExt(Builder: LLVMBuilder*, Val: LLVMValue*, DestTy: LLVMType*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildFPToUI(Builder: LLVMBuilder*, Val: LLVMValue*, DestTy: LLVMType*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildFPToSI(Builder: LLVMBuilder*, Val: LLVMValue*, DestTy: LLVMType*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildUIToFP(Builder: LLVMBuilder*, Val: LLVMValue*, DestTy: LLVMType*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildSIToFP(Builder: LLVMBuilder*, Val: LLVMValue*, DestTy: LLVMType*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildPtrToInt(Builder: LLVMBuilder*, Val: LLVMValue*, DestTy: LLVMType*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildIntToPtr(Builder: LLVMBuilder*, Val: LLVMValue*, DestTy: LLVMType*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildBitCast(Builder: LLVMBuilder*, Val: LLVMValue*, DestTy: LLVMType*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildIntCast2(Builder: LLVMBuilder*, Val: LLVMValue*, DestTy: LLVMType*, IsSigned: int, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildFPCast(Builder: LLVMBuilder*, Val: LLVMValue*, DestTy: LLVMType*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildICmp(Builder: LLVMBuilder*, Op: LLVMIntPredicate, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildFCmp(Builder: LLVMBuilder*, Op: LLVMRealPredicate, LHS: LLVMValue*, RHS: LLVMValue*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildPhi(Builder: LLVMBuilder*, Ty: LLVMType*, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildCall2(Builder: LLVMBuilder*, FunctionTy: LLVMType*, Fn: LLVMValue*, Args: LLVMValue**, NumArgs: int, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildExtractValue(Builder: LLVMBuilder*, AggVal: LLVMValue*, Index: int, Name: byte*) -> LLVMValue*
@public
declare LLVMBuildInsertValue(Builder: LLVMBuilder*, AggVal: LLVMValue*, EltVal: LLVMValue*, Index: int, Name: byte*) -> LLVMValue*
@public
declare LLVMCreatePassManager() -> LLVMPassManager*
@public
declare LLVMRunPassManager(PM: LLVMPassManager*, M: LLVMModule*) -> int
@public
declare LLVMDisposePassManager(PM: LLVMPassManager*) -> None
# =========== Transforms/PassBuilder.h ===========
@public
declare LLVMCreatePassBuilderOptions() -> LLVMPassBuilderOptions*
@public
declare LLVMDisposePassBuilderOptions(Options: LLVMPassBuilderOptions*) -> None
@public
declare LLVMRunPasses(M: LLVMModule*, Passes: byte*, TM: LLVMTargetMachine*, Options: LLVMPassBuilderOptions*) -> LLVMError*
# =========== Error.h ===========
@public
declare LLVMGetErrorMessage(Err: LLVMError*) -> byte*
@public
declare LLVMDisposeErrorMessage(ErrMsg: byte*) -> None