1 ! Copyright (C) 2009 Matthew Willis.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien.libraries alien.syntax ;
9 "LLVMSystem" "/usr/local/lib/libLLVMSystem.dylib" "cdecl" add-library
11 "LLVMSupport" "/usr/local/lib/libLLVMSupport.dylib" "cdecl" add-library
13 "LLVMCore" "/usr/local/lib/libLLVMCore.dylib" "cdecl" add-library
15 "LLVMBitReader" "/usr/local/lib/libLLVMBitReader.dylib" "cdecl" add-library
23 TYPEDEF: uint unsigned
24 TYPEDEF: unsigned enum
26 CONSTANT: LLVMZExtAttribute BIN: 1
27 CONSTANT: LLVMSExtAttribute BIN: 10
28 CONSTANT: LLVMNoReturnAttribute BIN: 100
29 CONSTANT: LLVMInRegAttribute BIN: 1000
30 CONSTANT: LLVMStructRetAttribute BIN: 10000
31 CONSTANT: LLVMNoUnwindAttribute BIN: 100000
32 CONSTANT: LLVMNoAliasAttribute BIN: 1000000
33 CONSTANT: LLVMByValAttribute BIN: 10000000
34 CONSTANT: LLVMNestAttribute BIN: 100000000
35 CONSTANT: LLVMReadNoneAttribute BIN: 1000000000
36 CONSTANT: LLVMReadOnlyAttribute BIN: 10000000000
37 TYPEDEF: enum LLVMAttribute;
55 TYPEDEF: enum LLVMTypeKind
65 LLVMExternalWeakLinkage
67 TYPEDEF: enum LLVMLinkage
72 LLVMProtectedVisibility ;
73 TYPEDEF: enum LLVMVisibility
75 CONSTANT: LLVMCCallConv 0
76 CONSTANT: LLVMFastCallConv 8
77 CONSTANT: LLVMColdCallConv 9
78 CONSTANT: LLVMX86StdcallCallConv 64
79 CONSTANT: LLVMX86FastcallCallConv 65
80 TYPEDEF: enum LLVMCallConv
82 CONSTANT: LLVMIntEQ 32
83 CONSTANT: LLVMIntNE 33
84 CONSTANT: LLVMIntUGT 34
85 CONSTANT: LLVMIntUGE 35
86 CONSTANT: LLVMIntULT 36
87 CONSTANT: LLVMIntULE 37
88 CONSTANT: LLVMIntSGT 38
89 CONSTANT: LLVMIntSGE 39
90 CONSTANT: LLVMIntSLT 40
91 CONSTANT: LLVMIntSLE 41
92 TYPEDEF: enum LLVMIntPredicate
95 LLVMRealPredicateFalse
110 LLVMRealPredicateTrue ;
111 TYPEDEF: enum LLVMRealPredicate
115 TYPEDEF: void* LLVMModuleRef
117 TYPEDEF: void* LLVMPassManagerRef
119 TYPEDEF: void* LLVMModuleProviderRef
121 TYPEDEF: void* LLVMTypeRef
123 TYPEDEF: void* LLVMTypeHandleRef
125 TYPEDEF: void* LLVMValueRef
127 TYPEDEF: void* LLVMBasicBlockRef
129 TYPEDEF: void* LLVMBuilderRef
131 TYPEDEF: void* LLVMMemoryBufferRef
135 FUNCTION: void LLVMDisposeMessage ( char* Message ) ;
137 FUNCTION: LLVMModuleRef LLVMModuleCreateWithName ( char* ModuleID ) ;
139 FUNCTION: int LLVMAddTypeName ( LLVMModuleRef M, char* Name, LLVMTypeRef Ty ) ;
141 FUNCTION: void LLVMDisposeModule ( LLVMModuleRef M ) ;
143 FUNCTION: void LLVMDumpModule ( LLVMModuleRef M ) ;
145 FUNCTION: LLVMModuleProviderRef
146 LLVMCreateModuleProviderForExistingModule ( LLVMModuleRef M ) ;
148 FUNCTION: void LLVMDisposeModuleProvider ( LLVMModuleProviderRef MP ) ;
152 ! LLVM types conform to the following hierarchy:
166 ! See llvm::LLVMTypeKind::getTypeID.
167 FUNCTION: LLVMTypeKind LLVMGetTypeKind ( LLVMTypeRef Ty ) ;
169 ! Operations on integer types
170 FUNCTION: LLVMTypeRef LLVMInt1Type ( ) ;
171 FUNCTION: LLVMTypeRef LLVMInt8Type ( ) ;
172 FUNCTION: LLVMTypeRef LLVMInt16Type ( ) ;
173 FUNCTION: LLVMTypeRef LLVMInt32Type ( ) ;
174 FUNCTION: LLVMTypeRef LLVMInt64Type ( ) ;
175 FUNCTION: LLVMTypeRef LLVMIntType ( unsigned NumBits ) ;
176 FUNCTION: unsigned LLVMGetIntTypeWidth ( LLVMTypeRef IntegerTy ) ;
178 ! Operations on real types
179 FUNCTION: LLVMTypeRef LLVMFloatType ( ) ;
180 FUNCTION: LLVMTypeRef LLVMDoubleType ( ) ;
181 FUNCTION: LLVMTypeRef LLVMX86FP80Type ( ) ;
182 FUNCTION: LLVMTypeRef LLVMFP128Type ( ) ;
183 FUNCTION: LLVMTypeRef LLVMPPCFP128Type ( ) ;
185 ! Operations on function types
186 FUNCTION: LLVMTypeRef
187 LLVMFunctionType ( LLVMTypeRef ReturnType, LLVMTypeRef* ParamTypes, unsigned ParamCount, int IsVarArg ) ;
188 FUNCTION: int LLVMIsFunctionVarArg ( LLVMTypeRef FunctionTy ) ;
189 FUNCTION: LLVMTypeRef LLVMGetReturnType ( LLVMTypeRef FunctionTy ) ;
190 FUNCTION: unsigned LLVMCountParamTypes ( LLVMTypeRef FunctionTy ) ;
191 FUNCTION: void LLVMGetParamTypes ( LLVMTypeRef FunctionTy, LLVMTypeRef* Dest ) ;
193 ! Operations on struct types
194 FUNCTION: LLVMTypeRef
195 LLVMStructType ( LLVMTypeRef* ElementTypes, unsigned ElementCount, int Packed ) ;
196 FUNCTION: unsigned LLVMCountStructElementTypes ( LLVMTypeRef StructTy ) ;
197 FUNCTION: void LLVMGetStructElementTypes ( LLVMTypeRef StructTy, LLVMTypeRef* Dest ) ;
198 FUNCTION: int LLVMIsPackedStruct ( LLVMTypeRef StructTy ) ;
200 ! Operations on array, pointer, and vector types (sequence types)
201 FUNCTION: LLVMTypeRef LLVMArrayType ( LLVMTypeRef ElementType, unsigned ElementCount ) ;
202 FUNCTION: LLVMTypeRef LLVMPointerType ( LLVMTypeRef ElementType, unsigned AddressSpace ) ;
203 FUNCTION: LLVMTypeRef LLVMVectorType ( LLVMTypeRef ElementType, unsigned ElementCount ) ;
205 FUNCTION: LLVMTypeRef LLVMGetElementType ( LLVMTypeRef Ty ) ;
206 FUNCTION: unsigned LLVMGetArrayLength ( LLVMTypeRef ArrayTy ) ;
207 FUNCTION: unsigned LLVMGetPointerAddressSpace ( LLVMTypeRef PointerTy ) ;
208 FUNCTION: unsigned LLVMGetVectorSize ( LLVMTypeRef VectorTy ) ;
210 ! Operations on other types
211 FUNCTION: LLVMTypeRef LLVMVoidType ( ) ;
212 FUNCTION: LLVMTypeRef LLVMLabelType ( ) ;
213 FUNCTION: LLVMTypeRef LLVMOpaqueType ( ) ;
215 ! Operations on type handles
216 FUNCTION: LLVMTypeHandleRef LLVMCreateTypeHandle ( LLVMTypeRef PotentiallyAbstractTy ) ;
217 FUNCTION: void LLVMRefineType ( LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy ) ;
218 FUNCTION: LLVMTypeRef LLVMResolveTypeHandle ( LLVMTypeHandleRef TypeHandle ) ;
219 FUNCTION: void LLVMDisposeTypeHandle ( LLVMTypeHandleRef TypeHandle ) ;
223 FUNCTION: unsigned LLVMCountParams ( LLVMValueRef Fn ) ;
225 FUNCTION: void LLVMGetParams ( LLVMValueRef Fn, LLVMValueRef* Params ) ;
227 FUNCTION: LLVMValueRef
228 LLVMAddFunction ( LLVMModuleRef M, char* Name, LLVMTypeRef FunctionTy ) ;
230 FUNCTION: LLVMValueRef LLVMGetFirstFunction ( LLVMModuleRef M ) ;
232 FUNCTION: LLVMValueRef LLVMGetNextFunction ( LLVMValueRef Fn ) ;
234 FUNCTION: unsigned LLVMGetFunctionCallConv ( LLVMValueRef Fn ) ;
236 FUNCTION: void LLVMSetFunctionCallConv ( LLVMValueRef Fn, unsigned CC ) ;
238 FUNCTION: LLVMBasicBlockRef
239 LLVMAppendBasicBlock ( LLVMValueRef Fn, char* Name ) ;
241 FUNCTION: LLVMValueRef LLVMGetBasicBlockParent ( LLVMBasicBlockRef BB ) ;
245 FUNCTION: LLVMTypeRef LLVMTypeOf ( LLVMValueRef Val ) ;
246 FUNCTION: char* LLVMGetValueName ( LLVMValueRef Val ) ;
247 FUNCTION: void LLVMSetValueName ( LLVMValueRef Val, char* Name ) ;
248 FUNCTION: void LLVMDumpValue ( LLVMValueRef Val ) ;
250 ! Instruction Builders
252 FUNCTION: LLVMBuilderRef LLVMCreateBuilder ( ) ;
253 FUNCTION: void LLVMPositionBuilder
254 ( LLVMBuilderRef Builder, LLVMBasicBlockRef Block, LLVMValueRef Instr ) ;
255 FUNCTION: void LLVMPositionBuilderBefore
256 ( LLVMBuilderRef Builder, LLVMValueRef Instr ) ;
257 FUNCTION: void LLVMPositionBuilderAtEnd
258 ( LLVMBuilderRef Builder, LLVMBasicBlockRef Block ) ;
259 FUNCTION: LLVMBasicBlockRef LLVMGetInsertBlock
260 ( LLVMBuilderRef Builder ) ;
261 FUNCTION: void LLVMClearInsertionPosition
262 ( LLVMBuilderRef Builder ) ;
263 FUNCTION: void LLVMInsertIntoBuilder
264 ( LLVMBuilderRef Builder, LLVMValueRef Instr ) ;
265 FUNCTION: void LLVMDisposeBuilder
266 ( LLVMBuilderRef Builder ) ;
270 FUNCTION: LLVMValueRef LLVMBuildRetVoid
271 ( LLVMBuilderRef Builder ) ;
272 FUNCTION: LLVMValueRef LLVMBuildRet
273 ( LLVMBuilderRef Builder, LLVMValueRef V ) ;
274 FUNCTION: LLVMValueRef LLVMBuildBr
275 ( LLVMBuilderRef Builder, LLVMBasicBlockRef Dest ) ;
276 FUNCTION: LLVMValueRef LLVMBuildCondBr
277 ( LLVMBuilderRef Builder, LLVMValueRef If, LLVMBasicBlockRef Then, LLVMBasicBlockRef Else ) ;
278 FUNCTION: LLVMValueRef LLVMBuildSwitch
279 ( LLVMBuilderRef Builder, LLVMValueRef V, LLVMBasicBlockRef Else, unsigned NumCases ) ;
280 FUNCTION: LLVMValueRef LLVMBuildInvoke
281 ( LLVMBuilderRef Builder, LLVMValueRef Fn, LLVMValueRef* Args, unsigned NumArgs,
282 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch, char* Name ) ;
283 FUNCTION: LLVMValueRef LLVMBuildUnwind
284 ( LLVMBuilderRef Builder ) ;
285 FUNCTION: LLVMValueRef LLVMBuildUnreachable
286 ( LLVMBuilderRef Builder ) ;
288 ! IB Add Case to Switch
290 FUNCTION: void LLVMAddCase
291 ( LLVMValueRef Switch, LLVMValueRef OnVal, LLVMBasicBlockRef Dest ) ;
295 FUNCTION: LLVMValueRef LLVMBuildAdd
296 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
297 FUNCTION: LLVMValueRef LLVMBuildSub
298 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
299 FUNCTION: LLVMValueRef LLVMBuildMul
300 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
301 FUNCTION: LLVMValueRef LLVMBuildUDiv
302 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
303 FUNCTION: LLVMValueRef LLVMBuildSDiv
304 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
305 FUNCTION: LLVMValueRef LLVMBuildFDiv
306 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
307 FUNCTION: LLVMValueRef LLVMBuildURem
308 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
309 FUNCTION: LLVMValueRef LLVMBuildSRem
310 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
311 FUNCTION: LLVMValueRef LLVMBuildFRem
312 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
313 FUNCTION: LLVMValueRef LLVMBuildShl
314 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
315 FUNCTION: LLVMValueRef LLVMBuildLShr
316 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
317 FUNCTION: LLVMValueRef LLVMBuildAShr
318 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
319 FUNCTION: LLVMValueRef LLVMBuildAnd
320 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
321 FUNCTION: LLVMValueRef LLVMBuildOr
322 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
323 FUNCTION: LLVMValueRef LLVMBuildXor
324 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
325 FUNCTION: LLVMValueRef LLVMBuildNeg
326 ( LLVMBuilderRef Builder, LLVMValueRef V, char* Name ) ;
327 FUNCTION: LLVMValueRef LLVMBuildNot
328 ( LLVMBuilderRef Builder, LLVMValueRef V, char* Name ) ;
332 FUNCTION: LLVMValueRef LLVMBuildMalloc
333 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, char* Name ) ;
334 FUNCTION: LLVMValueRef LLVMBuildArrayMalloc
335 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, LLVMValueRef Val, char* Name ) ;
336 FUNCTION: LLVMValueRef LLVMBuildAlloca
337 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, char* Name ) ;
338 FUNCTION: LLVMValueRef LLVMBuildArrayAlloca
339 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, LLVMValueRef Val, char* Name ) ;
340 FUNCTION: LLVMValueRef LLVMBuildFree
341 ( LLVMBuilderRef Builder, LLVMValueRef PointerVal ) ;
342 FUNCTION: LLVMValueRef LLVMBuildLoad
343 ( LLVMBuilderRef Builder, LLVMValueRef PointerVal, char* Name ) ;
344 FUNCTION: LLVMValueRef LLVMBuildStore
345 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMValueRef Ptr ) ;
346 FUNCTION: LLVMValueRef LLVMBuildGEP
347 ( LLVMBuilderRef B, LLVMValueRef Pointer, LLVMValueRef* Indices,
348 unsigned NumIndices, char* Name ) ;
352 FUNCTION: LLVMValueRef LLVMBuildTrunc
353 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
354 FUNCTION: LLVMValueRef LLVMBuildZExt
355 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
356 FUNCTION: LLVMValueRef LLVMBuildSExt
357 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
358 FUNCTION: LLVMValueRef LLVMBuildFPToUI
359 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
360 FUNCTION: LLVMValueRef LLVMBuildFPToSI
361 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
362 FUNCTION: LLVMValueRef LLVMBuildUIToFP
363 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
364 FUNCTION: LLVMValueRef LLVMBuildSIToFP
365 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
366 FUNCTION: LLVMValueRef LLVMBuildFPTrunc
367 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
368 FUNCTION: LLVMValueRef LLVMBuildFPExt
369 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
370 FUNCTION: LLVMValueRef LLVMBuildPtrToInt
371 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
372 FUNCTION: LLVMValueRef LLVMBuildIntToPtr
373 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
374 FUNCTION: LLVMValueRef LLVMBuildBitCast
375 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, char* Name ) ;
379 FUNCTION: LLVMValueRef LLVMBuildICmp
380 ( LLVMBuilderRef Builder, LLVMIntPredicate Op, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
381 FUNCTION: LLVMValueRef LLVMBuildFCmp
382 ( LLVMBuilderRef Builder, LLVMRealPredicate Op, LLVMValueRef LHS, LLVMValueRef RHS, char* Name ) ;
384 ! IB Misc Instructions
386 FUNCTION: LLVMValueRef LLVMBuildPhi
387 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, char* Name ) ;
388 FUNCTION: LLVMValueRef LLVMBuildCall
389 ( LLVMBuilderRef Builder, LLVMValueRef Fn, LLVMValueRef* Args, unsigned NumArgs, char* Name ) ;
390 FUNCTION: LLVMValueRef LLVMBuildSelect
391 ( LLVMBuilderRef Builder, LLVMValueRef If, LLVMValueRef Then, LLVMValueRef Else, char* Name ) ;
392 FUNCTION: LLVMValueRef LLVMBuildVAArg
393 ( LLVMBuilderRef Builder, LLVMValueRef List, LLVMTypeRef Ty, char* Name ) ;
394 FUNCTION: LLVMValueRef LLVMBuildExtractElement
395 ( LLVMBuilderRef Builder, LLVMValueRef VecVal, LLVMValueRef Index, char* Name ) ;
396 FUNCTION: LLVMValueRef LLVMBuildInsertElement
397 ( LLVMBuilderRef Builder, LLVMValueRef VecVal, LLVMValueRef EltVal, LLVMValueRef Index, char* Name ) ;
398 FUNCTION: LLVMValueRef LLVMBuildShuffleVector
399 ( LLVMBuilderRef Builder, LLVMValueRef V1, LLVMValueRef V2, LLVMValueRef Mask, char* Name ) ;
400 FUNCTION: LLVMValueRef LLVMBuildExtractValue
401 ( LLVMBuilderRef Builder, LLVMValueRef AggVal, unsigned Index, char* Name ) ;
402 FUNCTION: LLVMValueRef LLVMBuildInsertValue
403 ( LLVMBuilderRef Builder, LLVMValueRef AggVal, LLVMValueRef EltVal, unsigned Index, char* Name ) ;
405 ! Memory Buffers/Bit Reader
407 FUNCTION: int LLVMCreateMemoryBufferWithContentsOfFile
408 ( char* Path, LLVMMemoryBufferRef* OutMemBuf, char** OutMessage ) ;
410 FUNCTION: void LLVMDisposeMemoryBuffer ( LLVMMemoryBufferRef MemBuf ) ;
412 LIBRARY: LLVMBitReader
414 FUNCTION: int LLVMParseBitcode
415 ( LLVMMemoryBufferRef MemBuf, LLVMModuleRef* OutModule, char** OutMessage ) ;
417 FUNCTION: int LLVMGetBitcodeModuleProvider
418 ( LLVMMemoryBufferRef MemBuf, LLVMModuleProviderRef* OutMP, char** OutMessage ) ;