From: Eric Christopher Date: Wed, 26 Nov 2014 02:27:46 +0000 (+0000) Subject: Make sure that the go bindings call LLVMInitializeMCJITCompilerOptions X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=82ec8476af25616138a9050b5edd6e1e3cf42e4d;hp=c0dae440e6693f67f6cf029d29890b1bfc9247b7 Make sure that the go bindings call LLVMInitializeMCJITCompilerOptions so that they initialize the code generation model to the correct (non-zero) default model. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222804 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/bindings/go/llvm/executionengine.go b/bindings/go/llvm/executionengine.go index 26b75247348..db2c2153401 100644 --- a/bindings/go/llvm/executionengine.go +++ b/bindings/go/llvm/executionengine.go @@ -30,11 +30,9 @@ type GenericValue struct { type ExecutionEngine struct { C C.LLVMExecutionEngineRef } + type MCJITCompilerOptions struct { - OptLevel uint - CodeModel CodeModel - NoFramePointerElim bool - EnableFastISel bool + C C.struct_LLVMMCJITCompilerOptions } // helpers @@ -96,15 +94,19 @@ 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 SetMCJITOptimizationLevel(options MCJITCompilerOptions, level uint) { + options.C.OptLevel = C.uint(level) +} + 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)) diff --git a/bindings/go/llvm/executionengine_test.go b/bindings/go/llvm/executionengine_test.go index 1a3fd456abe..2d5ca721a2a 100644 --- a/bindings/go/llvm/executionengine_test.go +++ b/bindings/go/llvm/executionengine_test.go @@ -66,7 +66,9 @@ func TestFactorial(t *testing.T) { return } - engine, err := NewMCJITCompiler(mod, MCJITCompilerOptions{OptLevel: 2}) + options := NewMCJITCompilerOptions() + SetMCJITOptimizationLevel(options, 2) + engine, err := NewMCJITCompiler(mod, options) if err != nil { t.Errorf("Error creating JIT: %s", err) return