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 alien.c-types ;
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
32 { LLVMZExtAttribute BIN: 1 }
33 { LLVMSExtAttribute BIN: 10 }
34 { LLVMNoReturnAttribute BIN: 100 }
35 { LLVMInRegAttribute BIN: 1000 }
36 { LLVMStructRetAttribute BIN: 10000 }
37 { LLVMNoUnwindAttribute BIN: 100000 }
38 { LLVMNoAliasAttribute BIN: 1000000 }
39 { LLVMByValAttribute BIN: 10000000 }
40 { LLVMNestAttribute BIN: 100000000 }
41 { LLVMReadNoneAttribute BIN: 1000000000 }
42 { LLVMReadOnlyAttribute BIN: 10000000000 } ;
69 LLVMExternalWeakLinkage
72 C-ENUM: LLVMVisibility
75 LLVMProtectedVisibility ;
79 { LLVMFastCallConv 8 }
80 { LLVMColdCallConv 9 }
81 { LLVMX86StdcallCallConv 64 }
82 { LLVMX86FastcallCallConv 65 } ;
84 C-ENUM: LLVMIntPredicate
96 C-ENUM: LLVMRealPredicate
97 LLVMRealPredicateFalse
112 LLVMRealPredicateTrue ;
116 TYPEDEF: void* LLVMModuleRef
118 TYPEDEF: void* LLVMPassManagerRef
120 TYPEDEF: void* LLVMModuleProviderRef
122 TYPEDEF: void* LLVMTypeRef
124 TYPEDEF: void* LLVMTypeHandleRef
126 TYPEDEF: void* LLVMValueRef
128 TYPEDEF: void* LLVMBasicBlockRef
130 TYPEDEF: void* LLVMBuilderRef
132 TYPEDEF: void* LLVMMemoryBufferRef
136 FUNCTION: void LLVMDisposeMessage ( c-string Message ) ;
138 FUNCTION: LLVMModuleRef LLVMModuleCreateWithName ( c-string ModuleID ) ;
140 FUNCTION: int LLVMAddTypeName ( LLVMModuleRef M, c-string Name, LLVMTypeRef Ty ) ;
142 FUNCTION: void LLVMDisposeModule ( LLVMModuleRef M ) ;
144 FUNCTION: void LLVMDumpModule ( LLVMModuleRef M ) ;
146 FUNCTION: LLVMModuleProviderRef
147 LLVMCreateModuleProviderForExistingModule ( LLVMModuleRef M ) ;
149 FUNCTION: void LLVMDisposeModuleProvider ( LLVMModuleProviderRef MP ) ;
153 ! LLVM types conform to the following hierarchy:
167 ! See llvm::LLVMTypeKind::getTypeID.
168 FUNCTION: LLVMTypeKind LLVMGetTypeKind ( LLVMTypeRef Ty ) ;
170 ! Operations on integer types
171 FUNCTION: LLVMTypeRef LLVMInt1Type ( ) ;
172 FUNCTION: LLVMTypeRef LLVMInt8Type ( ) ;
173 FUNCTION: LLVMTypeRef LLVMInt16Type ( ) ;
174 FUNCTION: LLVMTypeRef LLVMInt32Type ( ) ;
175 FUNCTION: LLVMTypeRef LLVMInt64Type ( ) ;
176 FUNCTION: LLVMTypeRef LLVMIntType ( unsigned NumBits ) ;
177 FUNCTION: unsigned LLVMGetIntTypeWidth ( LLVMTypeRef IntegerTy ) ;
179 ! Operations on real types
180 FUNCTION: LLVMTypeRef LLVMFloatType ( ) ;
181 FUNCTION: LLVMTypeRef LLVMDoubleType ( ) ;
182 FUNCTION: LLVMTypeRef LLVMX86FP80Type ( ) ;
183 FUNCTION: LLVMTypeRef LLVMFP128Type ( ) ;
184 FUNCTION: LLVMTypeRef LLVMPPCFP128Type ( ) ;
186 ! Operations on function types
187 FUNCTION: LLVMTypeRef
188 LLVMFunctionType ( LLVMTypeRef ReturnType, LLVMTypeRef* ParamTypes, unsigned ParamCount, int IsVarArg ) ;
189 FUNCTION: int LLVMIsFunctionVarArg ( LLVMTypeRef FunctionTy ) ;
190 FUNCTION: LLVMTypeRef LLVMGetReturnType ( LLVMTypeRef FunctionTy ) ;
191 FUNCTION: unsigned LLVMCountParamTypes ( LLVMTypeRef FunctionTy ) ;
192 FUNCTION: void LLVMGetParamTypes ( LLVMTypeRef FunctionTy, LLVMTypeRef* Dest ) ;
194 ! Operations on struct types
195 FUNCTION: LLVMTypeRef
196 LLVMStructType ( LLVMTypeRef* ElementTypes, unsigned ElementCount, int Packed ) ;
197 FUNCTION: unsigned LLVMCountStructElementTypes ( LLVMTypeRef StructTy ) ;
198 FUNCTION: void LLVMGetStructElementTypes ( LLVMTypeRef StructTy, LLVMTypeRef* Dest ) ;
199 FUNCTION: int LLVMIsPackedStruct ( LLVMTypeRef StructTy ) ;
201 ! Operations on array, pointer, and vector types (sequence types)
202 FUNCTION: LLVMTypeRef LLVMArrayType ( LLVMTypeRef ElementType, unsigned ElementCount ) ;
203 FUNCTION: LLVMTypeRef LLVMPointerType ( LLVMTypeRef ElementType, unsigned AddressSpace ) ;
204 FUNCTION: LLVMTypeRef LLVMVectorType ( LLVMTypeRef ElementType, unsigned ElementCount ) ;
206 FUNCTION: LLVMTypeRef LLVMGetElementType ( LLVMTypeRef Ty ) ;
207 FUNCTION: unsigned LLVMGetArrayLength ( LLVMTypeRef ArrayTy ) ;
208 FUNCTION: unsigned LLVMGetPointerAddressSpace ( LLVMTypeRef PointerTy ) ;
209 FUNCTION: unsigned LLVMGetVectorSize ( LLVMTypeRef VectorTy ) ;
211 ! Operations on other types
212 FUNCTION: LLVMTypeRef LLVMVoidType ( ) ;
213 FUNCTION: LLVMTypeRef LLVMLabelType ( ) ;
214 FUNCTION: LLVMTypeRef LLVMOpaqueType ( ) ;
216 ! Operations on type handles
217 FUNCTION: LLVMTypeHandleRef LLVMCreateTypeHandle ( LLVMTypeRef PotentiallyAbstractTy ) ;
218 FUNCTION: void LLVMRefineType ( LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy ) ;
219 FUNCTION: LLVMTypeRef LLVMResolveTypeHandle ( LLVMTypeHandleRef TypeHandle ) ;
220 FUNCTION: void LLVMDisposeTypeHandle ( LLVMTypeHandleRef TypeHandle ) ;
224 FUNCTION: unsigned LLVMCountParams ( LLVMValueRef Fn ) ;
226 FUNCTION: void LLVMGetParams ( LLVMValueRef Fn, LLVMValueRef* Params ) ;
228 FUNCTION: LLVMValueRef
229 LLVMAddFunction ( LLVMModuleRef M, c-string Name, LLVMTypeRef FunctionTy ) ;
231 FUNCTION: LLVMValueRef LLVMGetFirstFunction ( LLVMModuleRef M ) ;
233 FUNCTION: LLVMValueRef LLVMGetNextFunction ( LLVMValueRef Fn ) ;
235 FUNCTION: unsigned LLVMGetFunctionCallConv ( LLVMValueRef Fn ) ;
237 FUNCTION: void LLVMSetFunctionCallConv ( LLVMValueRef Fn, unsigned CC ) ;
239 FUNCTION: LLVMBasicBlockRef
240 LLVMAppendBasicBlock ( LLVMValueRef Fn, c-string Name ) ;
242 FUNCTION: LLVMValueRef LLVMGetBasicBlockParent ( LLVMBasicBlockRef BB ) ;
246 FUNCTION: LLVMTypeRef LLVMTypeOf ( LLVMValueRef Val ) ;
247 FUNCTION: c-string LLVMGetValueName ( LLVMValueRef Val ) ;
248 FUNCTION: void LLVMSetValueName ( LLVMValueRef Val, c-string Name ) ;
249 FUNCTION: void LLVMDumpValue ( LLVMValueRef Val ) ;
251 ! Instruction Builders
253 FUNCTION: LLVMBuilderRef LLVMCreateBuilder ( ) ;
254 FUNCTION: void LLVMPositionBuilder
255 ( LLVMBuilderRef Builder, LLVMBasicBlockRef Block, LLVMValueRef Instr ) ;
256 FUNCTION: void LLVMPositionBuilderBefore
257 ( LLVMBuilderRef Builder, LLVMValueRef Instr ) ;
258 FUNCTION: void LLVMPositionBuilderAtEnd
259 ( LLVMBuilderRef Builder, LLVMBasicBlockRef Block ) ;
260 FUNCTION: LLVMBasicBlockRef LLVMGetInsertBlock
261 ( LLVMBuilderRef Builder ) ;
262 FUNCTION: void LLVMClearInsertionPosition
263 ( LLVMBuilderRef Builder ) ;
264 FUNCTION: void LLVMInsertIntoBuilder
265 ( LLVMBuilderRef Builder, LLVMValueRef Instr ) ;
266 FUNCTION: void LLVMDisposeBuilder
267 ( LLVMBuilderRef Builder ) ;
271 FUNCTION: LLVMValueRef LLVMBuildRetVoid
272 ( LLVMBuilderRef Builder ) ;
273 FUNCTION: LLVMValueRef LLVMBuildRet
274 ( LLVMBuilderRef Builder, LLVMValueRef V ) ;
275 FUNCTION: LLVMValueRef LLVMBuildBr
276 ( LLVMBuilderRef Builder, LLVMBasicBlockRef Dest ) ;
277 FUNCTION: LLVMValueRef LLVMBuildCondBr
278 ( LLVMBuilderRef Builder, LLVMValueRef If, LLVMBasicBlockRef Then, LLVMBasicBlockRef Else ) ;
279 FUNCTION: LLVMValueRef LLVMBuildSwitch
280 ( LLVMBuilderRef Builder, LLVMValueRef V, LLVMBasicBlockRef Else, unsigned NumCases ) ;
281 FUNCTION: LLVMValueRef LLVMBuildInvoke
282 ( LLVMBuilderRef Builder, LLVMValueRef Fn, LLVMValueRef* Args, unsigned NumArgs,
283 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch, c-string Name ) ;
284 FUNCTION: LLVMValueRef LLVMBuildUnwind
285 ( LLVMBuilderRef Builder ) ;
286 FUNCTION: LLVMValueRef LLVMBuildUnreachable
287 ( LLVMBuilderRef Builder ) ;
289 ! IB Add Case to Switch
291 FUNCTION: void LLVMAddCase
292 ( LLVMValueRef Switch, LLVMValueRef OnVal, LLVMBasicBlockRef Dest ) ;
296 FUNCTION: LLVMValueRef LLVMBuildAdd
297 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
298 FUNCTION: LLVMValueRef LLVMBuildSub
299 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
300 FUNCTION: LLVMValueRef LLVMBuildMul
301 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
302 FUNCTION: LLVMValueRef LLVMBuildUDiv
303 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
304 FUNCTION: LLVMValueRef LLVMBuildSDiv
305 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
306 FUNCTION: LLVMValueRef LLVMBuildFDiv
307 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
308 FUNCTION: LLVMValueRef LLVMBuildURem
309 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
310 FUNCTION: LLVMValueRef LLVMBuildSRem
311 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
312 FUNCTION: LLVMValueRef LLVMBuildFRem
313 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
314 FUNCTION: LLVMValueRef LLVMBuildShl
315 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
316 FUNCTION: LLVMValueRef LLVMBuildLShr
317 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
318 FUNCTION: LLVMValueRef LLVMBuildAShr
319 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
320 FUNCTION: LLVMValueRef LLVMBuildAnd
321 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
322 FUNCTION: LLVMValueRef LLVMBuildOr
323 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
324 FUNCTION: LLVMValueRef LLVMBuildXor
325 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
326 FUNCTION: LLVMValueRef LLVMBuildNeg
327 ( LLVMBuilderRef Builder, LLVMValueRef V, c-string Name ) ;
328 FUNCTION: LLVMValueRef LLVMBuildNot
329 ( LLVMBuilderRef Builder, LLVMValueRef V, c-string Name ) ;
333 FUNCTION: LLVMValueRef LLVMBuildMalloc
334 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, c-string Name ) ;
335 FUNCTION: LLVMValueRef LLVMBuildArrayMalloc
336 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, LLVMValueRef Val, c-string Name ) ;
337 FUNCTION: LLVMValueRef LLVMBuildAlloca
338 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, c-string Name ) ;
339 FUNCTION: LLVMValueRef LLVMBuildArrayAlloca
340 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, LLVMValueRef Val, c-string Name ) ;
341 FUNCTION: LLVMValueRef LLVMBuildFree
342 ( LLVMBuilderRef Builder, LLVMValueRef PointerVal ) ;
343 FUNCTION: LLVMValueRef LLVMBuildLoad
344 ( LLVMBuilderRef Builder, LLVMValueRef PointerVal, c-string Name ) ;
345 FUNCTION: LLVMValueRef LLVMBuildStore
346 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMValueRef Ptr ) ;
347 FUNCTION: LLVMValueRef LLVMBuildGEP
348 ( LLVMBuilderRef B, LLVMValueRef Pointer, LLVMValueRef* Indices,
349 unsigned NumIndices, c-string Name ) ;
353 FUNCTION: LLVMValueRef LLVMBuildTrunc
354 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
355 FUNCTION: LLVMValueRef LLVMBuildZExt
356 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
357 FUNCTION: LLVMValueRef LLVMBuildSExt
358 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
359 FUNCTION: LLVMValueRef LLVMBuildFPToUI
360 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
361 FUNCTION: LLVMValueRef LLVMBuildFPToSI
362 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
363 FUNCTION: LLVMValueRef LLVMBuildUIToFP
364 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
365 FUNCTION: LLVMValueRef LLVMBuildSIToFP
366 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
367 FUNCTION: LLVMValueRef LLVMBuildFPTrunc
368 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
369 FUNCTION: LLVMValueRef LLVMBuildFPExt
370 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
371 FUNCTION: LLVMValueRef LLVMBuildPtrToInt
372 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
373 FUNCTION: LLVMValueRef LLVMBuildIntToPtr
374 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
375 FUNCTION: LLVMValueRef LLVMBuildBitCast
376 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
380 FUNCTION: LLVMValueRef LLVMBuildICmp
381 ( LLVMBuilderRef Builder, LLVMIntPredicate Op, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
382 FUNCTION: LLVMValueRef LLVMBuildFCmp
383 ( LLVMBuilderRef Builder, LLVMRealPredicate Op, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
385 ! IB Misc Instructions
387 FUNCTION: LLVMValueRef LLVMBuildPhi
388 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, c-string Name ) ;
389 FUNCTION: LLVMValueRef LLVMBuildCall
390 ( LLVMBuilderRef Builder, LLVMValueRef Fn, LLVMValueRef* Args, unsigned NumArgs, c-string Name ) ;
391 FUNCTION: LLVMValueRef LLVMBuildSelect
392 ( LLVMBuilderRef Builder, LLVMValueRef If, LLVMValueRef Then, LLVMValueRef Else, c-string Name ) ;
393 FUNCTION: LLVMValueRef LLVMBuildVAArg
394 ( LLVMBuilderRef Builder, LLVMValueRef List, LLVMTypeRef Ty, c-string Name ) ;
395 FUNCTION: LLVMValueRef LLVMBuildExtractElement
396 ( LLVMBuilderRef Builder, LLVMValueRef VecVal, LLVMValueRef Index, c-string Name ) ;
397 FUNCTION: LLVMValueRef LLVMBuildInsertElement
398 ( LLVMBuilderRef Builder, LLVMValueRef VecVal, LLVMValueRef EltVal, LLVMValueRef Index, c-string Name ) ;
399 FUNCTION: LLVMValueRef LLVMBuildShuffleVector
400 ( LLVMBuilderRef Builder, LLVMValueRef V1, LLVMValueRef V2, LLVMValueRef Mask, c-string Name ) ;
401 FUNCTION: LLVMValueRef LLVMBuildExtractValue
402 ( LLVMBuilderRef Builder, LLVMValueRef AggVal, unsigned Index, c-string Name ) ;
403 FUNCTION: LLVMValueRef LLVMBuildInsertValue
404 ( LLVMBuilderRef Builder, LLVMValueRef AggVal, LLVMValueRef EltVal, unsigned Index, c-string Name ) ;
406 ! Memory Buffers/Bit Reader
408 FUNCTION: int LLVMCreateMemoryBufferWithContentsOfFile
409 ( c-string Path, LLVMMemoryBufferRef* OutMemBuf, c-string* OutMessage ) ;
411 FUNCTION: void LLVMDisposeMemoryBuffer ( LLVMMemoryBufferRef MemBuf ) ;
413 LIBRARY: LLVMBitReader
415 FUNCTION: int LLVMParseBitcode
416 ( LLVMMemoryBufferRef MemBuf, LLVMModuleRef* OutModule, c-string* OutMessage ) ;
418 FUNCTION: int LLVMGetBitcodeModuleProvider
419 ( LLVMMemoryBufferRef MemBuf, LLVMModuleProviderRef* OutMP, c-string* OutMessage ) ;