summaryrefslogtreecommitdiffstats
path: root/llvm/bindings/go
diff options
context:
space:
mode:
authorEric Christopher <echristo@gmail.com>2014-11-26 02:27:46 +0000
committerEric Christopher <echristo@gmail.com>2014-11-26 02:27:46 +0000
commitcb963576be44baebdff0233a1c7658c95f6554c1 (patch)
tree57ab7244578ce86ef59ebea69d0e1356c4483897 /llvm/bindings/go
parent4cc76cb872aa4db557a08738d2081ca7eeed7895 (diff)
downloadbcm5719-llvm-cb963576be44baebdff0233a1c7658c95f6554c1.tar.gz
bcm5719-llvm-cb963576be44baebdff0233a1c7658c95f6554c1.zip
Make sure that the go bindings call LLVMInitializeMCJITCompilerOptions
so that they initialize the code generation model to the correct (non-zero) default model. llvm-svn: 222804
Diffstat (limited to 'llvm/bindings/go')
-rw-r--r--llvm/bindings/go/llvm/executionengine.go24
-rw-r--r--llvm/bindings/go/llvm/executionengine_test.go4
2 files changed, 16 insertions, 12 deletions
diff --git a/llvm/bindings/go/llvm/executionengine.go b/llvm/bindings/go/llvm/executionengine.go
index 26b75247348..db2c2153401 100644
--- a/llvm/bindings/go/llvm/executionengine.go
+++ b/llvm/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/llvm/bindings/go/llvm/executionengine_test.go b/llvm/bindings/go/llvm/executionengine_test.go
index 1a3fd456abe..2d5ca721a2a 100644
--- a/llvm/bindings/go/llvm/executionengine_test.go
+++ b/llvm/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
OpenPOWER on IntegriCloud