aboutsummaryrefslogtreecommitdiffstats
path: root/bindings/go/llvm/executionengine.go
diff options
context:
space:
mode:
Diffstat (limited to 'bindings/go/llvm/executionengine.go')
-rw-r--r--bindings/go/llvm/executionengine.go36
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))