diff options
Diffstat (limited to 'bindings/go/llvm/executionengine.go')
-rw-r--r-- | bindings/go/llvm/executionengine.go | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/bindings/go/llvm/executionengine.go b/bindings/go/llvm/executionengine.go index 26b7524..94d4e83 100644 --- a/bindings/go/llvm/executionengine.go +++ b/bindings/go/llvm/executionengine.go @@ -30,11 +30,25 @@ type GenericValue struct { type ExecutionEngine struct { C C.LLVMExecutionEngineRef } + type MCJITCompilerOptions struct { - OptLevel uint - CodeModel CodeModel - NoFramePointerElim bool - EnableFastISel bool + C C.struct_LLVMMCJITCompilerOptions +} + +func (options *MCJITCompilerOptions) SetMCJITOptimizationLevel(level uint) { + options.C.OptLevel = C.uint(level) +} + +func (options *MCJITCompilerOptions) SetMCJITNoFramePointerElim(nfp bool) { + options.C.NoFramePointerElim = boolToLLVMBool(nfp) +} + +func (options *MCJITCompilerOptions) SetMCJITEnableFastISel(fastisel bool) { + options.C.EnableFastISel = boolToLLVMBool(fastisel) +} + +func (options *MCJITCompilerOptions) SetMCJITCodeModel(CodeModel CodeModel) { + options.C.CodeModel = C.LLVMCodeModel(CodeModel) } // helpers @@ -96,15 +110,15 @@ func NewInterpreter(m Module) (ee ExecutionEngine, err error) { return } +func NewMCJITCompilerOptions() MCJITCompilerOptions { + var options C.struct_LLVMMCJITCompilerOptions + C.LLVMInitializeMCJITCompilerOptions(&options, C.size_t(unsafe.Sizeof(C.struct_LLVMMCJITCompilerOptions{}))) + return MCJITCompilerOptions{options} +} + func NewMCJITCompiler(m Module, options MCJITCompilerOptions) (ee ExecutionEngine, err error) { var cmsg *C.char - copts := C.struct_LLVMMCJITCompilerOptions{ - OptLevel: C.unsigned(options.OptLevel), - CodeModel: C.LLVMCodeModel(options.CodeModel), - NoFramePointerElim: boolToLLVMBool(options.NoFramePointerElim), - EnableFastISel: boolToLLVMBool(options.EnableFastISel), - } - fail := C.LLVMCreateMCJITCompilerForModule(&ee.C, m.C, &copts, C.size_t(unsafe.Sizeof(copts)), &cmsg) + fail := C.LLVMCreateMCJITCompilerForModule(&ee.C, m.C, &options.C, C.size_t(unsafe.Sizeof(C.struct_LLVMMCJITCompilerOptions{})), &cmsg) if fail != 0 { ee.C = nil err = errors.New(C.GoString(cmsg)) |