1 ! Copyright (C) 2009 Matthew Willis.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien.libraries alien.syntax system sequences combinators kernel ;
9 : add-llvm-library ( name -- )
12 { [ os macosx? ] [ "/usr/local/lib/lib" ".dylib" surround ] }
13 { [ os windows? ] [ ".dll" append ] }
14 { [ os unix? ] [ "lib" ".so" surround ] }
15 } cond "cdecl" add-library ;
17 "LLVMSystem" add-llvm-library
18 "LLVMSupport" add-llvm-library
19 "LLVMCore" add-llvm-library
20 "LLVMBitReader" add-llvm-library
28 TYPEDEF: uint unsigned
29 TYPEDEF: unsigned enum
31 CONSTANT: LLVMZExtAttribute BIN: 1
32 CONSTANT: LLVMSExtAttribute BIN: 10
33 CONSTANT: LLVMNoReturnAttribute BIN: 100
34 CONSTANT: LLVMInRegAttribute BIN: 1000
35 CONSTANT: LLVMStructRetAttribute BIN: 10000
36 CONSTANT: LLVMNoUnwindAttribute BIN: 100000
37 CONSTANT: LLVMNoAliasAttribute BIN: 1000000
38 CONSTANT: LLVMByValAttribute BIN: 10000000
39 CONSTANT: LLVMNestAttribute BIN: 100000000
40 CONSTANT: LLVMReadNoneAttribute BIN: 1000000000
41 CONSTANT: LLVMReadOnlyAttribute BIN: 10000000000
42 TYPEDEF: enum LLVMAttribute;
60 TYPEDEF: enum LLVMTypeKind
70 LLVMExternalWeakLinkage
72 TYPEDEF: enum LLVMLinkage
77 LLVMProtectedVisibility ;
78 TYPEDEF: enum LLVMVisibility
80 CONSTANT: LLVMCCallConv 0
81 CONSTANT: LLVMFastCallConv 8
82 CONSTANT: LLVMColdCallConv 9
83 CONSTANT: LLVMX86StdcallCallConv 64
84 CONSTANT: LLVMX86FastcallCallConv 65
85 TYPEDEF: enum LLVMCallConv
87 CONSTANT: LLVMIntEQ 32
88 CONSTANT: LLVMIntNE 33
89 CONSTANT: LLVMIntUGT 34
90 CONSTANT: LLVMIntUGE 35
91 CONSTANT: LLVMIntULT 36
92 CONSTANT: LLVMIntULE 37
93 CONSTANT: LLVMIntSGT 38
94 CONSTANT: LLVMIntSGE 39
95 CONSTANT: LLVMIntSLT 40
96 CONSTANT: LLVMIntSLE 41
97 TYPEDEF: enum LLVMIntPredicate
100 LLVMRealPredicateFalse
115 LLVMRealPredicateTrue ;
116 TYPEDEF: enum LLVMRealPredicate
120 TYPEDEF: void* LLVMModuleRef
122 TYPEDEF: void* LLVMPassManagerRef
124 TYPEDEF: void* LLVMModuleProviderRef
126 TYPEDEF: void* LLVMTypeRef
128 TYPEDEF: void* LLVMTypeHandleRef
130 TYPEDEF: void* LLVMValueRef
132 TYPEDEF: void* LLVMBasicBlockRef
134 TYPEDEF: void* LLVMBuilderRef
136 TYPEDEF: void* LLVMMemoryBufferRef
140 FUNCTION: void LLVMDisposeMessage ( char* Message ) ;
142 FUNCTION: LLVMModuleRef LLVMModuleCreateWithName ( char* ModuleID ) ;
144 FUNCTION: int LLVMAddTypeName ( LLVMModuleRef M, char* Name, LLVMTypeRef Ty ) ;
146 FUNCTION: void LLVMDisposeModule ( LLVMModuleRef M ) ;
148 FUNCTION: void LLVMDumpModule ( LLVMModuleRef M ) ;
150 FUNCTION: LLVMModuleProviderRef
151 LLVMCreateModuleProviderForExistingModule ( LLVMModuleRef M ) ;
153 FUNCTION: void LLVMDisposeModuleProvider ( LLVMModuleProviderRef MP ) ;
157 ! LLVM types conform to the following hierarchy:
171 ! See llvm::LLVMTypeKind::getTypeID.
172 FUNCTION: LLVMTypeKind LLVMGetTypeKind ( LLVMTypeRef Ty ) ;
174 ! Operations on integer types
175 FUNCTION: LLVMTypeRef LLVMInt1Type ( ) ;
176 FUNCTION: LLVMTypeRef LLVMInt8Type ( ) ;
177 FUNCTION: LLVMTypeRef LLVMInt16Type ( ) ;
178 FUNCTION: LLVMTypeRef LLVMInt32Type ( ) ;
179 FUNCTION: LLVMTypeRef LLVMInt64Type ( ) ;
180 FUNCTION: LLVMTypeRef LLVMIntType ( unsigned NumBits ) ;
181 FUNCTION: unsigned LLVMGetIntTypeWidth ( LLVMTypeRef IntegerTy ) ;
183 ! Operations on real types
184 FUNCTION: LLVMTypeRef LLVMFloatType ( ) ;
185 FUNCTION: LLVMTypeRef LLVMDoubleType ( ) ;
186 FUNCTION: LLVMTypeRef LLVMX86FP80Type ( ) ;
187 FUNCTION: LLVMTypeRef LLVMFP128Type ( ) ;
188 FUNCTION: LLVMTypeRef LLVMPPCFP128Type ( ) ;
190 ! Operations on function types
191 FUNCTION: LLVMTypeRef
192 LLVMFunctionType ( LLVMTypeRef ReturnType, LLVMTypeRef* ParamTypes, unsigned ParamCount, int IsVarArg ) ;
193 FUNCTION: int LLVMIsFunctionVarArg ( LLVMTypeRef FunctionTy ) ;
194 FUNCTION: LLVMTypeRef LLVMGetReturnType ( LLVMTypeRef FunctionTy ) ;
195 FUNCTION: unsigned LLVMCountParamTypes ( LLVMTypeRef FunctionTy ) ;
196 FUNCTION: void LLVMGetParamTypes ( LLVMTypeRef FunctionTy, LLVMTypeRef* Dest ) ;
198 ! Operations on struct types
199 FUNCTION: LLVMTypeRef
200 LLVMStructType ( LLVMTypeRef* ElementTypes, unsigned ElementCount, int Packed ) ;
201 FUNCTION: unsigned LLVMCountStructElementTypes ( LLVMTypeRef StructTy ) ;
202 FUNCTION: void LLVMGetStructElementTypes ( LLVMTypeRef StructTy, LLVMTypeRef* Dest ) ;
203 FUNCTION: int LLVMIsPackedStruct ( LLVMTypeRef StructTy ) ;
205 ! Operations on array, pointer, and vector types (sequence types)
206 FUNCTION: LLVMTypeRef LLVMArrayType ( LLVMTypeRef ElementType, unsigned ElementCount ) ;
207 FUNCTION: LLVMTypeRef LLVMPointerType ( LLVMTypeRef ElementType, unsigned AddressSpace ) ;
208 FUNCTION: LLVMTypeRef LLVMVectorType ( LLVMTypeRef ElementType, unsigned ElementCount ) ;
210 FUNCTION: LLVMTypeRef LLVMGetElementType ( LLVMTypeRef Ty ) ;
211 FUNCTION: unsigned LLVMGetArrayLength ( LLVMTypeRef ArrayTy ) ;
212 FUNCTION: unsigned LLVMGetPointerAddressSpace ( LLVMTypeRef PointerTy ) ;
213 FUNCTION: unsigned LLVMGetVectorSize ( LLVMTypeRef VectorTy ) ;
215 ! Operations on other types
216 FUNCTION: LLVMTypeRef LLVMVoidType ( ) ;
217 FUNCTION: LLVMTypeRef LLVMLabelType ( ) ;
218 FUNCTION: LLVMTypeRef LLVMOpaqueType ( ) ;
220 ! Operations on type handles
221 FUNCTION: LLVMTypeHandleRef LLVMCreateTypeHandle ( LLVMTypeRef PotentiallyAbstractTy ) ;
222 FUNCTION: void LLVMRefineType ( LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy ) ;
223 FUNCTION: LLVMTypeRef LLVMResolveTypeHandle ( LLVMTypeHandleRef TypeHandle ) ;
224 FUNCTION: void LLVMDisposeTypeHandle ( LLVMTypeHandleRef TypeHandle ) ;
228 FUNCTION: unsigned LLVMCountParams ( LLVMValueRef Fn ) ;
230 FUNCTION: void LLVMGetParams ( LLVMValueRef Fn, LLVMValueRef* Params ) ;
232 FUNCTION: LLVMValueRef
233 LLVMAddFunction ( LLVMModuleRef M, char* Name, LLVMTypeRef FunctionTy ) ;
235 FUNCTION: LLVMValueRef LLVMGetFirstFunction ( LLVMModuleRef M ) ;
237 FUNCTION: LLVMValueRef LLVMGetNextFunction ( LLVMValueRef Fn ) ;
239 FUNCTION: unsigned LLVMGetFunctionCallConv ( LLVMValueRef Fn ) ;
241 FUNCTION: void LLVMSetFunctionCallConv ( LLVMValueRef Fn, unsigned CC ) ;
243 FUNCTION: LLVMBasicBlockRef
244 LLVMAppendBasicBlock ( LLVMValueRef Fn, char* Name ) ;
246 FUNCTION: LLVMValueRef LLVMGetBasicBlockParent ( LLVMBasicBlockRef BB ) ;
250 FUNCTION: LLVMTypeRef LLVMTypeOf ( LLVMValueRef Val ) ;
251 FUNCTION: char* LLVMGetValueName ( LLVMValueRef Val ) ;
252 FUNCTION: void LLVMSetValueName ( LLVMValueRef Val, char* Name ) ;
253 FUNCTION: void LLVMDumpValue ( LLVMValueRef Val ) ;
255 ! Instruction Builders
257 FUNCTION: LLVMBuilderRef LLVMCreateBuilder ( ) ;
258 FUNCTION: void LLVMPositionBuilder
259 ( LLVMBuilderRef Builder, LLVMBasicBlockRef Block, LLVMValueRef Instr ) ;
260 FUNCTION: void LLVMPositionBuilderBefore
261 ( LLVMBuilderRef Builder, LLVMValueRef Instr ) ;
262 FUNCTION: void LLVMPositionBuilderAtEnd
263 ( LLVMBuilderRef Builder, LLVMBasicBlockRef Block ) ;
264 FUNCTION: LLVMBasicBlockRef LLVMGetInsertBlock
265 ( LLVMBuilderRef Builder ) ;
266 FUNCTION: void LLVMClearInsertionPosition
267 ( LLVMBuilderRef Builder ) ;
268 FUNCTION: void LLVMInsertIntoBuilder
269 ( LLVMBuilderRef Builder, LLVMValueRef Instr ) ;
270 FUNCTION: void LLVMDisposeBuilder
271 ( LLVMBuilderRef Builder ) ;
275 FUNCTION: LLVMValueRef LLVMBuildRetVoid
276 ( LLVMBuilderRef Builder ) ;
277 FUNCTION: LLVMValueRef LLVMBuildRet
278 ( LLVMBuilderRef Builder, LLVMValueRef V ) ;
279 FUNCTION: LLVMValueRef LLVMBuildBr
280 ( LLVMBuilderRef Builder, LLVMBasicBlockRef Dest ) ;
281 FUNCTION: LLVMValueRef LLVMBuildCondBr
282 ( LLVMBuilderRef Builder, LLVMValueRef If, LLVMBasicBlockRef Then, LLVMBasicBlockRef Else ) ;
283 FUNCTION: LLVMValueRef LLVMBuildSwitch
284 ( LLVMBuilderRef Builder, LLVMValueRef V, LLVMBasicBlockRef Else, unsigned NumCases ) ;
285 FUNCTION: LLVMValueRef LLVMBuildInvoke
286 ( LLVMBuilderRef Builder, LLVMValueRef Fn, LLVMValueRef* Args, unsigned NumArgs,
287 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch, char* Name ) ;
288 FUNCTION: LLVMValueRef LLVMBuildUnwind
289 ( LLVMBuilderRef Builder ) ;
290 FUNCTION: LLVMValueRef LLVMBuildUnreachable
291 ( LLVMBuilderRef Builder ) ;
293 ! IB Add Case to Switch
295 FUNCTION: void LLVMAddCase
296 ( LLVMValueRef Switch, LLVMValueRef OnVal, LLVMBasicBlockRef Dest ) ;
300 FUNCTION: LLVMValueRef LLVMBuildAdd
301 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
302 FUNCTION: LLVMValueRef LLVMBuildSub
303 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
304 FUNCTION: LLVMValueRef LLVMBuildMul
305 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
306 FUNCTION: LLVMValueRef LLVMBuildUDiv
307 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
308 FUNCTION: LLVMValueRef LLVMBuildSDiv
309 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
310 FUNCTION: LLVMValueRef LLVMBuildFDiv
311 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
312 FUNCTION: LLVMValueRef LLVMBuildURem
313 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
314 FUNCTION: LLVMValueRef LLVMBuildSRem
315 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
316 FUNCTION: LLVMValueRef LLVMBuildFRem
317 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
318 FUNCTION: LLVMValueRef LLVMBuildShl
319 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
320 FUNCTION: LLVMValueRef LLVMBuildLShr
321 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
322 FUNCTION: LLVMValueRef LLVMBuildAShr
323 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
324 FUNCTION: LLVMValueRef LLVMBuildAnd
325 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
326 FUNCTION: LLVMValueRef LLVMBuildOr
327 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
328 FUNCTION: LLVMValueRef LLVMBuildXor
329 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
330 FUNCTION: LLVMValueRef LLVMBuildNeg
331 ( LLVMBuilderRef Builder, LLVMValueRef V, char* Name ) ;
332 FUNCTION: LLVMValueRef LLVMBuildNot
333 ( LLVMBuilderRef Builder, LLVMValueRef V, char* Name ) ;
337 FUNCTION: LLVMValueRef LLVMBuildMalloc
338 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, char* Name ) ;
339 FUNCTION: LLVMValueRef LLVMBuildArrayMalloc
340 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, LLVMValueRef Val, char* Name ) ;
341 FUNCTION: LLVMValueRef LLVMBuildAlloca
342 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, char* Name ) ;
343 FUNCTION: LLVMValueRef LLVMBuildArrayAlloca
344 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, LLVMValueRef Val, char* Name ) ;
345 FUNCTION: LLVMValueRef LLVMBuildFree
346 ( LLVMBuilderRef Builder, LLVMValueRef PointerVal ) ;
347 FUNCTION: LLVMValueRef LLVMBuildLoad
348 ( LLVMBuilderRef Builder, LLVMValueRef PointerVal, char* Name ) ;
349 FUNCTION: LLVMValueRef LLVMBuildStore
350 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMValueRef Ptr ) ;
351 FUNCTION: LLVMValueRef LLVMBuildGEP
352 ( LLVMBuilderRef B, LLVMValueRef Pointer, LLVMValueRef* Indices,
353 unsigned NumIndices, char* Name ) ;
357 FUNCTION: LLVMValueRef LLVMBuildTrunc
358 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
359 FUNCTION: LLVMValueRef LLVMBuildZExt
360 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
361 FUNCTION: LLVMValueRef LLVMBuildSExt
362 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
363 FUNCTION: LLVMValueRef LLVMBuildFPToUI
364 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
365 FUNCTION: LLVMValueRef LLVMBuildFPToSI
366 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
367 FUNCTION: LLVMValueRef LLVMBuildUIToFP
368 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
369 FUNCTION: LLVMValueRef LLVMBuildSIToFP
370 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
371 FUNCTION: LLVMValueRef LLVMBuildFPTrunc
372 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
373 FUNCTION: LLVMValueRef LLVMBuildFPExt
374 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
375 FUNCTION: LLVMValueRef LLVMBuildPtrToInt
376 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
377 FUNCTION: LLVMValueRef LLVMBuildIntToPtr
378 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
379 FUNCTION: LLVMValueRef LLVMBuildBitCast
380 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
384 FUNCTION: LLVMValueRef LLVMBuildICmp
385 ( LLVMBuilderRef Builder, LLVMIntPredicate Op, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
386 FUNCTION: LLVMValueRef LLVMBuildFCmp
387 ( LLVMBuilderRef Builder, LLVMRealPredicate Op, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
389 ! IB Misc Instructions
391 FUNCTION: LLVMValueRef LLVMBuildPhi
392 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, char* Name ) ;
393 FUNCTION: LLVMValueRef LLVMBuildCall
394 ( LLVMBuilderRef Builder, LLVMValueRef Fn, LLVMValueRef* Args, unsigned NumArgs, char* Name ) ;
395 FUNCTION: LLVMValueRef LLVMBuildSelect
396 ( LLVMBuilderRef Builder, LLVMValueRef If, LLVMValueRef Then, LLVMValueRef Else, char* Name ) ;
397 FUNCTION: LLVMValueRef LLVMBuildVAArg
398 ( LLVMBuilderRef Builder, LLVMValueRef List, LLVMTypeRef Ty, char* Name ) ;
399 FUNCTION: LLVMValueRef LLVMBuildExtractElement
400 ( LLVMBuilderRef Builder, LLVMValueRef VecVal, LLVMValueRef Index, char* Name ) ;
401 FUNCTION: LLVMValueRef LLVMBuildInsertElement
402 ( LLVMBuilderRef Builder, LLVMValueRef VecVal, LLVMValueRef EltVal, LLVMValueRef Index, char* Name ) ;
403 FUNCTION: LLVMValueRef LLVMBuildShuffleVector
404 ( LLVMBuilderRef Builder, LLVMValueRef V1, LLVMValueRef V2, LLVMValueRef Mask, char* Name ) ;
405 FUNCTION: LLVMValueRef LLVMBuildExtractValue
406 ( LLVMBuilderRef Builder, LLVMValueRef AggVal, unsigned Index, char* Name ) ;
407 FUNCTION: LLVMValueRef LLVMBuildInsertValue
408 ( LLVMBuilderRef Builder, LLVMValueRef AggVal, LLVMValueRef EltVal, unsigned Index, char* Name ) ;
410 ! Memory Buffers/Bit Reader
412 FUNCTION: int LLVMCreateMemoryBufferWithContentsOfFile
413 ( char* Path, LLVMMemoryBufferRef* OutMemBuf, char** OutMessage ) ;
415 FUNCTION: void LLVMDisposeMemoryBuffer ( LLVMMemoryBufferRef MemBuf ) ;
417 LIBRARY: LLVMBitReader
419 FUNCTION: int LLVMParseBitcode
420 ( LLVMMemoryBufferRef MemBuf, LLVMModuleRef* OutModule, char** OutMessage ) ;
422 FUNCTION: int LLVMGetBitcodeModuleProvider
423 ( LLVMMemoryBufferRef MemBuf, LLVMModuleProviderRef* OutMP, char** OutMessage ) ;