1 ! Copyright (C) 2009 Matthew Willis.
2 ! See http://factorcode.org/license.txt for BSD license.
4 USING: alien alien.c-types alien.libraries alien.syntax
5 combinators kernel sequences system ;
10 : add-llvm-library ( name -- )
12 { [ os macosx? ] [ "lib" ".dylib" surround ] }
13 { [ os unix? ] [ "lib" ".so" surround ] }
14 { [ os windows? ] [ ".dll" append ] }
15 } cond cdecl add-library ;
17 { "LLVMSystem" "LLVMSupport" "LLVMCore" "LLVMBitReader" }
18 [ add-llvm-library ] each
25 TYPEDEF: uint unsigned
26 TYPEDEF: unsigned enum
29 { LLVMZExtAttribute 0b1 }
30 { LLVMSExtAttribute 0b10 }
31 { LLVMNoReturnAttribute 0b100 }
32 { LLVMInRegAttribute 0b1000 }
33 { LLVMStructRetAttribute 0b10000 }
34 { LLVMNoUnwindAttribute 0b100000 }
35 { LLVMNoAliasAttribute 0b1000000 }
36 { LLVMByValAttribute 0b10000000 }
37 { LLVMNestAttribute 0b100000000 }
38 { LLVMReadNoneAttribute 0b1000000000 }
39 { LLVMReadOnlyAttribute 0b10000000000 } ;
66 LLVMExternalWeakLinkage
72 LLVMProtectedVisibility ;
76 { LLVMFastCallConv 8 }
77 { LLVMColdCallConv 9 }
78 { LLVMX86StdcallCallConv 64 }
79 { LLVMX86FastcallCallConv 65 } ;
81 ENUM: LLVMIntPredicate
93 ENUM: LLVMRealPredicate
94 LLVMRealPredicateFalse
109 LLVMRealPredicateTrue ;
113 TYPEDEF: void* LLVMModuleRef
115 TYPEDEF: void* LLVMPassManagerRef
117 TYPEDEF: void* LLVMModuleProviderRef
119 TYPEDEF: void* LLVMTypeRef
121 TYPEDEF: void* LLVMTypeHandleRef
123 TYPEDEF: void* LLVMValueRef
125 TYPEDEF: void* LLVMBasicBlockRef
127 TYPEDEF: void* LLVMBuilderRef
129 TYPEDEF: void* LLVMMemoryBufferRef
133 FUNCTION: void LLVMDisposeMessage ( c-string Message ) ;
135 FUNCTION: LLVMModuleRef LLVMModuleCreateWithName ( c-string ModuleID ) ;
137 FUNCTION: int LLVMAddTypeName ( LLVMModuleRef M, c-string Name, LLVMTypeRef Ty ) ;
139 FUNCTION: void LLVMDisposeModule ( LLVMModuleRef M ) ;
141 FUNCTION: void LLVMDumpModule ( LLVMModuleRef M ) ;
143 FUNCTION: LLVMModuleProviderRef
144 LLVMCreateModuleProviderForExistingModule ( LLVMModuleRef M ) ;
146 FUNCTION: void LLVMDisposeModuleProvider ( LLVMModuleProviderRef MP ) ;
150 ! LLVM types conform to the following hierarchy:
164 ! See llvm::LLVMTypeKind::getTypeID.
165 FUNCTION: LLVMTypeKind LLVMGetTypeKind ( LLVMTypeRef Ty ) ;
167 ! Operations on integer types
168 FUNCTION: LLVMTypeRef LLVMInt1Type ( ) ;
169 FUNCTION: LLVMTypeRef LLVMInt8Type ( ) ;
170 FUNCTION: LLVMTypeRef LLVMInt16Type ( ) ;
171 FUNCTION: LLVMTypeRef LLVMInt32Type ( ) ;
172 FUNCTION: LLVMTypeRef LLVMInt64Type ( ) ;
173 FUNCTION: LLVMTypeRef LLVMIntType ( unsigned NumBits ) ;
174 FUNCTION: unsigned LLVMGetIntTypeWidth ( LLVMTypeRef IntegerTy ) ;
176 ! Operations on real types
177 FUNCTION: LLVMTypeRef LLVMFloatType ( ) ;
178 FUNCTION: LLVMTypeRef LLVMDoubleType ( ) ;
179 FUNCTION: LLVMTypeRef LLVMX86FP80Type ( ) ;
180 FUNCTION: LLVMTypeRef LLVMFP128Type ( ) ;
181 FUNCTION: LLVMTypeRef LLVMPPCFP128Type ( ) ;
183 ! Operations on function types
184 FUNCTION: LLVMTypeRef
185 LLVMFunctionType ( LLVMTypeRef ReturnType, LLVMTypeRef* ParamTypes, unsigned ParamCount, int IsVarArg ) ;
186 FUNCTION: int LLVMIsFunctionVarArg ( LLVMTypeRef FunctionTy ) ;
187 FUNCTION: LLVMTypeRef LLVMGetReturnType ( LLVMTypeRef FunctionTy ) ;
188 FUNCTION: unsigned LLVMCountParamTypes ( LLVMTypeRef FunctionTy ) ;
189 FUNCTION: void LLVMGetParamTypes ( LLVMTypeRef FunctionTy, LLVMTypeRef* Dest ) ;
191 ! Operations on struct types
192 FUNCTION: LLVMTypeRef
193 LLVMStructType ( LLVMTypeRef* ElementTypes, unsigned ElementCount, int Packed ) ;
194 FUNCTION: unsigned LLVMCountStructElementTypes ( LLVMTypeRef StructTy ) ;
195 FUNCTION: void LLVMGetStructElementTypes ( LLVMTypeRef StructTy, LLVMTypeRef* Dest ) ;
196 FUNCTION: int LLVMIsPackedStruct ( LLVMTypeRef StructTy ) ;
198 ! Operations on array, pointer, and vector types (sequence types)
199 FUNCTION: LLVMTypeRef LLVMArrayType ( LLVMTypeRef ElementType, unsigned ElementCount ) ;
200 FUNCTION: LLVMTypeRef LLVMPointerType ( LLVMTypeRef ElementType, unsigned AddressSpace ) ;
201 FUNCTION: LLVMTypeRef LLVMVectorType ( LLVMTypeRef ElementType, unsigned ElementCount ) ;
203 FUNCTION: LLVMTypeRef LLVMGetElementType ( LLVMTypeRef Ty ) ;
204 FUNCTION: unsigned LLVMGetArrayLength ( LLVMTypeRef ArrayTy ) ;
205 FUNCTION: unsigned LLVMGetPointerAddressSpace ( LLVMTypeRef PointerTy ) ;
206 FUNCTION: unsigned LLVMGetVectorSize ( LLVMTypeRef VectorTy ) ;
208 ! Operations on other types
209 FUNCTION: LLVMTypeRef LLVMVoidType ( ) ;
210 FUNCTION: LLVMTypeRef LLVMLabelType ( ) ;
211 FUNCTION: LLVMTypeRef LLVMOpaqueType ( ) ;
213 ! Operations on type handles
214 FUNCTION: LLVMTypeHandleRef LLVMCreateTypeHandle ( LLVMTypeRef PotentiallyAbstractTy ) ;
215 FUNCTION: void LLVMRefineType ( LLVMTypeRef AbstractTy, LLVMTypeRef ConcreteTy ) ;
216 FUNCTION: LLVMTypeRef LLVMResolveTypeHandle ( LLVMTypeHandleRef TypeHandle ) ;
217 FUNCTION: void LLVMDisposeTypeHandle ( LLVMTypeHandleRef TypeHandle ) ;
221 FUNCTION: unsigned LLVMCountParams ( LLVMValueRef Fn ) ;
223 FUNCTION: void LLVMGetParams ( LLVMValueRef Fn, LLVMValueRef* Params ) ;
225 FUNCTION: LLVMValueRef
226 LLVMAddFunction ( LLVMModuleRef M, c-string Name, LLVMTypeRef FunctionTy ) ;
228 FUNCTION: LLVMValueRef LLVMGetFirstFunction ( LLVMModuleRef M ) ;
230 FUNCTION: LLVMValueRef LLVMGetNextFunction ( LLVMValueRef Fn ) ;
232 FUNCTION: unsigned LLVMGetFunctionCallConv ( LLVMValueRef Fn ) ;
234 FUNCTION: void LLVMSetFunctionCallConv ( LLVMValueRef Fn, unsigned CC ) ;
236 FUNCTION: LLVMBasicBlockRef
237 LLVMAppendBasicBlock ( LLVMValueRef Fn, c-string Name ) ;
239 FUNCTION: LLVMValueRef LLVMGetBasicBlockParent ( LLVMBasicBlockRef BB ) ;
243 FUNCTION: LLVMTypeRef LLVMTypeOf ( LLVMValueRef Val ) ;
244 FUNCTION: c-string LLVMGetValueName ( LLVMValueRef Val ) ;
245 FUNCTION: void LLVMSetValueName ( LLVMValueRef Val, c-string Name ) ;
246 FUNCTION: void LLVMDumpValue ( LLVMValueRef Val ) ;
248 ! Instruction Builders
250 FUNCTION: LLVMBuilderRef LLVMCreateBuilder ( ) ;
251 FUNCTION: void LLVMPositionBuilder
252 ( LLVMBuilderRef Builder, LLVMBasicBlockRef Block, LLVMValueRef Instr ) ;
253 FUNCTION: void LLVMPositionBuilderBefore
254 ( LLVMBuilderRef Builder, LLVMValueRef Instr ) ;
255 FUNCTION: void LLVMPositionBuilderAtEnd
256 ( LLVMBuilderRef Builder, LLVMBasicBlockRef Block ) ;
257 FUNCTION: LLVMBasicBlockRef LLVMGetInsertBlock
258 ( LLVMBuilderRef Builder ) ;
259 FUNCTION: void LLVMClearInsertionPosition
260 ( LLVMBuilderRef Builder ) ;
261 FUNCTION: void LLVMInsertIntoBuilder
262 ( LLVMBuilderRef Builder, LLVMValueRef Instr ) ;
263 FUNCTION: void LLVMDisposeBuilder
264 ( LLVMBuilderRef Builder ) ;
268 FUNCTION: LLVMValueRef LLVMBuildRetVoid
269 ( LLVMBuilderRef Builder ) ;
270 FUNCTION: LLVMValueRef LLVMBuildRet
271 ( LLVMBuilderRef Builder, LLVMValueRef V ) ;
272 FUNCTION: LLVMValueRef LLVMBuildBr
273 ( LLVMBuilderRef Builder, LLVMBasicBlockRef Dest ) ;
274 FUNCTION: LLVMValueRef LLVMBuildCondBr
275 ( LLVMBuilderRef Builder, LLVMValueRef If, LLVMBasicBlockRef Then, LLVMBasicBlockRef Else ) ;
276 FUNCTION: LLVMValueRef LLVMBuildSwitch
277 ( LLVMBuilderRef Builder, LLVMValueRef V, LLVMBasicBlockRef Else, unsigned NumCases ) ;
278 FUNCTION: LLVMValueRef LLVMBuildInvoke
279 ( LLVMBuilderRef Builder, LLVMValueRef Fn, LLVMValueRef* Args, unsigned NumArgs,
280 LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch, c-string Name ) ;
281 FUNCTION: LLVMValueRef LLVMBuildUnwind
282 ( LLVMBuilderRef Builder ) ;
283 FUNCTION: LLVMValueRef LLVMBuildUnreachable
284 ( LLVMBuilderRef Builder ) ;
286 ! IB Add Case to Switch
288 FUNCTION: void LLVMAddCase
289 ( LLVMValueRef Switch, LLVMValueRef OnVal, LLVMBasicBlockRef Dest ) ;
293 FUNCTION: LLVMValueRef LLVMBuildAdd
294 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
295 FUNCTION: LLVMValueRef LLVMBuildSub
296 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
297 FUNCTION: LLVMValueRef LLVMBuildMul
298 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
299 FUNCTION: LLVMValueRef LLVMBuildUDiv
300 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
301 FUNCTION: LLVMValueRef LLVMBuildSDiv
302 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
303 FUNCTION: LLVMValueRef LLVMBuildFDiv
304 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
305 FUNCTION: LLVMValueRef LLVMBuildURem
306 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
307 FUNCTION: LLVMValueRef LLVMBuildSRem
308 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
309 FUNCTION: LLVMValueRef LLVMBuildFRem
310 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
311 FUNCTION: LLVMValueRef LLVMBuildShl
312 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
313 FUNCTION: LLVMValueRef LLVMBuildLShr
314 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
315 FUNCTION: LLVMValueRef LLVMBuildAShr
316 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
317 FUNCTION: LLVMValueRef LLVMBuildAnd
318 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
319 FUNCTION: LLVMValueRef LLVMBuildOr
320 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
321 FUNCTION: LLVMValueRef LLVMBuildXor
322 ( LLVMBuilderRef Builder, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
323 FUNCTION: LLVMValueRef LLVMBuildNeg
324 ( LLVMBuilderRef Builder, LLVMValueRef V, c-string Name ) ;
325 FUNCTION: LLVMValueRef LLVMBuildNot
326 ( LLVMBuilderRef Builder, LLVMValueRef V, c-string Name ) ;
330 FUNCTION: LLVMValueRef LLVMBuildMalloc
331 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, c-string Name ) ;
332 FUNCTION: LLVMValueRef LLVMBuildArrayMalloc
333 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, LLVMValueRef Val, c-string Name ) ;
334 FUNCTION: LLVMValueRef LLVMBuildAlloca
335 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, c-string Name ) ;
336 FUNCTION: LLVMValueRef LLVMBuildArrayAlloca
337 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, LLVMValueRef Val, c-string Name ) ;
338 FUNCTION: LLVMValueRef LLVMBuildFree
339 ( LLVMBuilderRef Builder, LLVMValueRef PointerVal ) ;
340 FUNCTION: LLVMValueRef LLVMBuildLoad
341 ( LLVMBuilderRef Builder, LLVMValueRef PointerVal, c-string Name ) ;
342 FUNCTION: LLVMValueRef LLVMBuildStore
343 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMValueRef Ptr ) ;
344 FUNCTION: LLVMValueRef LLVMBuildGEP
345 ( LLVMBuilderRef B, LLVMValueRef Pointer, LLVMValueRef* Indices,
346 unsigned NumIndices, c-string Name ) ;
350 FUNCTION: LLVMValueRef LLVMBuildTrunc
351 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
352 FUNCTION: LLVMValueRef LLVMBuildZExt
353 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
354 FUNCTION: LLVMValueRef LLVMBuildSExt
355 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
356 FUNCTION: LLVMValueRef LLVMBuildFPToUI
357 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
358 FUNCTION: LLVMValueRef LLVMBuildFPToSI
359 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
360 FUNCTION: LLVMValueRef LLVMBuildUIToFP
361 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
362 FUNCTION: LLVMValueRef LLVMBuildSIToFP
363 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
364 FUNCTION: LLVMValueRef LLVMBuildFPTrunc
365 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
366 FUNCTION: LLVMValueRef LLVMBuildFPExt
367 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
368 FUNCTION: LLVMValueRef LLVMBuildPtrToInt
369 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
370 FUNCTION: LLVMValueRef LLVMBuildIntToPtr
371 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
372 FUNCTION: LLVMValueRef LLVMBuildBitCast
373 ( LLVMBuilderRef Builder, LLVMValueRef Val, LLVMTypeRef DestTy, c-string Name ) ;
377 FUNCTION: LLVMValueRef LLVMBuildICmp
378 ( LLVMBuilderRef Builder, LLVMIntPredicate Op, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
379 FUNCTION: LLVMValueRef LLVMBuildFCmp
380 ( LLVMBuilderRef Builder, LLVMRealPredicate Op, LLVMValueRef LHS, LLVMValueRef RHS, c-string Name ) ;
382 ! IB Misc Instructions
384 FUNCTION: LLVMValueRef LLVMBuildPhi
385 ( LLVMBuilderRef Builder, LLVMTypeRef Ty, c-string Name ) ;
386 FUNCTION: LLVMValueRef LLVMBuildCall
387 ( LLVMBuilderRef Builder, LLVMValueRef Fn, LLVMValueRef* Args, unsigned NumArgs, c-string Name ) ;
388 FUNCTION: LLVMValueRef LLVMBuildSelect
389 ( LLVMBuilderRef Builder, LLVMValueRef If, LLVMValueRef Then, LLVMValueRef Else, c-string Name ) ;
390 FUNCTION: LLVMValueRef LLVMBuildVAArg
391 ( LLVMBuilderRef Builder, LLVMValueRef List, LLVMTypeRef Ty, c-string Name ) ;
392 FUNCTION: LLVMValueRef LLVMBuildExtractElement
393 ( LLVMBuilderRef Builder, LLVMValueRef VecVal, LLVMValueRef Index, c-string Name ) ;
394 FUNCTION: LLVMValueRef LLVMBuildInsertElement
395 ( LLVMBuilderRef Builder, LLVMValueRef VecVal, LLVMValueRef EltVal, LLVMValueRef Index, c-string Name ) ;
396 FUNCTION: LLVMValueRef LLVMBuildShuffleVector
397 ( LLVMBuilderRef Builder, LLVMValueRef V1, LLVMValueRef V2, LLVMValueRef Mask, c-string Name ) ;
398 FUNCTION: LLVMValueRef LLVMBuildExtractValue
399 ( LLVMBuilderRef Builder, LLVMValueRef AggVal, unsigned Index, c-string Name ) ;
400 FUNCTION: LLVMValueRef LLVMBuildInsertValue
401 ( LLVMBuilderRef Builder, LLVMValueRef AggVal, LLVMValueRef EltVal, unsigned Index, c-string Name ) ;
403 ! Memory Buffers/Bit Reader
405 FUNCTION: int LLVMCreateMemoryBufferWithContentsOfFile
406 ( c-string Path, LLVMMemoryBufferRef* OutMemBuf, c-string* OutMessage ) ;
408 FUNCTION: void LLVMDisposeMemoryBuffer ( LLVMMemoryBufferRef MemBuf ) ;
410 LIBRARY: LLVMBitReader
412 FUNCTION: int LLVMParseBitcode
413 ( LLVMMemoryBufferRef MemBuf, LLVMModuleRef* OutModule, c-string* OutMessage ) ;
415 FUNCTION: int LLVMGetBitcodeModuleProvider
416 ( LLVMMemoryBufferRef MemBuf, LLVMModuleProviderRef* OutMP, c-string* OutMessage ) ;