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
This commit is contained in:
Eric Christopher 2014-11-26 02:27:46 +00:00
parent c0dae440e6
commit 82ec8476af
2 changed files with 16 additions and 12 deletions

View File

@ -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))

View File

@ -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