llvm: more of the unmaintained llvm bindings fixed

modern-harvey2
Björn Lindqvist 2017-07-13 04:00:23 +02:00
parent aab120f69c
commit bc48b82e77
7 changed files with 114 additions and 11 deletions

View File

@ -5,7 +5,7 @@ alien.syntax ldcache ;
IN: llvm.ffi
<<
"llvm" "LLVM-3.8" find-so cdecl add-library
"llvm" "LLVM-3.9" find-so cdecl add-library
>>
LIBRARY: llvm
@ -29,6 +29,26 @@ TYPEDEF: void* LLVMValueRef
TYPEDEF: void* LLVMBasicBlockRef
TYPEDEF: void* LLVMBuilderRef
TYPEDEF: void* LLVMMemoryBufferRef
TYPEDEF: void* LLVMTargetRef
TYPEDEF: void* LLVMPassRegistryRef
! Type types
ENUM: LLVMTypeKind
LLVMVoidTypeKind
LLVMFloatTypeKind
LLVMDoubleTypeKind
LLVMX86_FP80TypeKind
LLVMFP128TypeKind
LLVMPPC_FP128TypeKind
LLVMLabelTypeKind
LLVMMetadataTypeKind
LLVMIntegerTypeKind
LLVMFunctionTypeKind
LLVMStructTypeKind
LLVMArrayTypeKind
LLVMPointerTypeKind
LLVMOpaqueTypeKind
LLVMVectorTypeKind ;
! Modules
FUNCTION: LLVMModuleRef LLVMModuleCreateWithName ( c-string ModuleID )
@ -36,7 +56,6 @@ FUNCTION: void LLVMDisposeModule ( LLVMModuleRef M )
FUNCTION: void LLVMDumpModule ( LLVMModuleRef M )
FUNCTION: LLVMBool LLVMVerifyModule ( LLVMModuleRef M, int Action, char **OutMessage )
FUNCTION: c-string LLVMGetTarget ( LLVMModuleRef M )
DESTRUCTOR: LLVMDisposeModule
! Types
FUNCTION: LLVMTypeRef LLVMInt1Type ( )
@ -48,6 +67,7 @@ FUNCTION: LLVMTypeRef LLVMIntType ( unsigned NumBits )
FUNCTION: LLVMTypeRef LLVMFunctionType ( LLVMTypeRef ReturnType,
LLVMTypeRef* ParamTypes,
unsigned ParamCount, int IsVarArg )
FUNCTION: LLVMTypeKind LLVMGetTypeKind ( LLVMTypeRef Ty )
! Values
FUNCTION: LLVMValueRef LLVMAddFunction ( LLVMModuleRef M,
@ -56,6 +76,8 @@ FUNCTION: LLVMValueRef LLVMAddFunction ( LLVMModuleRef M,
FUNCTION: LLVMValueRef LLVMGetParam ( LLVMValueRef Fn,
unsigned index )
FUNCTION: c-string LLVMGetValueName ( LLVMValueRef Val )
FUNCTION: unsigned LLVMCountParams ( LLVMValueRef Fn )
FUNCTION: LLVMTypeRef LLVMTypeOf ( LLVMValueRef Val )
! Basic blocks
FUNCTION: LLVMBasicBlockRef LLVMAppendBasicBlock ( LLVMValueRef Fn,
@ -79,15 +101,19 @@ FUNCTION: LLVMValueRef LLVMBuildSub ( LLVMBuilderRef Builder,
c-string Name )
FUNCTION: LLVMValueRef LLVMBuildRet ( LLVMBuilderRef Builder,
LLVMValueRef V )
DESTRUCTOR: LLVMDisposeBuilder
! Engines
! Execution Engines
FUNCTION: LLVMBool LLVMCreateExecutionEngineForModule (
LLVMExecutionEngineRef* OutEE,
LLVMModuleRef M,
char **OutMessage )
FUNCTION: void LLVMDisposeExecutionEngine ( LLVMExecutionEngineRef E )
DESTRUCTOR: LLVMDisposeExecutionEngine
FUNCTION: uint64_t LLVMGetGlobalValueAddress ( LLVMExecutionEngineRef E, c-string name )
FUNCTION: LLVMBool LLVMFindFunction ( LLVMExecutionEngineRef E,
c-string name,
LLVMValueRef OutFn )
FUNCTION: void* LLVMGetPointerToGlobal ( LLVMExecutionEngineRef EE,
LLVMValueRef Global )
! Memory buffers
FUNCTION: LLVMBool LLVMCreateMemoryBufferWithContentsOfFile (
@ -96,6 +122,7 @@ FUNCTION: LLVMBool LLVMCreateMemoryBufferWithContentsOfFile (
c-string* OutMessage )
FUNCTION: void LLVMDisposeMemoryBuffer ( LLVMMemoryBufferRef MemBuf )
FUNCTION: size_t LLVMGetBufferSize ( LLVMMemoryBufferRef MemBuf )
! Deprecated and should be replaced with LLVMParseBitcode2.
FUNCTION: int LLVMParseBitcode ( LLVMMemoryBufferRef MemBuf,
LLVMModuleRef* OutModule,
c-string* OutMessage )
@ -104,5 +131,22 @@ FUNCTION: int LLVMParseBitcode ( LLVMMemoryBufferRef MemBuf,
FUNCTION: LLVMModuleProviderRef LLVMCreateModuleProviderForExistingModule ( LLVMModuleRef M )
FUNCTION: void LLVMDisposeModuleProvider ( LLVMModuleProviderRef MP )
! Targets
FUNCTION: LLVMTargetRef LLVMGetFirstTarget ( )
FUNCTION: c-string LLVMGetTargetName ( LLVMTargetRef T )
! Messages
FUNCTION: void LLVMDisposeMessage ( char *Message )
! Pass Registry
FUNCTION: LLVMPassRegistryRef LLVMGetGlobalPassRegistry ( )
! Initialization
FUNCTION: void LLVMInitializeCore ( LLVMPassRegistryRef PR )
FUNCTION: void LLVMLinkInMCJIT ( )
FUNCTION: void LLVMInitializeX86AsmPrinter ( )
FUNCTION: void LLVMInitializeX86TargetInfo ( )
FUNCTION: void LLVMInitializeX86Target ( )
FUNCTION: void LLVMInitializeX86TargetMC ( )
! Removed symbols: LLVMCreateJITCompiler

View File

@ -0,0 +1,7 @@
USING: kernel literals llvm llvm.ffi system tools.test ;
IN: llvm.tests
${ cpu x86.64? "x86-64" "x86-32" ? } [
initialize-native-target
LLVMGetFirstTarget LLVMGetTargetName
] unit-test

View File

@ -1,2 +1,14 @@
USING: kernel ;
USING: llvm.ffi ;
IN: llvm
: initialize ( -- )
LLVMGetGlobalPassRegistry LLVMInitializeCore ;
! https://github.com/fsprojects/llvm-fs/blob/master/src/LLVM/Target.fs
: initialize-native-target ( -- )
LLVMInitializeX86TargetInfo
LLVMInitializeX86Target
LLVMInitializeX86TargetMC ;
: initialize-native-asm-printer ( -- )
LLVMInitializeX86AsmPrinter ;

View File

@ -4,6 +4,10 @@ USING: help.markup help.syntax llvm.wrappers strings ;
IN: llvm.reader
HELP: buffer>module
{ $values { "buffer" buffer } { "module" module } }
{ $description "Creates a module from a buffer. The buffer is disposed of." } ;
HELP: load-module
{ $values { "path" string } { "module" module } }
{ $description "Parses a file containing llvm bitcode into an llvm module." }

View File

@ -0,0 +1,7 @@
USING: io.pathnames llvm.reader llvm.wrappers tools.test ;
IN: llvm.reader.tests
{ t } [
"resource:extra/llvm/wrappers/add.bc" absolute-path load-module
module?
] unit-test

View File

@ -1,8 +1,15 @@
USING: accessors alien destructors io.pathnames kernel llvm.ffi
llvm.wrappers tools.test ;
llvm.reader llvm.wrappers tools.test ;
IN: llvm.wrappers.tests
CONSTANT: ADD.BC "resource:extra/llvm/wrappers/add.bc"
{ 728 t } [
"resource:extra/llvm/wrappers/add.bc" absolute-path <buffer>
ADD.BC absolute-path <buffer>
[ value>> [ LLVMGetBufferSize ] keep ] with-disposal alien?
] unit-test
{ "sum" 2 } [
ADD.BC absolute-path load-module <engine>
"sum" find-function [ LLVMGetValueName ] [ LLVMCountParams ] bi
] unit-test

View File

@ -1,12 +1,12 @@
! Copyright (C) 2009 Matthew Willis.
! Copyright (C) 2009 Matthew Willis, 2017 Björn Lindqvist.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors alien.c-types alien.data alien.strings destructors io
io.encodings.utf8 kernel llvm.ffi ;
io.encodings.utf8 kernel llvm.ffi prettyprint ;
IN: llvm.wrappers
ERROR: llvm-error message ;
: llvm-throw ( c-string -- )
: llvm-throw ( void* -- )
[ utf8 alien>string ] [ LLVMDisposeMessage ] bi llvm-error ;
: <dispose> ( alien class -- disposable ) new swap >>value ;
@ -28,6 +28,28 @@ M: provider dispose* value>> LLVMDisposeModuleProvider ;
: <provider> ( module -- provider )
[ (provider) ] with-disposal ;
TUPLE: engine value disposed ;
M: engine dispose* value>> LLVMDisposeExecutionEngine ;
: (engine) ( LLVMModuleRef -- LLVMExecutionEngineRef )
f void* <ref> f void* <ref>
[ swapd LLVMCreateExecutionEngineForModule drop ] 2keep
void* deref [ llvm-throw ] when*
void* deref ;
: <engine> ( module -- engine )
[
[ value>> (engine) engine <dispose> ]
[ t >>disposed drop ] bi
] with-disposal ;
: find-function ( engine name -- function/f )
[ value>> ] dip f void* <ref>
[ LLVMFindFunction drop ] keep void* deref ;
: function-pointer ( engine function -- alien )
[ value>> ] dip LLVMGetPointerToGlobal ;
TUPLE: buffer value disposed ;
M: buffer dispose* value>> LLVMDisposeMemoryBuffer ;