ruby-llvm 3.4.0 → 11.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +19 -4
- data/ext/ruby-llvm-support/Rakefile +20 -8
- data/ext/ruby-llvm-support/support.cpp +0 -20
- data/lib/llvm.rb +0 -6
- data/lib/llvm/analysis_ffi.rb +30 -28
- data/lib/llvm/config.rb +4 -4
- data/lib/llvm/core.rb +45 -2
- data/lib/llvm/core/bitcode.rb +10 -10
- data/lib/llvm/core/bitcode_ffi.rb +92 -70
- data/lib/llvm/core/builder.rb +2 -3
- data/lib/llvm/core/context.rb +1 -1
- data/lib/llvm/core/pass_manager.rb +4 -2
- data/lib/llvm/core/type.rb +2 -2
- data/lib/llvm/core/value.rb +155 -28
- data/lib/llvm/core_ffi.rb +4038 -3716
- data/lib/llvm/execution_engine.rb +176 -8
- data/lib/llvm/execution_engine_ffi.rb +245 -272
- data/lib/llvm/linker.rb +2 -19
- data/lib/llvm/linker_ffi.rb +24 -25
- data/lib/llvm/support.rb +4 -12
- data/lib/llvm/target.rb +11 -17
- data/lib/llvm/target_ffi.rb +336 -362
- data/lib/llvm/transforms/builder.rb +8 -3
- data/lib/llvm/transforms/builder_ffi.rb +57 -58
- data/lib/llvm/transforms/ipo.rb +1 -1
- data/lib/llvm/transforms/ipo_ffi.rb +60 -61
- data/lib/llvm/transforms/scalar_ffi.rb +208 -136
- data/lib/llvm/transforms/vectorize_ffi.rb +15 -16
- data/lib/llvm/version.rb +3 -2
- data/test/basic_block_test.rb +0 -1
- data/test/bitcode_test.rb +1 -2
- data/test/call_test.rb +1 -1
- data/test/double_test.rb +8 -7
- data/test/equality_test.rb +2 -4
- data/test/function_test.rb +27 -0
- data/test/generic_value_test.rb +1 -1
- data/test/instruction_test.rb +0 -2
- data/test/ipo_test.rb +1 -1
- data/test/linker_test.rb +0 -9
- data/test/mcjit_test.rb +100 -0
- data/test/module_test.rb +31 -1
- data/test/pass_manager_builder_test.rb +23 -3
- data/test/target_test.rb +7 -24
- data/test/test_helper.rb +4 -1
- metadata +117 -94
@@ -5,12 +5,19 @@ require 'llvm/analysis'
|
|
5
5
|
require 'llvm/execution_engine_ffi'
|
6
6
|
|
7
7
|
module LLVM
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
# @abstract Subclass and override {#create_execution_engine_for_module}.
|
9
|
+
class ExecutionEngine
|
10
|
+
# Create a JIT execution engine for module with the given options.
|
11
|
+
#
|
12
|
+
# @note Important: Call #dispose to free backend memory after use. Do not call #dispose on mod any more.
|
13
|
+
#
|
14
|
+
# @param [LLVM::Module] mod module
|
15
|
+
# @param [Hash{Symbol => Object}] options options
|
16
|
+
# @return [ExecutionEngine] JIT execution engine
|
17
|
+
def initialize(mod, options)
|
11
18
|
FFI::MemoryPointer.new(FFI.type_size(:pointer)) do |ptr|
|
12
19
|
error = FFI::MemoryPointer.new(FFI.type_size(:pointer))
|
13
|
-
status =
|
20
|
+
status = create_execution_engine_for_module(ptr, mod, error, options)
|
14
21
|
errorp = error.read_pointer
|
15
22
|
message = errorp.read_string unless errorp.null?
|
16
23
|
|
@@ -18,8 +25,8 @@ module LLVM
|
|
18
25
|
@ptr = ptr.read_pointer
|
19
26
|
else
|
20
27
|
C.dispose_message(error)
|
21
|
-
error.autorelease=false
|
22
|
-
raise
|
28
|
+
error.autorelease = false
|
29
|
+
raise "Error creating JIT compiler: #{message}"
|
23
30
|
end
|
24
31
|
end
|
25
32
|
end
|
@@ -42,6 +49,13 @@ module LLVM
|
|
42
49
|
TargetDataLayout.from_ptr(C.get_execution_engine_target_data(self))
|
43
50
|
end
|
44
51
|
|
52
|
+
# Get the associated target machine.
|
53
|
+
#
|
54
|
+
# @return [TargetMachine]
|
55
|
+
def target_machine
|
56
|
+
TargetMachine.from_ptr(C.get_execution_engine_target_machine(self))
|
57
|
+
end
|
58
|
+
|
45
59
|
# Execute the given LLVM::Function with the supplied args (as
|
46
60
|
# GenericValues).
|
47
61
|
# Important: Call #dispose on the returned GenericValue to
|
@@ -49,7 +63,7 @@ module LLVM
|
|
49
63
|
def run_function(fun, *args)
|
50
64
|
FFI::MemoryPointer.new(FFI.type_size(:pointer) * args.size) do |args_ptr|
|
51
65
|
new_values = []
|
52
|
-
args_ptr.write_array_of_pointer
|
66
|
+
args_ptr.write_array_of_pointer(fun.params.zip(args).map do |p, a|
|
53
67
|
if a.kind_of?(GenericValue)
|
54
68
|
a
|
55
69
|
else
|
@@ -57,7 +71,7 @@ module LLVM
|
|
57
71
|
new_values << value
|
58
72
|
value
|
59
73
|
end
|
60
|
-
|
74
|
+
end)
|
61
75
|
result = LLVM::GenericValue.from_ptr(
|
62
76
|
C.run_function(self, fun, args.size, args_ptr))
|
63
77
|
new_values.each(&:dispose)
|
@@ -69,8 +83,162 @@ module LLVM
|
|
69
83
|
def pointer_to_global(global)
|
70
84
|
C.get_pointer_to_global(self, global)
|
71
85
|
end
|
86
|
+
|
87
|
+
def function_address(name)
|
88
|
+
C.get_function_address(self, name)
|
89
|
+
end
|
90
|
+
|
91
|
+
# Returns a ModuleCollection of all the Modules in the engine.
|
92
|
+
# @return [ModuleCollection]
|
93
|
+
def modules
|
94
|
+
@modules ||= ModuleCollection.new(self)
|
95
|
+
end
|
96
|
+
|
97
|
+
# Returns a FunctionCollection of all the Functions in the engine.
|
98
|
+
# @return [FunctionCollection]
|
99
|
+
def functions
|
100
|
+
@functions ||= FunctionCollection.new(self)
|
101
|
+
end
|
102
|
+
|
103
|
+
class ModuleCollection
|
104
|
+
# @param [ExecutionEngine] engine
|
105
|
+
def initialize(engine)
|
106
|
+
@engine = engine
|
107
|
+
end
|
108
|
+
|
109
|
+
# @param [LLVM::Module] mod
|
110
|
+
# @return [ModuleCollection]
|
111
|
+
def add(mod)
|
112
|
+
tap { C.add_module(@engine, mod) }
|
113
|
+
end
|
114
|
+
|
115
|
+
# @param [LLVM::Module] mod
|
116
|
+
# @return [LLVM::Module] deleted module
|
117
|
+
def delete(mod)
|
118
|
+
error = FFI::MemoryPointer.new(:pointer)
|
119
|
+
out_mod = FFI::MemoryPointer.new(:pointer)
|
120
|
+
|
121
|
+
status = C.remove_module(@engine, mod, out_mod, error)
|
122
|
+
|
123
|
+
if status.zero?
|
124
|
+
LLVM::Module.from_ptr(out_mod.read_pointer)
|
125
|
+
else
|
126
|
+
errorp = error.read_pointer
|
127
|
+
message = errorp.read_string unless errorp.null?
|
128
|
+
|
129
|
+
C.dispose_message(error)
|
130
|
+
error.autorelease = false
|
131
|
+
|
132
|
+
raise "Error removing module: #{message}"
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
alias_method :<<, :add
|
137
|
+
end
|
138
|
+
|
139
|
+
class FunctionCollection
|
140
|
+
# @param [ExecutionEngine] engine
|
141
|
+
def initialize(engine)
|
142
|
+
@engine = engine
|
143
|
+
end
|
144
|
+
|
145
|
+
# @param [String, Symbol] name function name
|
146
|
+
# @return [Function]
|
147
|
+
def named(name)
|
148
|
+
out_fun = FFI::MemoryPointer.new(:pointer)
|
149
|
+
|
150
|
+
status = C.find_function(@engine, name.to_s, out_fun)
|
151
|
+
return unless status.zero?
|
152
|
+
|
153
|
+
Function.from_ptr(out_fun.read_pointer)
|
154
|
+
end
|
155
|
+
|
156
|
+
alias_method :[], :named
|
157
|
+
end
|
158
|
+
|
159
|
+
protected
|
160
|
+
|
161
|
+
# Create a JIT execution engine for module with the given options.
|
162
|
+
#
|
163
|
+
# @param [FFI::Pointer(*ExecutionEngineRef)] out_ee execution engine
|
164
|
+
# @param [LLVM::Module] mod module
|
165
|
+
# @param [FFI::Pointer(**CharS)] out_error error message
|
166
|
+
# @param [Hash{Symbol => Object}] options options. `:opt_level => 3` for example.
|
167
|
+
# @return [Integer] 0 for success, non- zero to indicate an error
|
168
|
+
def create_execution_engine_for_module(out_ee, mod, out_error, options)
|
169
|
+
raise NotImplementedError, "override in subclass"
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
class MCJITCompiler < ExecutionEngine
|
174
|
+
# Create a MCJIT execution engine.
|
175
|
+
#
|
176
|
+
# @note You should call `LLVM.init_jit(true)` before creating an execution engine.
|
177
|
+
# @todo Add :mcjmm option (MCJIT memory manager)
|
178
|
+
#
|
179
|
+
# @param [LLVM::Module] mod module
|
180
|
+
# @param [Hash{Symbol => Object}] options options
|
181
|
+
# @option options [Integer] :opt_level (2) Optimization level
|
182
|
+
# @option options [Integer] :code_model (0) Code model types
|
183
|
+
# @option options [Boolean] :no_frame_pointer_elim (false) Disable frame pointer elimination optimization
|
184
|
+
# @option options [Boolean] :enable_fast_i_sel (false) Enables fast-path instruction selection
|
185
|
+
# @return [ExecutionEngine] Execution engine
|
186
|
+
def initialize(mod, options = {})
|
187
|
+
options = {
|
188
|
+
:opt_level => 2, # LLVMCodeGenLevelDefault
|
189
|
+
:code_model => 0,
|
190
|
+
:no_frame_pointer_elim => false,
|
191
|
+
:enable_fast_i_sel => false,
|
192
|
+
# TODO
|
193
|
+
#:mcjmm => nil,
|
194
|
+
}.merge(options)
|
195
|
+
|
196
|
+
super
|
197
|
+
end
|
198
|
+
|
199
|
+
def convert_type(type)
|
200
|
+
case type.kind
|
201
|
+
when :integer
|
202
|
+
if type.width <= 8
|
203
|
+
:int8
|
204
|
+
else
|
205
|
+
"int#{type.width}".to_sym
|
206
|
+
end
|
207
|
+
else
|
208
|
+
type.kind
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
def run_function(fun, *args)
|
213
|
+
args2 = fun.params.map {|e| convert_type(e.type)}
|
214
|
+
ptr = FFI::Pointer.new(function_address(fun.name))
|
215
|
+
raise "Couldn't find function" if ptr.null?
|
216
|
+
|
217
|
+
return_type = convert_type(fun.function_type.return_type)
|
218
|
+
f = FFI::Function.new(return_type, args2, ptr)
|
219
|
+
ret1 = f.call(*args)
|
220
|
+
ret2 = LLVM.make_generic_value(fun.function_type.return_type, ret1)
|
221
|
+
ret2
|
222
|
+
end
|
223
|
+
|
224
|
+
protected
|
225
|
+
|
226
|
+
def create_execution_engine_for_module(out_ee, mod, out_error, options)
|
227
|
+
mcopts = LLVM::C::MCJITCompilerOptions.new
|
228
|
+
|
229
|
+
LLVM::C.initialize_mcjit_compiler_options(mcopts, mcopts.size)
|
230
|
+
|
231
|
+
mcopts[:opt_level] = options[:opt_level]
|
232
|
+
mcopts[:code_model] = options[:code_model]
|
233
|
+
mcopts[:no_frame_pointer_elim] = options[:no_frame_pointer_elim] ? 1 : 0
|
234
|
+
mcopts[:enable_fast_i_sel] = options[:enable_fast_i_sel] ? 1 : 0
|
235
|
+
|
236
|
+
C.create_mcjit_compiler_for_module(out_ee, mod, mcopts, mcopts.size, out_error)
|
237
|
+
end
|
72
238
|
end
|
73
239
|
|
240
|
+
JITCompiler = MCJITCompiler
|
241
|
+
|
74
242
|
class GenericValue
|
75
243
|
# @private
|
76
244
|
def to_ptr
|
@@ -4,63 +4,59 @@ require 'ffi'
|
|
4
4
|
|
5
5
|
module LLVM::C
|
6
6
|
extend FFI::Library
|
7
|
-
ffi_lib
|
8
|
-
|
7
|
+
ffi_lib ["libLLVM-11.so.1", "libLLVM.so.11", "LLVM-11"]
|
8
|
+
|
9
9
|
def self.attach_function(name, *_)
|
10
10
|
begin; super; rescue FFI::NotFoundError => e
|
11
11
|
(class << self; self; end).class_eval { define_method(name) { |*_| raise e } }
|
12
12
|
end
|
13
13
|
end
|
14
|
-
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
# @
|
19
|
-
#
|
20
|
-
attach_function :link_in_jit, :LLVMLinkInJIT, [], :void
|
21
|
-
|
22
|
-
# (Not documented)
|
23
|
-
#
|
14
|
+
|
15
|
+
# @defgroup LLVMCExecutionEngine Execution Engine
|
16
|
+
# @ingroup LLVMC
|
17
|
+
#
|
18
|
+
# @{
|
19
|
+
#
|
24
20
|
# @method link_in_mcjit()
|
25
|
-
# @return [nil]
|
21
|
+
# @return [nil]
|
26
22
|
# @scope class
|
27
23
|
attach_function :link_in_mcjit, :LLVMLinkInMCJIT, [], :void
|
28
|
-
|
24
|
+
|
29
25
|
# (Not documented)
|
30
|
-
#
|
26
|
+
#
|
31
27
|
# @method link_in_interpreter()
|
32
|
-
# @return [nil]
|
28
|
+
# @return [nil]
|
33
29
|
# @scope class
|
34
30
|
attach_function :link_in_interpreter, :LLVMLinkInInterpreter, [], :void
|
35
|
-
|
31
|
+
|
36
32
|
# (Not documented)
|
37
33
|
class OpaqueGenericValue < FFI::Struct
|
38
34
|
layout :dummy, :char
|
39
35
|
end
|
40
|
-
|
36
|
+
|
41
37
|
# (Not documented)
|
42
38
|
class OpaqueExecutionEngine < FFI::Struct
|
43
39
|
layout :dummy, :char
|
44
40
|
end
|
45
|
-
|
41
|
+
|
46
42
|
# (Not documented)
|
47
43
|
class OpaqueMCJITMemoryManager < FFI::Struct
|
48
44
|
layout :dummy, :char
|
49
45
|
end
|
50
|
-
|
46
|
+
|
51
47
|
# (Not documented)
|
52
|
-
#
|
48
|
+
#
|
53
49
|
# = Fields:
|
54
50
|
# :opt_level ::
|
55
|
-
# (Integer)
|
51
|
+
# (Integer)
|
56
52
|
# :code_model ::
|
57
|
-
# (unknown)
|
53
|
+
# (unknown)
|
58
54
|
# :no_frame_pointer_elim ::
|
59
|
-
# (Integer)
|
55
|
+
# (Integer)
|
60
56
|
# :enable_fast_i_sel ::
|
61
|
-
# (Integer)
|
57
|
+
# (Integer)
|
62
58
|
# :mcjmm ::
|
63
|
-
# (OpaqueMCJITMemoryManager)
|
59
|
+
# (OpaqueMCJITMemoryManager)
|
64
60
|
class MCJITCompilerOptions < FFI::Struct
|
65
61
|
layout :opt_level, :uint,
|
66
62
|
:code_model, :char,
|
@@ -68,381 +64,358 @@ module LLVM::C
|
|
68
64
|
:enable_fast_i_sel, :int,
|
69
65
|
:mcjmm, OpaqueMCJITMemoryManager
|
70
66
|
end
|
71
|
-
|
67
|
+
|
72
68
|
# ===-- Operations on generic values --------------------------------------===
|
73
|
-
#
|
69
|
+
#
|
74
70
|
# @method create_generic_value_of_int(ty, n, is_signed)
|
75
|
-
# @param [FFI::Pointer(TypeRef)] ty
|
76
|
-
# @param [Integer] n
|
77
|
-
# @param [Integer] is_signed
|
78
|
-
# @return [OpaqueGenericValue]
|
71
|
+
# @param [FFI::Pointer(TypeRef)] ty
|
72
|
+
# @param [Integer] n
|
73
|
+
# @param [Integer] is_signed
|
74
|
+
# @return [OpaqueGenericValue]
|
79
75
|
# @scope class
|
80
76
|
attach_function :create_generic_value_of_int, :LLVMCreateGenericValueOfInt, [:pointer, :ulong_long, :int], OpaqueGenericValue
|
81
|
-
|
77
|
+
|
82
78
|
# (Not documented)
|
83
|
-
#
|
79
|
+
#
|
84
80
|
# @method create_generic_value_of_pointer(p)
|
85
|
-
# @param [FFI::Pointer(*Void)] p
|
86
|
-
# @return [OpaqueGenericValue]
|
81
|
+
# @param [FFI::Pointer(*Void)] p
|
82
|
+
# @return [OpaqueGenericValue]
|
87
83
|
# @scope class
|
88
84
|
attach_function :create_generic_value_of_pointer, :LLVMCreateGenericValueOfPointer, [:pointer], OpaqueGenericValue
|
89
|
-
|
85
|
+
|
90
86
|
# (Not documented)
|
91
|
-
#
|
87
|
+
#
|
92
88
|
# @method create_generic_value_of_float(ty, n)
|
93
|
-
# @param [FFI::Pointer(TypeRef)] ty
|
94
|
-
# @param [Float] n
|
95
|
-
# @return [OpaqueGenericValue]
|
89
|
+
# @param [FFI::Pointer(TypeRef)] ty
|
90
|
+
# @param [Float] n
|
91
|
+
# @return [OpaqueGenericValue]
|
96
92
|
# @scope class
|
97
93
|
attach_function :create_generic_value_of_float, :LLVMCreateGenericValueOfFloat, [:pointer, :double], OpaqueGenericValue
|
98
|
-
|
94
|
+
|
99
95
|
# (Not documented)
|
100
|
-
#
|
96
|
+
#
|
101
97
|
# @method generic_value_int_width(gen_val_ref)
|
102
|
-
# @param [OpaqueGenericValue] gen_val_ref
|
103
|
-
# @return [Integer]
|
98
|
+
# @param [OpaqueGenericValue] gen_val_ref
|
99
|
+
# @return [Integer]
|
104
100
|
# @scope class
|
105
101
|
attach_function :generic_value_int_width, :LLVMGenericValueIntWidth, [OpaqueGenericValue], :uint
|
106
|
-
|
102
|
+
|
107
103
|
# (Not documented)
|
108
|
-
#
|
104
|
+
#
|
109
105
|
# @method generic_value_to_int(gen_val, is_signed)
|
110
|
-
# @param [OpaqueGenericValue] gen_val
|
111
|
-
# @param [Integer] is_signed
|
112
|
-
# @return [Integer]
|
106
|
+
# @param [OpaqueGenericValue] gen_val
|
107
|
+
# @param [Integer] is_signed
|
108
|
+
# @return [Integer]
|
113
109
|
# @scope class
|
114
110
|
attach_function :generic_value_to_int, :LLVMGenericValueToInt, [OpaqueGenericValue, :int], :ulong_long
|
115
|
-
|
111
|
+
|
116
112
|
# (Not documented)
|
117
|
-
#
|
113
|
+
#
|
118
114
|
# @method generic_value_to_pointer(gen_val)
|
119
|
-
# @param [OpaqueGenericValue] gen_val
|
120
|
-
# @return [FFI::Pointer(*Void)]
|
115
|
+
# @param [OpaqueGenericValue] gen_val
|
116
|
+
# @return [FFI::Pointer(*Void)]
|
121
117
|
# @scope class
|
122
118
|
attach_function :generic_value_to_pointer, :LLVMGenericValueToPointer, [OpaqueGenericValue], :pointer
|
123
|
-
|
119
|
+
|
124
120
|
# (Not documented)
|
125
|
-
#
|
121
|
+
#
|
126
122
|
# @method generic_value_to_float(ty_ref, gen_val)
|
127
|
-
# @param [FFI::Pointer(TypeRef)] ty_ref
|
128
|
-
# @param [OpaqueGenericValue] gen_val
|
129
|
-
# @return [Float]
|
123
|
+
# @param [FFI::Pointer(TypeRef)] ty_ref
|
124
|
+
# @param [OpaqueGenericValue] gen_val
|
125
|
+
# @return [Float]
|
130
126
|
# @scope class
|
131
127
|
attach_function :generic_value_to_float, :LLVMGenericValueToFloat, [:pointer, OpaqueGenericValue], :double
|
132
|
-
|
128
|
+
|
133
129
|
# (Not documented)
|
134
|
-
#
|
130
|
+
#
|
135
131
|
# @method dispose_generic_value(gen_val)
|
136
|
-
# @param [OpaqueGenericValue] gen_val
|
137
|
-
# @return [nil]
|
132
|
+
# @param [OpaqueGenericValue] gen_val
|
133
|
+
# @return [nil]
|
138
134
|
# @scope class
|
139
135
|
attach_function :dispose_generic_value, :LLVMDisposeGenericValue, [OpaqueGenericValue], :void
|
140
|
-
|
136
|
+
|
141
137
|
# ===-- Operations on execution engines -----------------------------------===
|
142
|
-
#
|
138
|
+
#
|
143
139
|
# @method create_execution_engine_for_module(out_ee, m, out_error)
|
144
|
-
# @param [FFI::Pointer(*ExecutionEngineRef)] out_ee
|
145
|
-
# @param [FFI::Pointer(ModuleRef)] m
|
146
|
-
# @param [FFI::Pointer(**CharS)] out_error
|
147
|
-
# @return [Integer]
|
140
|
+
# @param [FFI::Pointer(*ExecutionEngineRef)] out_ee
|
141
|
+
# @param [FFI::Pointer(ModuleRef)] m
|
142
|
+
# @param [FFI::Pointer(**CharS)] out_error
|
143
|
+
# @return [Integer]
|
148
144
|
# @scope class
|
149
145
|
attach_function :create_execution_engine_for_module, :LLVMCreateExecutionEngineForModule, [:pointer, :pointer, :pointer], :int
|
150
|
-
|
146
|
+
|
151
147
|
# (Not documented)
|
152
|
-
#
|
148
|
+
#
|
153
149
|
# @method create_interpreter_for_module(out_interp, m, out_error)
|
154
|
-
# @param [FFI::Pointer(*ExecutionEngineRef)] out_interp
|
155
|
-
# @param [FFI::Pointer(ModuleRef)] m
|
156
|
-
# @param [FFI::Pointer(**CharS)] out_error
|
157
|
-
# @return [Integer]
|
150
|
+
# @param [FFI::Pointer(*ExecutionEngineRef)] out_interp
|
151
|
+
# @param [FFI::Pointer(ModuleRef)] m
|
152
|
+
# @param [FFI::Pointer(**CharS)] out_error
|
153
|
+
# @return [Integer]
|
158
154
|
# @scope class
|
159
155
|
attach_function :create_interpreter_for_module, :LLVMCreateInterpreterForModule, [:pointer, :pointer, :pointer], :int
|
160
|
-
|
156
|
+
|
161
157
|
# (Not documented)
|
162
|
-
#
|
158
|
+
#
|
163
159
|
# @method create_jit_compiler_for_module(out_jit, m, opt_level, out_error)
|
164
|
-
# @param [FFI::Pointer(*ExecutionEngineRef)] out_jit
|
165
|
-
# @param [FFI::Pointer(ModuleRef)] m
|
166
|
-
# @param [Integer] opt_level
|
167
|
-
# @param [FFI::Pointer(**CharS)] out_error
|
168
|
-
# @return [Integer]
|
160
|
+
# @param [FFI::Pointer(*ExecutionEngineRef)] out_jit
|
161
|
+
# @param [FFI::Pointer(ModuleRef)] m
|
162
|
+
# @param [Integer] opt_level
|
163
|
+
# @param [FFI::Pointer(**CharS)] out_error
|
164
|
+
# @return [Integer]
|
169
165
|
# @scope class
|
170
166
|
attach_function :create_jit_compiler_for_module, :LLVMCreateJITCompilerForModule, [:pointer, :pointer, :uint, :pointer], :int
|
171
|
-
|
167
|
+
|
172
168
|
# (Not documented)
|
173
|
-
#
|
169
|
+
#
|
174
170
|
# @method initialize_mcjit_compiler_options(options, size_of_options)
|
175
|
-
# @param [MCJITCompilerOptions] options
|
176
|
-
# @param [Integer] size_of_options
|
177
|
-
# @return [nil]
|
171
|
+
# @param [MCJITCompilerOptions] options
|
172
|
+
# @param [Integer] size_of_options
|
173
|
+
# @return [nil]
|
178
174
|
# @scope class
|
179
175
|
attach_function :initialize_mcjit_compiler_options, :LLVMInitializeMCJITCompilerOptions, [MCJITCompilerOptions, :ulong], :void
|
180
|
-
|
176
|
+
|
181
177
|
# Create an MCJIT execution engine for a module, with the given options. It is
|
182
178
|
# the responsibility of the caller to ensure that all fields in Options up to
|
183
179
|
# the given SizeOfOptions are initialized. It is correct to pass a smaller
|
184
180
|
# value of SizeOfOptions that omits some fields. The canonical way of using
|
185
181
|
# this is:
|
186
|
-
#
|
182
|
+
#
|
187
183
|
# LLVMMCJITCompilerOptions options;
|
188
184
|
# LLVMInitializeMCJITCompilerOptions(&options, sizeof(options));
|
189
185
|
# ... fill in those options you care about
|
190
186
|
# LLVMCreateMCJITCompilerForModule(&jit, mod, &options, sizeof(options),
|
191
187
|
# &error);
|
192
|
-
#
|
188
|
+
#
|
193
189
|
# Note that this is also correct, though possibly suboptimal:
|
194
|
-
#
|
190
|
+
#
|
195
191
|
# LLVMCreateMCJITCompilerForModule(&jit, mod, 0, 0, &error);
|
196
|
-
#
|
192
|
+
#
|
197
193
|
# @method create_mcjit_compiler_for_module(out_jit, m, options, size_of_options, out_error)
|
198
|
-
# @param [FFI::Pointer(*ExecutionEngineRef)] out_jit
|
199
|
-
# @param [FFI::Pointer(ModuleRef)] m
|
200
|
-
# @param [MCJITCompilerOptions] options
|
201
|
-
# @param [Integer] size_of_options
|
202
|
-
# @param [FFI::Pointer(**CharS)] out_error
|
203
|
-
# @return [Integer]
|
194
|
+
# @param [FFI::Pointer(*ExecutionEngineRef)] out_jit
|
195
|
+
# @param [FFI::Pointer(ModuleRef)] m
|
196
|
+
# @param [MCJITCompilerOptions] options
|
197
|
+
# @param [Integer] size_of_options
|
198
|
+
# @param [FFI::Pointer(**CharS)] out_error
|
199
|
+
# @return [Integer]
|
204
200
|
# @scope class
|
205
201
|
attach_function :create_mcjit_compiler_for_module, :LLVMCreateMCJITCompilerForModule, [:pointer, :pointer, MCJITCompilerOptions, :ulong, :pointer], :int
|
206
|
-
|
207
|
-
#
|
208
|
-
#
|
209
|
-
# @method create_execution_engine(out_ee, mp, out_error)
|
210
|
-
# @param [FFI::Pointer(*ExecutionEngineRef)] out_ee
|
211
|
-
# @param [FFI::Pointer(ModuleProviderRef)] mp
|
212
|
-
# @param [FFI::Pointer(**CharS)] out_error
|
213
|
-
# @return [Integer]
|
214
|
-
# @scope class
|
215
|
-
attach_function :create_execution_engine, :LLVMCreateExecutionEngine, [:pointer, :pointer, :pointer], :int
|
216
|
-
|
217
|
-
# Deprecated: Use LLVMCreateInterpreterForModule instead.
|
218
|
-
#
|
219
|
-
# @method create_interpreter(out_interp, mp, out_error)
|
220
|
-
# @param [FFI::Pointer(*ExecutionEngineRef)] out_interp
|
221
|
-
# @param [FFI::Pointer(ModuleProviderRef)] mp
|
222
|
-
# @param [FFI::Pointer(**CharS)] out_error
|
223
|
-
# @return [Integer]
|
224
|
-
# @scope class
|
225
|
-
attach_function :create_interpreter, :LLVMCreateInterpreter, [:pointer, :pointer, :pointer], :int
|
226
|
-
|
227
|
-
# Deprecated: Use LLVMCreateJITCompilerForModule instead.
|
228
|
-
#
|
229
|
-
# @method create_jit_compiler(out_jit, mp, opt_level, out_error)
|
230
|
-
# @param [FFI::Pointer(*ExecutionEngineRef)] out_jit
|
231
|
-
# @param [FFI::Pointer(ModuleProviderRef)] mp
|
232
|
-
# @param [Integer] opt_level
|
233
|
-
# @param [FFI::Pointer(**CharS)] out_error
|
234
|
-
# @return [Integer]
|
235
|
-
# @scope class
|
236
|
-
attach_function :create_jit_compiler, :LLVMCreateJITCompiler, [:pointer, :pointer, :uint, :pointer], :int
|
237
|
-
|
238
|
-
# (Not documented)
|
239
|
-
#
|
202
|
+
|
203
|
+
# (Not documented)
|
204
|
+
#
|
240
205
|
# @method dispose_execution_engine(ee)
|
241
|
-
# @param [OpaqueExecutionEngine] ee
|
242
|
-
# @return [nil]
|
206
|
+
# @param [OpaqueExecutionEngine] ee
|
207
|
+
# @return [nil]
|
243
208
|
# @scope class
|
244
209
|
attach_function :dispose_execution_engine, :LLVMDisposeExecutionEngine, [OpaqueExecutionEngine], :void
|
245
|
-
|
210
|
+
|
246
211
|
# (Not documented)
|
247
|
-
#
|
212
|
+
#
|
248
213
|
# @method run_static_constructors(ee)
|
249
|
-
# @param [OpaqueExecutionEngine] ee
|
250
|
-
# @return [nil]
|
214
|
+
# @param [OpaqueExecutionEngine] ee
|
215
|
+
# @return [nil]
|
251
216
|
# @scope class
|
252
217
|
attach_function :run_static_constructors, :LLVMRunStaticConstructors, [OpaqueExecutionEngine], :void
|
253
|
-
|
218
|
+
|
254
219
|
# (Not documented)
|
255
|
-
#
|
220
|
+
#
|
256
221
|
# @method run_static_destructors(ee)
|
257
|
-
# @param [OpaqueExecutionEngine] ee
|
258
|
-
# @return [nil]
|
222
|
+
# @param [OpaqueExecutionEngine] ee
|
223
|
+
# @return [nil]
|
259
224
|
# @scope class
|
260
225
|
attach_function :run_static_destructors, :LLVMRunStaticDestructors, [OpaqueExecutionEngine], :void
|
261
|
-
|
226
|
+
|
262
227
|
# (Not documented)
|
263
|
-
#
|
228
|
+
#
|
264
229
|
# @method run_function_as_main(ee, f, arg_c, arg_v, env_p)
|
265
|
-
# @param [OpaqueExecutionEngine] ee
|
266
|
-
# @param [FFI::Pointer(ValueRef)] f
|
267
|
-
# @param [Integer] arg_c
|
268
|
-
# @param [FFI::Pointer(**CharS)] arg_v
|
269
|
-
# @param [FFI::Pointer(**CharS)] env_p
|
270
|
-
# @return [Integer]
|
230
|
+
# @param [OpaqueExecutionEngine] ee
|
231
|
+
# @param [FFI::Pointer(ValueRef)] f
|
232
|
+
# @param [Integer] arg_c
|
233
|
+
# @param [FFI::Pointer(**CharS)] arg_v
|
234
|
+
# @param [FFI::Pointer(**CharS)] env_p
|
235
|
+
# @return [Integer]
|
271
236
|
# @scope class
|
272
237
|
attach_function :run_function_as_main, :LLVMRunFunctionAsMain, [OpaqueExecutionEngine, :pointer, :uint, :pointer, :pointer], :int
|
273
|
-
|
238
|
+
|
274
239
|
# (Not documented)
|
275
|
-
#
|
240
|
+
#
|
276
241
|
# @method run_function(ee, f, num_args, args)
|
277
|
-
# @param [OpaqueExecutionEngine] ee
|
278
|
-
# @param [FFI::Pointer(ValueRef)] f
|
279
|
-
# @param [Integer] num_args
|
280
|
-
# @param [FFI::Pointer(*GenericValueRef)] args
|
281
|
-
# @return [OpaqueGenericValue]
|
242
|
+
# @param [OpaqueExecutionEngine] ee
|
243
|
+
# @param [FFI::Pointer(ValueRef)] f
|
244
|
+
# @param [Integer] num_args
|
245
|
+
# @param [FFI::Pointer(*GenericValueRef)] args
|
246
|
+
# @return [OpaqueGenericValue]
|
282
247
|
# @scope class
|
283
248
|
attach_function :run_function, :LLVMRunFunction, [OpaqueExecutionEngine, :pointer, :uint, :pointer], OpaqueGenericValue
|
284
|
-
|
249
|
+
|
285
250
|
# (Not documented)
|
286
|
-
#
|
251
|
+
#
|
287
252
|
# @method free_machine_code_for_function(ee, f)
|
288
|
-
# @param [OpaqueExecutionEngine] ee
|
289
|
-
# @param [FFI::Pointer(ValueRef)] f
|
290
|
-
# @return [nil]
|
253
|
+
# @param [OpaqueExecutionEngine] ee
|
254
|
+
# @param [FFI::Pointer(ValueRef)] f
|
255
|
+
# @return [nil]
|
291
256
|
# @scope class
|
292
257
|
attach_function :free_machine_code_for_function, :LLVMFreeMachineCodeForFunction, [OpaqueExecutionEngine, :pointer], :void
|
293
|
-
|
258
|
+
|
294
259
|
# (Not documented)
|
295
|
-
#
|
260
|
+
#
|
296
261
|
# @method add_module(ee, m)
|
297
|
-
# @param [OpaqueExecutionEngine] ee
|
298
|
-
# @param [FFI::Pointer(ModuleRef)] m
|
299
|
-
# @return [nil]
|
262
|
+
# @param [OpaqueExecutionEngine] ee
|
263
|
+
# @param [FFI::Pointer(ModuleRef)] m
|
264
|
+
# @return [nil]
|
300
265
|
# @scope class
|
301
266
|
attach_function :add_module, :LLVMAddModule, [OpaqueExecutionEngine, :pointer], :void
|
302
|
-
|
303
|
-
#
|
304
|
-
#
|
305
|
-
# @method add_module_provider(ee, mp)
|
306
|
-
# @param [OpaqueExecutionEngine] ee
|
307
|
-
# @param [FFI::Pointer(ModuleProviderRef)] mp
|
308
|
-
# @return [nil]
|
309
|
-
# @scope class
|
310
|
-
attach_function :add_module_provider, :LLVMAddModuleProvider, [OpaqueExecutionEngine, :pointer], :void
|
311
|
-
|
312
|
-
# (Not documented)
|
313
|
-
#
|
267
|
+
|
268
|
+
# (Not documented)
|
269
|
+
#
|
314
270
|
# @method remove_module(ee, m, out_mod, out_error)
|
315
|
-
# @param [OpaqueExecutionEngine] ee
|
316
|
-
# @param [FFI::Pointer(ModuleRef)] m
|
317
|
-
# @param [FFI::Pointer(*ModuleRef)] out_mod
|
318
|
-
# @param [FFI::Pointer(**CharS)] out_error
|
319
|
-
# @return [Integer]
|
271
|
+
# @param [OpaqueExecutionEngine] ee
|
272
|
+
# @param [FFI::Pointer(ModuleRef)] m
|
273
|
+
# @param [FFI::Pointer(*ModuleRef)] out_mod
|
274
|
+
# @param [FFI::Pointer(**CharS)] out_error
|
275
|
+
# @return [Integer]
|
320
276
|
# @scope class
|
321
277
|
attach_function :remove_module, :LLVMRemoveModule, [OpaqueExecutionEngine, :pointer, :pointer, :pointer], :int
|
322
|
-
|
323
|
-
#
|
324
|
-
#
|
325
|
-
# @method remove_module_provider(ee, mp, out_mod, out_error)
|
326
|
-
# @param [OpaqueExecutionEngine] ee
|
327
|
-
# @param [FFI::Pointer(ModuleProviderRef)] mp
|
328
|
-
# @param [FFI::Pointer(*ModuleRef)] out_mod
|
329
|
-
# @param [FFI::Pointer(**CharS)] out_error
|
330
|
-
# @return [Integer]
|
331
|
-
# @scope class
|
332
|
-
attach_function :remove_module_provider, :LLVMRemoveModuleProvider, [OpaqueExecutionEngine, :pointer, :pointer, :pointer], :int
|
333
|
-
|
334
|
-
# (Not documented)
|
335
|
-
#
|
278
|
+
|
279
|
+
# (Not documented)
|
280
|
+
#
|
336
281
|
# @method find_function(ee, name, out_fn)
|
337
|
-
# @param [OpaqueExecutionEngine] ee
|
338
|
-
# @param [String] name
|
339
|
-
# @param [FFI::Pointer(*ValueRef)] out_fn
|
340
|
-
# @return [Integer]
|
282
|
+
# @param [OpaqueExecutionEngine] ee
|
283
|
+
# @param [String] name
|
284
|
+
# @param [FFI::Pointer(*ValueRef)] out_fn
|
285
|
+
# @return [Integer]
|
341
286
|
# @scope class
|
342
287
|
attach_function :find_function, :LLVMFindFunction, [OpaqueExecutionEngine, :string, :pointer], :int
|
343
|
-
|
288
|
+
|
344
289
|
# (Not documented)
|
345
|
-
#
|
290
|
+
#
|
346
291
|
# @method recompile_and_relink_function(ee, fn)
|
347
|
-
# @param [OpaqueExecutionEngine] ee
|
348
|
-
# @param [FFI::Pointer(ValueRef)] fn
|
349
|
-
# @return [FFI::Pointer(*Void)]
|
292
|
+
# @param [OpaqueExecutionEngine] ee
|
293
|
+
# @param [FFI::Pointer(ValueRef)] fn
|
294
|
+
# @return [FFI::Pointer(*Void)]
|
350
295
|
# @scope class
|
351
296
|
attach_function :recompile_and_relink_function, :LLVMRecompileAndRelinkFunction, [OpaqueExecutionEngine, :pointer], :pointer
|
352
|
-
|
297
|
+
|
353
298
|
# (Not documented)
|
354
|
-
#
|
299
|
+
#
|
355
300
|
# @method get_execution_engine_target_data(ee)
|
356
|
-
# @param [OpaqueExecutionEngine] ee
|
357
|
-
# @return [FFI::Pointer(TargetDataRef)]
|
301
|
+
# @param [OpaqueExecutionEngine] ee
|
302
|
+
# @return [FFI::Pointer(TargetDataRef)]
|
358
303
|
# @scope class
|
359
304
|
attach_function :get_execution_engine_target_data, :LLVMGetExecutionEngineTargetData, [OpaqueExecutionEngine], :pointer
|
360
|
-
|
305
|
+
|
361
306
|
# (Not documented)
|
362
|
-
#
|
307
|
+
#
|
308
|
+
# @method get_execution_engine_target_machine(ee)
|
309
|
+
# @param [OpaqueExecutionEngine] ee
|
310
|
+
# @return [FFI::Pointer(TargetMachineRef)]
|
311
|
+
# @scope class
|
312
|
+
attach_function :get_execution_engine_target_machine, :LLVMGetExecutionEngineTargetMachine, [OpaqueExecutionEngine], :pointer
|
313
|
+
|
314
|
+
# (Not documented)
|
315
|
+
#
|
363
316
|
# @method add_global_mapping(ee, global, addr)
|
364
|
-
# @param [OpaqueExecutionEngine] ee
|
365
|
-
# @param [FFI::Pointer(ValueRef)] global
|
366
|
-
# @param [FFI::Pointer(*Void)] addr
|
367
|
-
# @return [nil]
|
317
|
+
# @param [OpaqueExecutionEngine] ee
|
318
|
+
# @param [FFI::Pointer(ValueRef)] global
|
319
|
+
# @param [FFI::Pointer(*Void)] addr
|
320
|
+
# @return [nil]
|
368
321
|
# @scope class
|
369
322
|
attach_function :add_global_mapping, :LLVMAddGlobalMapping, [OpaqueExecutionEngine, :pointer, :pointer], :void
|
370
|
-
|
323
|
+
|
371
324
|
# (Not documented)
|
372
|
-
#
|
325
|
+
#
|
373
326
|
# @method get_pointer_to_global(ee, global)
|
374
|
-
# @param [OpaqueExecutionEngine] ee
|
375
|
-
# @param [FFI::Pointer(ValueRef)] global
|
376
|
-
# @return [FFI::Pointer(*Void)]
|
327
|
+
# @param [OpaqueExecutionEngine] ee
|
328
|
+
# @param [FFI::Pointer(ValueRef)] global
|
329
|
+
# @return [FFI::Pointer(*Void)]
|
377
330
|
# @scope class
|
378
331
|
attach_function :get_pointer_to_global, :LLVMGetPointerToGlobal, [OpaqueExecutionEngine, :pointer], :pointer
|
379
|
-
|
332
|
+
|
333
|
+
# (Not documented)
|
334
|
+
#
|
335
|
+
# @method get_global_value_address(ee, name)
|
336
|
+
# @param [OpaqueExecutionEngine] ee
|
337
|
+
# @param [String] name
|
338
|
+
# @return [Integer]
|
339
|
+
# @scope class
|
340
|
+
attach_function :get_global_value_address, :LLVMGetGlobalValueAddress, [OpaqueExecutionEngine, :string], :ulong
|
341
|
+
|
342
|
+
# (Not documented)
|
343
|
+
#
|
344
|
+
# @method get_function_address(ee, name)
|
345
|
+
# @param [OpaqueExecutionEngine] ee
|
346
|
+
# @param [String] name
|
347
|
+
# @return [Integer]
|
348
|
+
# @scope class
|
349
|
+
attach_function :get_function_address, :LLVMGetFunctionAddress, [OpaqueExecutionEngine, :string], :ulong
|
350
|
+
|
380
351
|
# ===-- Operations on memory managers -------------------------------------===
|
381
|
-
#
|
352
|
+
#
|
382
353
|
# <em>This entry is only for documentation and no real method.</em>
|
383
|
-
#
|
384
|
-
# @method _callback_memory_manager_allocate_code_section_callback_(opaque, size, alignment, section_id, section_name)
|
385
|
-
# @param [
|
386
|
-
# @param [
|
387
|
-
# @param [Integer]
|
388
|
-
# @param [Integer]
|
389
|
-
# @param [
|
390
|
-
# @
|
391
|
-
# @
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
#
|
354
|
+
#
|
355
|
+
# @method _callback_memory_manager_allocate_code_section_callback_(uint8_t, opaque, size, alignment, section_id, section_name)
|
356
|
+
# @param [Integer] uint8_t
|
357
|
+
# @param [FFI::Pointer(*Void)] opaque
|
358
|
+
# @param [Integer] size
|
359
|
+
# @param [Integer] alignment
|
360
|
+
# @param [Integer] section_id
|
361
|
+
# @param [String] section_name
|
362
|
+
# @return [Integer]
|
363
|
+
# @scope class
|
364
|
+
callback :memory_manager_allocate_code_section_callback, [:uchar, :pointer, :ulong, :uint, :uint, :string], :uchar
|
365
|
+
|
366
|
+
# (Not documented)
|
367
|
+
#
|
396
368
|
# <em>This entry is only for documentation and no real method.</em>
|
397
|
-
#
|
398
|
-
# @method _callback_memory_manager_allocate_data_section_callback_(opaque, size, alignment, section_id, section_name, is_read_only)
|
399
|
-
# @param [
|
400
|
-
# @param [
|
401
|
-
# @param [Integer]
|
402
|
-
# @param [Integer]
|
403
|
-
# @param [
|
404
|
-
# @param [
|
405
|
-
# @
|
406
|
-
# @
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
#
|
369
|
+
#
|
370
|
+
# @method _callback_memory_manager_allocate_data_section_callback_(uint8_t, opaque, size, alignment, section_id, section_name, is_read_only)
|
371
|
+
# @param [Integer] uint8_t
|
372
|
+
# @param [FFI::Pointer(*Void)] opaque
|
373
|
+
# @param [Integer] size
|
374
|
+
# @param [Integer] alignment
|
375
|
+
# @param [Integer] section_id
|
376
|
+
# @param [String] section_name
|
377
|
+
# @param [Integer] is_read_only
|
378
|
+
# @return [Integer]
|
379
|
+
# @scope class
|
380
|
+
callback :memory_manager_allocate_data_section_callback, [:uchar, :pointer, :ulong, :uint, :uint, :string, :int], :uchar
|
381
|
+
|
382
|
+
# (Not documented)
|
383
|
+
#
|
411
384
|
# <em>This entry is only for documentation and no real method.</em>
|
412
|
-
#
|
413
|
-
# @method _callback_memory_manager_finalize_memory_callback_(opaque, err_msg)
|
414
|
-
# @param [
|
415
|
-
# @param [FFI::Pointer(
|
416
|
-
# @
|
417
|
-
# @
|
418
|
-
|
419
|
-
|
385
|
+
#
|
386
|
+
# @method _callback_memory_manager_finalize_memory_callback_(bool, opaque, err_msg)
|
387
|
+
# @param [Integer] bool
|
388
|
+
# @param [FFI::Pointer(*Void)] opaque
|
389
|
+
# @param [FFI::Pointer(**CharS)] err_msg
|
390
|
+
# @return [Integer]
|
391
|
+
# @scope class
|
392
|
+
callback :memory_manager_finalize_memory_callback, [:int, :pointer, :pointer], :int
|
393
|
+
|
420
394
|
# Create a simple custom MCJIT memory manager. This memory manager can
|
421
395
|
# intercept allocations in a module-oblivious way. This will return NULL
|
422
396
|
# if any of the passed functions are NULL.
|
423
|
-
#
|
397
|
+
#
|
424
398
|
# @param Opaque An opaque client object to pass back to the callbacks.
|
425
399
|
# @param AllocateCodeSection Allocate a block of memory for executable code.
|
426
400
|
# @param AllocateDataSection Allocate a block of memory for data.
|
427
401
|
# @param FinalizeMemory Set page permissions and flush cache. Return 0 on
|
428
402
|
# success, 1 on error.
|
429
|
-
#
|
403
|
+
#
|
430
404
|
# @method create_simple_mcjit_memory_manager(opaque, allocate_code_section, allocate_data_section, finalize_memory, destroy)
|
431
|
-
# @param [FFI::Pointer(*Void)] opaque
|
432
|
-
# @param [Proc(_callback_memory_manager_allocate_code_section_callback_)] allocate_code_section
|
433
|
-
# @param [Proc(_callback_memory_manager_allocate_data_section_callback_)] allocate_data_section
|
434
|
-
# @param [Proc(_callback_memory_manager_finalize_memory_callback_)] finalize_memory
|
435
|
-
# @param [FFI::Pointer(MemoryManagerDestroyCallback)] destroy
|
436
|
-
# @return [OpaqueMCJITMemoryManager]
|
405
|
+
# @param [FFI::Pointer(*Void)] opaque
|
406
|
+
# @param [Proc(_callback_memory_manager_allocate_code_section_callback_)] allocate_code_section
|
407
|
+
# @param [Proc(_callback_memory_manager_allocate_data_section_callback_)] allocate_data_section
|
408
|
+
# @param [Proc(_callback_memory_manager_finalize_memory_callback_)] finalize_memory
|
409
|
+
# @param [FFI::Pointer(MemoryManagerDestroyCallback)] destroy
|
410
|
+
# @return [OpaqueMCJITMemoryManager]
|
437
411
|
# @scope class
|
438
412
|
attach_function :create_simple_mcjit_memory_manager, :LLVMCreateSimpleMCJITMemoryManager, [:pointer, :memory_manager_allocate_code_section_callback, :memory_manager_allocate_data_section_callback, :memory_manager_finalize_memory_callback, :pointer], OpaqueMCJITMemoryManager
|
439
|
-
|
413
|
+
|
440
414
|
# (Not documented)
|
441
|
-
#
|
415
|
+
#
|
442
416
|
# @method dispose_mcjit_memory_manager(mm)
|
443
|
-
# @param [OpaqueMCJITMemoryManager] mm
|
444
|
-
# @return [nil]
|
417
|
+
# @param [OpaqueMCJITMemoryManager] mm
|
418
|
+
# @return [nil]
|
445
419
|
# @scope class
|
446
420
|
attach_function :dispose_mcjit_memory_manager, :LLVMDisposeMCJITMemoryManager, [OpaqueMCJITMemoryManager], :void
|
447
|
-
|
448
421
|
end
|