ruby-llvm 3.4.0 → 11.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/lib/llvm/linker.rb
CHANGED
@@ -9,25 +9,8 @@ module LLVM
|
|
9
9
|
# @return [nil, String] human-readable error if linking has failed
|
10
10
|
def link_into(other)
|
11
11
|
LLVM.with_message_output do |msg|
|
12
|
-
|
13
|
-
# some reason. It is inlined as a constant here.
|
14
|
-
|
15
|
-
# C.link_modules(mod, self, :linker_preserve_source, msg)
|
16
|
-
C.link_modules(other, self, 1, msg)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# Link the current module into +other+, and dispose the current module.
|
21
|
-
#
|
22
|
-
# @return [nil, String] human-readable error if linking has failed
|
23
|
-
def link_into_and_destroy(other)
|
24
|
-
result = LLVM.with_message_output do |msg|
|
25
|
-
C.link_modules(other, self, :linker_destroy_source, msg)
|
12
|
+
C.link_modules2(other, self)
|
26
13
|
end
|
27
|
-
|
28
|
-
@ptr = nil
|
29
|
-
|
30
|
-
result
|
31
14
|
end
|
32
15
|
end
|
33
|
-
end
|
16
|
+
end
|
data/lib/llvm/linker_ffi.rb
CHANGED
@@ -4,42 +4,41 @@ 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
|
-
#
|
14
|
+
|
15
|
+
# This enum is provided for backwards-compatibility only. It has no effect.
|
16
|
+
#
|
17
17
|
# <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:linker_mode).</em>
|
18
|
-
#
|
18
|
+
#
|
19
19
|
# === Options:
|
20
|
-
# :
|
21
|
-
#
|
22
|
-
#
|
20
|
+
# :destroy_source ::
|
21
|
+
#
|
22
|
+
# :preserve_source_removed ::
|
23
|
+
# This is the default behavior.
|
24
|
+
#
|
23
25
|
# @method _enum_linker_mode_
|
24
26
|
# @return [Symbol]
|
25
27
|
# @scope class
|
26
28
|
enum :linker_mode, [
|
27
|
-
:
|
29
|
+
:destroy_source, 0,
|
30
|
+
:preserve_source_removed, 1
|
28
31
|
]
|
29
|
-
|
30
|
-
# Links the source module into the destination module
|
31
|
-
#
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
# @
|
37
|
-
# @param [FFI::Pointer(ModuleRef)]
|
38
|
-
# @
|
39
|
-
# @param [Symbol from _enum_linker_mode_] mode
|
40
|
-
# @param [FFI::Pointer(**CharS)] out_message
|
41
|
-
# @return [Integer]
|
32
|
+
|
33
|
+
# Links the source module into the destination module. The source module is
|
34
|
+
# destroyed.
|
35
|
+
# The return value is true if an error occurred, false otherwise.
|
36
|
+
# Use the diagnostic handler to get any diagnostic message.
|
37
|
+
#
|
38
|
+
# @method link_modules2(dest, src)
|
39
|
+
# @param [FFI::Pointer(ModuleRef)] dest
|
40
|
+
# @param [FFI::Pointer(ModuleRef)] src
|
41
|
+
# @return [Integer]
|
42
42
|
# @scope class
|
43
|
-
attach_function :
|
44
|
-
|
43
|
+
attach_function :link_modules2, :LLVMLinkModules2, [:pointer, :pointer], :int
|
45
44
|
end
|
data/lib/llvm/support.rb
CHANGED
@@ -8,18 +8,10 @@ module LLVM
|
|
8
8
|
module C
|
9
9
|
extend FFI::Library
|
10
10
|
|
11
|
-
OpaqueValue = LLVM::C::OpaqueValue
|
12
|
-
OpaqueType = LLVM::C::OpaqueType
|
13
|
-
OpaqueModule = LLVM::C::OpaqueModule
|
14
|
-
|
15
11
|
lib_name = FFI.map_library_name("RubyLLVMSupport-#{LLVM_VERSION}")
|
16
12
|
lib_path = File.expand_path("../../ext/ruby-llvm-support/#{lib_name}", File.dirname(__FILE__))
|
17
13
|
ffi_lib [lib_path]
|
18
14
|
|
19
|
-
attach_function :load_library_permanently, :LLVMLoadLibraryPermanently, [:string], :int
|
20
|
-
attach_function :has_unnamed_addr, :LLVMHasUnnamedAddr, [OpaqueValue], :int
|
21
|
-
attach_function :set_unnamed_addr, :LLVMSetUnnamedAddr, [OpaqueValue, :int], :void
|
22
|
-
|
23
15
|
attach_function :initialize_all_target_infos,
|
24
16
|
:LLVMInitializeAllTargetInfos, [], :void
|
25
17
|
attach_function :initialize_all_targets,
|
@@ -36,11 +28,11 @@ module LLVM
|
|
36
28
|
end
|
37
29
|
end
|
38
30
|
|
39
|
-
def load_library(libname)
|
40
|
-
|
31
|
+
def self.load_library(libname)
|
32
|
+
if C.load_library_permanently(libname) != 0
|
33
|
+
raise "LLVM::Support.load_library failed"
|
34
|
+
end
|
41
35
|
|
42
36
|
nil
|
43
37
|
end
|
44
|
-
|
45
|
-
module_function :load_library
|
46
38
|
end
|
data/lib/llvm/target.rb
CHANGED
@@ -4,8 +4,8 @@ require 'llvm/target_ffi'
|
|
4
4
|
|
5
5
|
module LLVM
|
6
6
|
# A shorthand for {LLVM::Target.init_native}
|
7
|
-
def self.init_jit
|
8
|
-
LLVM::Target.init_native
|
7
|
+
def self.init_jit(*args)
|
8
|
+
LLVM::Target.init_native(*args)
|
9
9
|
end
|
10
10
|
|
11
11
|
# @deprecated Use LLVM.init_jit or LLVM::Target.init('X86').
|
@@ -20,7 +20,7 @@ module LLVM
|
|
20
20
|
#
|
21
21
|
# @param [String] target Target name in LLVM format, e.g. "X86", "ARM" or "PowerPC".
|
22
22
|
# @param [true, false] asm_printer Initialize corresponding AsmPrinter.
|
23
|
-
def self.init(target, asm_printer=false)
|
23
|
+
def self.init(target, asm_printer = false)
|
24
24
|
C.module_eval do
|
25
25
|
attach_function :"initialize_target_info_#{target}",
|
26
26
|
:"LLVMInitialize#{target}TargetInfo", [], :void
|
@@ -57,7 +57,7 @@ module LLVM
|
|
57
57
|
# Initializes all available targets.
|
58
58
|
#
|
59
59
|
# @param [true, false] asm_printer Initialize corresponding AsmPrinters.
|
60
|
-
def self.init_all(asm_printer=false)
|
60
|
+
def self.init_all(asm_printer = false)
|
61
61
|
Support::C.initialize_all_target_infos
|
62
62
|
Support::C.initialize_all_targets
|
63
63
|
Support::C.initialize_all_target_mcs
|
@@ -68,7 +68,8 @@ module LLVM
|
|
68
68
|
# Initializes native target. Useful for JIT applications.
|
69
69
|
#
|
70
70
|
# @param [true, false] asm_printer Initialize corresponding AsmPrinter.
|
71
|
-
|
71
|
+
# True by default, as this is required for MCJIT to function.
|
72
|
+
def self.init_native(asm_printer = true)
|
72
73
|
Support::C.initialize_native_target
|
73
74
|
|
74
75
|
Support::C.initialize_native_asm_printer if asm_printer
|
@@ -144,8 +145,8 @@ module LLVM
|
|
144
145
|
# @param [Symbol] reloc :default, :static, :pic, :dynamic_no_pic
|
145
146
|
# @param [Symbol] code_model :default, :jit_default, :small, :kernel, :medium, :large
|
146
147
|
# @return [TargetMachine]
|
147
|
-
def create_machine(triple, cpu="", features="",
|
148
|
-
opt_level
|
148
|
+
def create_machine(triple, cpu = "", features = "",
|
149
|
+
opt_level = :default, reloc = :default, code_model = :default)
|
149
150
|
TargetMachine.from_ptr(C.create_target_machine(self,
|
150
151
|
triple, cpu, features, opt_level, reloc, code_model))
|
151
152
|
end
|
@@ -191,17 +192,10 @@ module LLVM
|
|
191
192
|
C.get_target_machine_feature_string(self)
|
192
193
|
end
|
193
194
|
|
194
|
-
# Returns the data layout used for this target machine.
|
195
|
-
#
|
196
|
-
# @return [TargetDataLayout]
|
197
|
-
def data_layout
|
198
|
-
TargetDataLayout.from_ptr(C.get_target_machine_data(self))
|
199
|
-
end
|
200
|
-
|
201
195
|
# Emits an asm or object file for the given module.
|
202
196
|
#
|
203
197
|
# @param [Symbol] codegen :assembly, :object
|
204
|
-
def emit(mod, filename, codegen
|
198
|
+
def emit(mod, filename, codegen = :assembly)
|
205
199
|
LLVM.with_error_output do |err|
|
206
200
|
C.target_machine_emit_to_file(self, mod, filename.to_s, codegen, err)
|
207
201
|
end
|
@@ -262,14 +256,14 @@ module LLVM
|
|
262
256
|
# Returns the pointer size in bytes for a target.
|
263
257
|
#
|
264
258
|
# @param [Integer] addr_space address space number
|
265
|
-
def pointer_size(addr_space=0)
|
259
|
+
def pointer_size(addr_space = 0)
|
266
260
|
C.pointer_size_for_as(self, addr_space)
|
267
261
|
end
|
268
262
|
|
269
263
|
# Returns the integer type that is the same size as a pointer on a target.
|
270
264
|
#
|
271
265
|
# @param [Integer] addr_space address space number
|
272
|
-
def int_ptr_type(addr_space=0)
|
266
|
+
def int_ptr_type(addr_space = 0)
|
273
267
|
Type.from_ptr(C.int_ptr_type_for_as(self, addr_space), :integer)
|
274
268
|
end
|
275
269
|
|
data/lib/llvm/target_ffi.rb
CHANGED
@@ -4,24 +4,24 @@ 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
|
-
|
14
|
+
|
15
15
|
# (Not documented)
|
16
|
-
#
|
16
|
+
#
|
17
17
|
# <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:byte_ordering).</em>
|
18
|
-
#
|
18
|
+
#
|
19
19
|
# === Options:
|
20
20
|
# :big_endian ::
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# :little_endian ::
|
23
|
-
#
|
24
|
-
#
|
23
|
+
#
|
24
|
+
#
|
25
25
|
# @method _enum_byte_ordering_
|
26
26
|
# @return [Symbol]
|
27
27
|
# @scope class
|
@@ -29,358 +29,323 @@ module LLVM::C
|
|
29
29
|
:big_endian, 0,
|
30
30
|
:little_endian, 1
|
31
31
|
]
|
32
|
-
|
32
|
+
|
33
33
|
# (Not documented)
|
34
34
|
class OpaqueTargetData < FFI::Struct
|
35
35
|
layout :dummy, :char
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
# (Not documented)
|
39
39
|
class OpaqueTargetLibraryInfotData < FFI::Struct
|
40
40
|
layout :dummy, :char
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
# (Not documented)
|
44
|
-
#
|
44
|
+
#
|
45
45
|
# @method initialize_all_target_infos()
|
46
|
-
# @return [nil]
|
46
|
+
# @return [nil]
|
47
47
|
# @scope class
|
48
48
|
attach_function :initialize_all_target_infos, :LLVMInitializeAllTargetInfos, [], :void
|
49
|
-
|
50
|
-
#
|
51
|
-
#
|
52
|
-
# support.
|
53
|
-
#
|
49
|
+
|
50
|
+
# (Not documented)
|
51
|
+
#
|
54
52
|
# @method initialize_all_targets()
|
55
|
-
# @return [nil]
|
53
|
+
# @return [nil]
|
56
54
|
# @scope class
|
57
55
|
attach_function :initialize_all_targets, :LLVMInitializeAllTargets, [], :void
|
58
|
-
|
59
|
-
#
|
60
|
-
#
|
61
|
-
# support.
|
62
|
-
#
|
56
|
+
|
57
|
+
# (Not documented)
|
58
|
+
#
|
63
59
|
# @method initialize_all_target_m_cs()
|
64
|
-
# @return [nil]
|
60
|
+
# @return [nil]
|
65
61
|
# @scope class
|
66
62
|
attach_function :initialize_all_target_m_cs, :LLVMInitializeAllTargetMCs, [], :void
|
67
|
-
|
68
|
-
#
|
69
|
-
#
|
70
|
-
# available via the TargetRegistry.
|
71
|
-
#
|
63
|
+
|
64
|
+
# (Not documented)
|
65
|
+
#
|
72
66
|
# @method initialize_all_asm_printers()
|
73
|
-
# @return [nil]
|
67
|
+
# @return [nil]
|
74
68
|
# @scope class
|
75
69
|
attach_function :initialize_all_asm_printers, :LLVMInitializeAllAsmPrinters, [], :void
|
76
|
-
|
77
|
-
#
|
78
|
-
#
|
79
|
-
# available via the TargetRegistry.
|
80
|
-
#
|
70
|
+
|
71
|
+
# (Not documented)
|
72
|
+
#
|
81
73
|
# @method initialize_all_asm_parsers()
|
82
|
-
# @return [nil]
|
74
|
+
# @return [nil]
|
83
75
|
# @scope class
|
84
76
|
attach_function :initialize_all_asm_parsers, :LLVMInitializeAllAsmParsers, [], :void
|
85
|
-
|
86
|
-
#
|
87
|
-
#
|
88
|
-
# them available via the TargetRegistry.
|
89
|
-
#
|
77
|
+
|
78
|
+
# (Not documented)
|
79
|
+
#
|
90
80
|
# @method initialize_all_disassemblers()
|
91
|
-
# @return [nil]
|
81
|
+
# @return [nil]
|
92
82
|
# @scope class
|
93
83
|
attach_function :initialize_all_disassemblers, :LLVMInitializeAllDisassemblers, [], :void
|
94
|
-
|
95
|
-
#
|
96
|
-
#
|
97
|
-
# for JIT applications to ensure that the target gets linked in correctly.
|
98
|
-
#
|
84
|
+
|
85
|
+
# (Not documented)
|
86
|
+
#
|
99
87
|
# @method initialize_native_target()
|
100
|
-
# @return [Integer]
|
88
|
+
# @return [Integer]
|
101
89
|
# @scope class
|
102
90
|
attach_function :initialize_native_target, :LLVMInitializeNativeTarget, [], :int
|
103
|
-
|
104
|
-
#
|
105
|
-
#
|
106
|
-
# host.
|
107
|
-
#
|
91
|
+
|
92
|
+
# (Not documented)
|
93
|
+
#
|
108
94
|
# @method initialize_native_asm_parser()
|
109
|
-
# @return [Integer]
|
95
|
+
# @return [Integer]
|
110
96
|
# @scope class
|
111
97
|
attach_function :initialize_native_asm_parser, :LLVMInitializeNativeAsmParser, [], :int
|
112
|
-
|
113
|
-
#
|
114
|
-
#
|
115
|
-
# the host.
|
116
|
-
#
|
98
|
+
|
99
|
+
# (Not documented)
|
100
|
+
#
|
117
101
|
# @method initialize_native_asm_printer()
|
118
|
-
# @return [Integer]
|
102
|
+
# @return [Integer]
|
119
103
|
# @scope class
|
120
104
|
attach_function :initialize_native_asm_printer, :LLVMInitializeNativeAsmPrinter, [], :int
|
121
|
-
|
122
|
-
#
|
123
|
-
#
|
124
|
-
# to the host.
|
125
|
-
#
|
105
|
+
|
106
|
+
# (Not documented)
|
107
|
+
#
|
126
108
|
# @method initialize_native_disassembler()
|
127
|
-
# @return [Integer]
|
109
|
+
# @return [Integer]
|
128
110
|
# @scope class
|
129
111
|
attach_function :initialize_native_disassembler, :LLVMInitializeNativeDisassembler, [], :int
|
130
|
-
|
131
|
-
#
|
132
|
-
#
|
133
|
-
#
|
112
|
+
|
113
|
+
# (Not documented)
|
114
|
+
#
|
115
|
+
# @method get_module_data_layout(m)
|
116
|
+
# @param [FFI::Pointer(ModuleRef)] m
|
117
|
+
# @return [OpaqueTargetData]
|
118
|
+
# @scope class
|
119
|
+
attach_function :get_module_data_layout, :LLVMGetModuleDataLayout, [:pointer], OpaqueTargetData
|
120
|
+
|
121
|
+
# (Not documented)
|
122
|
+
#
|
123
|
+
# @method set_module_data_layout(m, dl)
|
124
|
+
# @param [FFI::Pointer(ModuleRef)] m
|
125
|
+
# @param [OpaqueTargetData] dl
|
126
|
+
# @return [nil]
|
127
|
+
# @scope class
|
128
|
+
attach_function :set_module_data_layout, :LLVMSetModuleDataLayout, [:pointer, OpaqueTargetData], :void
|
129
|
+
|
130
|
+
# (Not documented)
|
131
|
+
#
|
134
132
|
# @method create_target_data(string_rep)
|
135
|
-
# @param [String] string_rep
|
136
|
-
# @return [OpaqueTargetData]
|
133
|
+
# @param [String] string_rep
|
134
|
+
# @return [OpaqueTargetData]
|
137
135
|
# @scope class
|
138
136
|
attach_function :create_target_data, :LLVMCreateTargetData, [:string], OpaqueTargetData
|
139
|
-
|
140
|
-
#
|
141
|
-
#
|
142
|
-
#
|
143
|
-
#
|
144
|
-
# @
|
145
|
-
# @
|
146
|
-
|
147
|
-
|
148
|
-
#
|
149
|
-
|
150
|
-
|
151
|
-
# Adds target library information to a pass manager. This does not take
|
152
|
-
# ownership of the target library info.
|
153
|
-
# See the method llvm::PassManagerBase::add.
|
154
|
-
#
|
137
|
+
|
138
|
+
# (Not documented)
|
139
|
+
#
|
140
|
+
# @method dispose_target_data(td)
|
141
|
+
# @param [OpaqueTargetData] td
|
142
|
+
# @return [nil]
|
143
|
+
# @scope class
|
144
|
+
attach_function :dispose_target_data, :LLVMDisposeTargetData, [OpaqueTargetData], :void
|
145
|
+
|
146
|
+
# (Not documented)
|
147
|
+
#
|
155
148
|
# @method add_target_library_info(tli, pm)
|
156
|
-
# @param [OpaqueTargetLibraryInfotData] tli
|
157
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
158
|
-
# @return [nil]
|
149
|
+
# @param [OpaqueTargetLibraryInfotData] tli
|
150
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
151
|
+
# @return [nil]
|
159
152
|
# @scope class
|
160
153
|
attach_function :add_target_library_info, :LLVMAddTargetLibraryInfo, [OpaqueTargetLibraryInfotData, :pointer], :void
|
161
|
-
|
162
|
-
#
|
163
|
-
#
|
164
|
-
# See the constructor llvm::DataLayout::DataLayout.
|
165
|
-
#
|
154
|
+
|
155
|
+
# (Not documented)
|
156
|
+
#
|
166
157
|
# @method copy_string_rep_of_target_data(td)
|
167
|
-
# @param [OpaqueTargetData] td
|
168
|
-
# @return [String]
|
158
|
+
# @param [OpaqueTargetData] td
|
159
|
+
# @return [String]
|
169
160
|
# @scope class
|
170
161
|
attach_function :copy_string_rep_of_target_data, :LLVMCopyStringRepOfTargetData, [OpaqueTargetData], :string
|
171
|
-
|
172
|
-
#
|
173
|
-
#
|
174
|
-
# See the method llvm::DataLayout::isLittleEndian.
|
175
|
-
#
|
162
|
+
|
163
|
+
# (Not documented)
|
164
|
+
#
|
176
165
|
# @method byte_order(td)
|
177
|
-
# @param [OpaqueTargetData] td
|
178
|
-
# @return [Symbol from _enum_byte_ordering_]
|
166
|
+
# @param [OpaqueTargetData] td
|
167
|
+
# @return [Symbol from _enum_byte_ordering_]
|
179
168
|
# @scope class
|
180
169
|
attach_function :byte_order, :LLVMByteOrder, [OpaqueTargetData], :byte_ordering
|
181
|
-
|
182
|
-
#
|
183
|
-
#
|
184
|
-
#
|
170
|
+
|
171
|
+
# (Not documented)
|
172
|
+
#
|
185
173
|
# @method pointer_size(td)
|
186
|
-
# @param [OpaqueTargetData] td
|
187
|
-
# @return [Integer]
|
174
|
+
# @param [OpaqueTargetData] td
|
175
|
+
# @return [Integer]
|
188
176
|
# @scope class
|
189
177
|
attach_function :pointer_size, :LLVMPointerSize, [OpaqueTargetData], :uint
|
190
|
-
|
191
|
-
#
|
192
|
-
#
|
193
|
-
# See the method llvm::DataLayout::getPointerSize.
|
194
|
-
#
|
178
|
+
|
179
|
+
# (Not documented)
|
180
|
+
#
|
195
181
|
# @method pointer_size_for_as(td, as)
|
196
|
-
# @param [OpaqueTargetData] td
|
197
|
-
# @param [Integer] as
|
198
|
-
# @return [Integer]
|
182
|
+
# @param [OpaqueTargetData] td
|
183
|
+
# @param [Integer] as
|
184
|
+
# @return [Integer]
|
199
185
|
# @scope class
|
200
186
|
attach_function :pointer_size_for_as, :LLVMPointerSizeForAS, [OpaqueTargetData, :uint], :uint
|
201
|
-
|
202
|
-
#
|
203
|
-
#
|
204
|
-
#
|
187
|
+
|
188
|
+
# (Not documented)
|
189
|
+
#
|
205
190
|
# @method int_ptr_type(td)
|
206
|
-
# @param [OpaqueTargetData] td
|
207
|
-
# @return [FFI::Pointer(TypeRef)]
|
191
|
+
# @param [OpaqueTargetData] td
|
192
|
+
# @return [FFI::Pointer(TypeRef)]
|
208
193
|
# @scope class
|
209
194
|
attach_function :int_ptr_type, :LLVMIntPtrType, [OpaqueTargetData], :pointer
|
210
|
-
|
211
|
-
#
|
212
|
-
#
|
213
|
-
# See the method llvm::DataLayout::getIntPtrType.
|
214
|
-
#
|
195
|
+
|
196
|
+
# (Not documented)
|
197
|
+
#
|
215
198
|
# @method int_ptr_type_for_as(td, as)
|
216
|
-
# @param [OpaqueTargetData] td
|
217
|
-
# @param [Integer] as
|
218
|
-
# @return [FFI::Pointer(TypeRef)]
|
199
|
+
# @param [OpaqueTargetData] td
|
200
|
+
# @param [Integer] as
|
201
|
+
# @return [FFI::Pointer(TypeRef)]
|
219
202
|
# @scope class
|
220
203
|
attach_function :int_ptr_type_for_as, :LLVMIntPtrTypeForAS, [OpaqueTargetData, :uint], :pointer
|
221
|
-
|
222
|
-
#
|
223
|
-
#
|
224
|
-
#
|
204
|
+
|
205
|
+
# (Not documented)
|
206
|
+
#
|
225
207
|
# @method int_ptr_type_in_context(c, td)
|
226
|
-
# @param [FFI::Pointer(ContextRef)] c
|
227
|
-
# @param [OpaqueTargetData] td
|
228
|
-
# @return [FFI::Pointer(TypeRef)]
|
208
|
+
# @param [FFI::Pointer(ContextRef)] c
|
209
|
+
# @param [OpaqueTargetData] td
|
210
|
+
# @return [FFI::Pointer(TypeRef)]
|
229
211
|
# @scope class
|
230
212
|
attach_function :int_ptr_type_in_context, :LLVMIntPtrTypeInContext, [:pointer, OpaqueTargetData], :pointer
|
231
|
-
|
232
|
-
#
|
233
|
-
#
|
234
|
-
# See the method llvm::DataLayout::getIntPtrType.
|
235
|
-
#
|
213
|
+
|
214
|
+
# (Not documented)
|
215
|
+
#
|
236
216
|
# @method int_ptr_type_for_as_in_context(c, td, as)
|
237
|
-
# @param [FFI::Pointer(ContextRef)] c
|
238
|
-
# @param [OpaqueTargetData] td
|
239
|
-
# @param [Integer] as
|
240
|
-
# @return [FFI::Pointer(TypeRef)]
|
217
|
+
# @param [FFI::Pointer(ContextRef)] c
|
218
|
+
# @param [OpaqueTargetData] td
|
219
|
+
# @param [Integer] as
|
220
|
+
# @return [FFI::Pointer(TypeRef)]
|
241
221
|
# @scope class
|
242
222
|
attach_function :int_ptr_type_for_as_in_context, :LLVMIntPtrTypeForASInContext, [:pointer, OpaqueTargetData, :uint], :pointer
|
243
|
-
|
244
|
-
#
|
245
|
-
#
|
246
|
-
#
|
223
|
+
|
224
|
+
# (Not documented)
|
225
|
+
#
|
247
226
|
# @method size_of_type_in_bits(td, ty)
|
248
|
-
# @param [OpaqueTargetData] td
|
249
|
-
# @param [FFI::Pointer(TypeRef)] ty
|
250
|
-
# @return [Integer]
|
227
|
+
# @param [OpaqueTargetData] td
|
228
|
+
# @param [FFI::Pointer(TypeRef)] ty
|
229
|
+
# @return [Integer]
|
251
230
|
# @scope class
|
252
231
|
attach_function :size_of_type_in_bits, :LLVMSizeOfTypeInBits, [OpaqueTargetData, :pointer], :ulong_long
|
253
|
-
|
254
|
-
#
|
255
|
-
#
|
256
|
-
#
|
232
|
+
|
233
|
+
# (Not documented)
|
234
|
+
#
|
257
235
|
# @method store_size_of_type(td, ty)
|
258
|
-
# @param [OpaqueTargetData] td
|
259
|
-
# @param [FFI::Pointer(TypeRef)] ty
|
260
|
-
# @return [Integer]
|
236
|
+
# @param [OpaqueTargetData] td
|
237
|
+
# @param [FFI::Pointer(TypeRef)] ty
|
238
|
+
# @return [Integer]
|
261
239
|
# @scope class
|
262
240
|
attach_function :store_size_of_type, :LLVMStoreSizeOfType, [OpaqueTargetData, :pointer], :ulong_long
|
263
|
-
|
264
|
-
#
|
265
|
-
#
|
266
|
-
#
|
241
|
+
|
242
|
+
# (Not documented)
|
243
|
+
#
|
267
244
|
# @method abi_size_of_type(td, ty)
|
268
|
-
# @param [OpaqueTargetData] td
|
269
|
-
# @param [FFI::Pointer(TypeRef)] ty
|
270
|
-
# @return [Integer]
|
245
|
+
# @param [OpaqueTargetData] td
|
246
|
+
# @param [FFI::Pointer(TypeRef)] ty
|
247
|
+
# @return [Integer]
|
271
248
|
# @scope class
|
272
249
|
attach_function :abi_size_of_type, :LLVMABISizeOfType, [OpaqueTargetData, :pointer], :ulong_long
|
273
|
-
|
274
|
-
#
|
275
|
-
#
|
276
|
-
#
|
250
|
+
|
251
|
+
# (Not documented)
|
252
|
+
#
|
277
253
|
# @method abi_alignment_of_type(td, ty)
|
278
|
-
# @param [OpaqueTargetData] td
|
279
|
-
# @param [FFI::Pointer(TypeRef)] ty
|
280
|
-
# @return [Integer]
|
254
|
+
# @param [OpaqueTargetData] td
|
255
|
+
# @param [FFI::Pointer(TypeRef)] ty
|
256
|
+
# @return [Integer]
|
281
257
|
# @scope class
|
282
258
|
attach_function :abi_alignment_of_type, :LLVMABIAlignmentOfType, [OpaqueTargetData, :pointer], :uint
|
283
|
-
|
284
|
-
#
|
285
|
-
#
|
286
|
-
#
|
259
|
+
|
260
|
+
# (Not documented)
|
261
|
+
#
|
287
262
|
# @method call_frame_alignment_of_type(td, ty)
|
288
|
-
# @param [OpaqueTargetData] td
|
289
|
-
# @param [FFI::Pointer(TypeRef)] ty
|
290
|
-
# @return [Integer]
|
263
|
+
# @param [OpaqueTargetData] td
|
264
|
+
# @param [FFI::Pointer(TypeRef)] ty
|
265
|
+
# @return [Integer]
|
291
266
|
# @scope class
|
292
267
|
attach_function :call_frame_alignment_of_type, :LLVMCallFrameAlignmentOfType, [OpaqueTargetData, :pointer], :uint
|
293
|
-
|
294
|
-
#
|
295
|
-
#
|
296
|
-
#
|
268
|
+
|
269
|
+
# (Not documented)
|
270
|
+
#
|
297
271
|
# @method preferred_alignment_of_type(td, ty)
|
298
|
-
# @param [OpaqueTargetData] td
|
299
|
-
# @param [FFI::Pointer(TypeRef)] ty
|
300
|
-
# @return [Integer]
|
272
|
+
# @param [OpaqueTargetData] td
|
273
|
+
# @param [FFI::Pointer(TypeRef)] ty
|
274
|
+
# @return [Integer]
|
301
275
|
# @scope class
|
302
276
|
attach_function :preferred_alignment_of_type, :LLVMPreferredAlignmentOfType, [OpaqueTargetData, :pointer], :uint
|
303
|
-
|
304
|
-
#
|
305
|
-
#
|
306
|
-
#
|
277
|
+
|
278
|
+
# (Not documented)
|
279
|
+
#
|
307
280
|
# @method preferred_alignment_of_global(td, global_var)
|
308
|
-
# @param [OpaqueTargetData] td
|
309
|
-
# @param [FFI::Pointer(ValueRef)] global_var
|
310
|
-
# @return [Integer]
|
281
|
+
# @param [OpaqueTargetData] td
|
282
|
+
# @param [FFI::Pointer(ValueRef)] global_var
|
283
|
+
# @return [Integer]
|
311
284
|
# @scope class
|
312
285
|
attach_function :preferred_alignment_of_global, :LLVMPreferredAlignmentOfGlobal, [OpaqueTargetData, :pointer], :uint
|
313
|
-
|
314
|
-
#
|
315
|
-
#
|
316
|
-
#
|
286
|
+
|
287
|
+
# (Not documented)
|
288
|
+
#
|
317
289
|
# @method element_at_offset(td, struct_ty, offset)
|
318
|
-
# @param [OpaqueTargetData] td
|
319
|
-
# @param [FFI::Pointer(TypeRef)] struct_ty
|
320
|
-
# @param [Integer] offset
|
321
|
-
# @return [Integer]
|
290
|
+
# @param [OpaqueTargetData] td
|
291
|
+
# @param [FFI::Pointer(TypeRef)] struct_ty
|
292
|
+
# @param [Integer] offset
|
293
|
+
# @return [Integer]
|
322
294
|
# @scope class
|
323
295
|
attach_function :element_at_offset, :LLVMElementAtOffset, [OpaqueTargetData, :pointer, :ulong_long], :uint
|
324
|
-
|
325
|
-
#
|
326
|
-
#
|
327
|
-
#
|
296
|
+
|
297
|
+
# (Not documented)
|
298
|
+
#
|
328
299
|
# @method offset_of_element(td, struct_ty, element)
|
329
|
-
# @param [OpaqueTargetData] td
|
330
|
-
# @param [FFI::Pointer(TypeRef)] struct_ty
|
331
|
-
# @param [Integer] element
|
332
|
-
# @return [Integer]
|
300
|
+
# @param [OpaqueTargetData] td
|
301
|
+
# @param [FFI::Pointer(TypeRef)] struct_ty
|
302
|
+
# @param [Integer] element
|
303
|
+
# @return [Integer]
|
333
304
|
# @scope class
|
334
305
|
attach_function :offset_of_element, :LLVMOffsetOfElement, [OpaqueTargetData, :pointer, :uint], :ulong_long
|
335
|
-
|
336
|
-
# Deallocates a TargetData.
|
337
|
-
# See the destructor llvm::DataLayout::~DataLayout.
|
338
|
-
#
|
339
|
-
# @method dispose_target_data(td)
|
340
|
-
# @param [OpaqueTargetData] td
|
341
|
-
# @return [nil]
|
342
|
-
# @scope class
|
343
|
-
attach_function :dispose_target_data, :LLVMDisposeTargetData, [OpaqueTargetData], :void
|
344
|
-
|
306
|
+
|
345
307
|
# (Not documented)
|
346
308
|
class OpaqueTargetMachine < FFI::Struct
|
347
309
|
layout :dummy, :char
|
348
310
|
end
|
349
|
-
|
311
|
+
|
350
312
|
# (Not documented)
|
351
313
|
module TargetWrappers
|
314
|
+
# @return [Integer]
|
352
315
|
def has_jit()
|
353
316
|
LLVM::C.target_has_jit(self)
|
354
317
|
end
|
355
|
-
|
318
|
+
|
319
|
+
# @return [Integer]
|
356
320
|
def has_target_machine()
|
357
321
|
LLVM::C.target_has_target_machine(self)
|
358
322
|
end
|
359
|
-
|
323
|
+
|
324
|
+
# @return [Integer]
|
360
325
|
def has_asm_backend()
|
361
326
|
LLVM::C.target_has_asm_backend(self)
|
362
327
|
end
|
363
328
|
end
|
364
|
-
|
329
|
+
|
365
330
|
class Target < FFI::Struct
|
366
331
|
include TargetWrappers
|
367
332
|
layout :dummy, :char
|
368
333
|
end
|
369
|
-
|
334
|
+
|
370
335
|
# (Not documented)
|
371
|
-
#
|
336
|
+
#
|
372
337
|
# <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:code_gen_opt_level).</em>
|
373
|
-
#
|
338
|
+
#
|
374
339
|
# === Options:
|
375
340
|
# :none ::
|
376
|
-
#
|
341
|
+
#
|
377
342
|
# :less ::
|
378
|
-
#
|
343
|
+
#
|
379
344
|
# :default ::
|
380
|
-
#
|
345
|
+
#
|
381
346
|
# :aggressive ::
|
382
|
-
#
|
383
|
-
#
|
347
|
+
#
|
348
|
+
#
|
384
349
|
# @method _enum_code_gen_opt_level_
|
385
350
|
# @return [Symbol]
|
386
351
|
# @scope class
|
@@ -390,21 +355,21 @@ module LLVM::C
|
|
390
355
|
:default, 2,
|
391
356
|
:aggressive, 3
|
392
357
|
]
|
393
|
-
|
358
|
+
|
394
359
|
# (Not documented)
|
395
|
-
#
|
360
|
+
#
|
396
361
|
# <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:reloc_mode).</em>
|
397
|
-
#
|
362
|
+
#
|
398
363
|
# === Options:
|
399
364
|
# :default ::
|
400
|
-
#
|
365
|
+
#
|
401
366
|
# :static ::
|
402
|
-
#
|
367
|
+
#
|
403
368
|
# :pic ::
|
404
|
-
#
|
369
|
+
#
|
405
370
|
# :dynamic_no_pic ::
|
406
|
-
#
|
407
|
-
#
|
371
|
+
#
|
372
|
+
#
|
408
373
|
# @method _enum_reloc_mode_
|
409
374
|
# @return [Symbol]
|
410
375
|
# @scope class
|
@@ -414,25 +379,25 @@ module LLVM::C
|
|
414
379
|
:pic, 2,
|
415
380
|
:dynamic_no_pic, 3
|
416
381
|
]
|
417
|
-
|
382
|
+
|
418
383
|
# (Not documented)
|
419
|
-
#
|
384
|
+
#
|
420
385
|
# <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:code_model).</em>
|
421
|
-
#
|
386
|
+
#
|
422
387
|
# === Options:
|
423
388
|
# :default ::
|
424
|
-
#
|
389
|
+
#
|
425
390
|
# :jit_default ::
|
426
|
-
#
|
391
|
+
#
|
427
392
|
# :small ::
|
428
|
-
#
|
393
|
+
#
|
429
394
|
# :kernel ::
|
430
|
-
#
|
395
|
+
#
|
431
396
|
# :medium ::
|
432
|
-
#
|
397
|
+
#
|
433
398
|
# :large ::
|
434
|
-
#
|
435
|
-
#
|
399
|
+
#
|
400
|
+
#
|
436
401
|
# @method _enum_code_model_
|
437
402
|
# @return [Symbol]
|
438
403
|
# @scope class
|
@@ -444,17 +409,17 @@ module LLVM::C
|
|
444
409
|
:medium, 4,
|
445
410
|
:large, 5
|
446
411
|
]
|
447
|
-
|
412
|
+
|
448
413
|
# (Not documented)
|
449
|
-
#
|
414
|
+
#
|
450
415
|
# <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:code_gen_file_type).</em>
|
451
|
-
#
|
416
|
+
#
|
452
417
|
# === Options:
|
453
418
|
# :assembly ::
|
454
|
-
#
|
419
|
+
#
|
455
420
|
# :object ::
|
456
|
-
#
|
457
|
-
#
|
421
|
+
#
|
422
|
+
#
|
458
423
|
# @method _enum_code_gen_file_type_
|
459
424
|
# @return [Symbol]
|
460
425
|
# @scope class
|
@@ -462,193 +427,202 @@ module LLVM::C
|
|
462
427
|
:assembly, 0,
|
463
428
|
:object, 1
|
464
429
|
]
|
465
|
-
|
430
|
+
|
466
431
|
# Returns the first llvm::Target in the registered targets list.
|
467
|
-
#
|
432
|
+
#
|
468
433
|
# @method get_first_target()
|
469
|
-
# @return [Target]
|
434
|
+
# @return [Target]
|
470
435
|
# @scope class
|
471
436
|
attach_function :get_first_target, :LLVMGetFirstTarget, [], Target
|
472
|
-
|
437
|
+
|
473
438
|
# Returns the next llvm::Target given a previous one (or null if there's none)
|
474
|
-
#
|
439
|
+
#
|
475
440
|
# @method get_next_target(t)
|
476
|
-
# @param [Target] t
|
477
|
-
# @return [Target]
|
441
|
+
# @param [Target] t
|
442
|
+
# @return [Target]
|
478
443
|
# @scope class
|
479
444
|
attach_function :get_next_target, :LLVMGetNextTarget, [Target], Target
|
480
|
-
|
481
|
-
# Finds the target corresponding to the given name and stores it in \p T.
|
445
|
+
|
446
|
+
# Finds the target corresponding to the given name and stores it in \p T.
|
482
447
|
# Returns 0 on success.
|
483
|
-
#
|
448
|
+
#
|
484
449
|
# @method get_target_from_name(name)
|
485
|
-
# @param [String] name
|
486
|
-
# @return [Target]
|
450
|
+
# @param [String] name
|
451
|
+
# @return [Target]
|
487
452
|
# @scope class
|
488
453
|
attach_function :get_target_from_name, :LLVMGetTargetFromName, [:string], Target
|
489
|
-
|
454
|
+
|
490
455
|
# Finds the target corresponding to the given triple and stores it in \p T.
|
491
456
|
# Returns 0 on success. Optionally returns any error in ErrorMessage.
|
492
457
|
# Use LLVMDisposeMessage to dispose the message.
|
493
|
-
#
|
458
|
+
#
|
494
459
|
# @method get_target_from_triple(triple, t, error_message)
|
495
|
-
# @param [String] triple
|
496
|
-
# @param [FFI::Pointer(*TargetRef)] t
|
497
|
-
# @param [FFI::Pointer(**CharS)] error_message
|
498
|
-
# @return [Integer]
|
460
|
+
# @param [String] triple
|
461
|
+
# @param [FFI::Pointer(*TargetRef)] t
|
462
|
+
# @param [FFI::Pointer(**CharS)] error_message
|
463
|
+
# @return [Integer]
|
499
464
|
# @scope class
|
500
465
|
attach_function :get_target_from_triple, :LLVMGetTargetFromTriple, [:string, :pointer, :pointer], :int
|
501
|
-
|
466
|
+
|
502
467
|
# Returns the name of a target. See llvm::Target::getName
|
503
|
-
#
|
468
|
+
#
|
504
469
|
# @method get_target_name(t)
|
505
|
-
# @param [Target] t
|
506
|
-
# @return [String]
|
470
|
+
# @param [Target] t
|
471
|
+
# @return [String]
|
507
472
|
# @scope class
|
508
473
|
attach_function :get_target_name, :LLVMGetTargetName, [Target], :string
|
509
|
-
|
474
|
+
|
510
475
|
# Returns the description of a target. See llvm::Target::getDescription
|
511
|
-
#
|
476
|
+
#
|
512
477
|
# @method get_target_description(t)
|
513
|
-
# @param [Target] t
|
514
|
-
# @return [String]
|
478
|
+
# @param [Target] t
|
479
|
+
# @return [String]
|
515
480
|
# @scope class
|
516
481
|
attach_function :get_target_description, :LLVMGetTargetDescription, [Target], :string
|
517
|
-
|
482
|
+
|
518
483
|
# Returns if the target has a JIT
|
519
|
-
#
|
484
|
+
#
|
520
485
|
# @method target_has_jit(t)
|
521
|
-
# @param [Target] t
|
522
|
-
# @return [Integer]
|
486
|
+
# @param [Target] t
|
487
|
+
# @return [Integer]
|
523
488
|
# @scope class
|
524
489
|
attach_function :target_has_jit, :LLVMTargetHasJIT, [Target], :int
|
525
|
-
|
490
|
+
|
526
491
|
# Returns if the target has a TargetMachine associated
|
527
|
-
#
|
492
|
+
#
|
528
493
|
# @method target_has_target_machine(t)
|
529
|
-
# @param [Target] t
|
530
|
-
# @return [Integer]
|
494
|
+
# @param [Target] t
|
495
|
+
# @return [Integer]
|
531
496
|
# @scope class
|
532
497
|
attach_function :target_has_target_machine, :LLVMTargetHasTargetMachine, [Target], :int
|
533
|
-
|
498
|
+
|
534
499
|
# Returns if the target as an ASM backend (required for emitting output)
|
535
|
-
#
|
500
|
+
#
|
536
501
|
# @method target_has_asm_backend(t)
|
537
|
-
# @param [Target] t
|
538
|
-
# @return [Integer]
|
502
|
+
# @param [Target] t
|
503
|
+
# @return [Integer]
|
539
504
|
# @scope class
|
540
505
|
attach_function :target_has_asm_backend, :LLVMTargetHasAsmBackend, [Target], :int
|
541
|
-
|
506
|
+
|
542
507
|
# Creates a new llvm::TargetMachine. See llvm::Target::createTargetMachine
|
543
|
-
#
|
508
|
+
#
|
544
509
|
# @method create_target_machine(t, triple, cpu, features, level, reloc, code_model)
|
545
|
-
# @param [Target] t
|
546
|
-
# @param [String] triple
|
547
|
-
# @param [String] cpu
|
548
|
-
# @param [String] features
|
549
|
-
# @param [Symbol from _enum_code_gen_opt_level_] level
|
550
|
-
# @param [Symbol from _enum_reloc_mode_] reloc
|
551
|
-
# @param [Symbol from _enum_code_model_] code_model
|
552
|
-
# @return [OpaqueTargetMachine]
|
510
|
+
# @param [Target] t
|
511
|
+
# @param [String] triple
|
512
|
+
# @param [String] cpu
|
513
|
+
# @param [String] features
|
514
|
+
# @param [Symbol from _enum_code_gen_opt_level_] level
|
515
|
+
# @param [Symbol from _enum_reloc_mode_] reloc
|
516
|
+
# @param [Symbol from _enum_code_model_] code_model
|
517
|
+
# @return [OpaqueTargetMachine]
|
553
518
|
# @scope class
|
554
519
|
attach_function :create_target_machine, :LLVMCreateTargetMachine, [Target, :string, :string, :string, :code_gen_opt_level, :reloc_mode, :code_model], OpaqueTargetMachine
|
555
|
-
|
520
|
+
|
556
521
|
# Dispose the LLVMTargetMachineRef instance generated by
|
557
522
|
# LLVMCreateTargetMachine.
|
558
|
-
#
|
523
|
+
#
|
559
524
|
# @method dispose_target_machine(t)
|
560
|
-
# @param [OpaqueTargetMachine] t
|
561
|
-
# @return [nil]
|
525
|
+
# @param [OpaqueTargetMachine] t
|
526
|
+
# @return [nil]
|
562
527
|
# @scope class
|
563
528
|
attach_function :dispose_target_machine, :LLVMDisposeTargetMachine, [OpaqueTargetMachine], :void
|
564
|
-
|
529
|
+
|
565
530
|
# Returns the Target used in a TargetMachine
|
566
|
-
#
|
531
|
+
#
|
567
532
|
# @method get_target_machine_target(t)
|
568
|
-
# @param [OpaqueTargetMachine] t
|
569
|
-
# @return [Target]
|
533
|
+
# @param [OpaqueTargetMachine] t
|
534
|
+
# @return [Target]
|
570
535
|
# @scope class
|
571
536
|
attach_function :get_target_machine_target, :LLVMGetTargetMachineTarget, [OpaqueTargetMachine], Target
|
572
|
-
|
537
|
+
|
573
538
|
# Returns the triple used creating this target machine. See
|
574
539
|
# llvm::TargetMachine::getTriple. The result needs to be disposed with
|
575
540
|
# LLVMDisposeMessage.
|
576
|
-
#
|
541
|
+
#
|
577
542
|
# @method get_target_machine_triple(t)
|
578
|
-
# @param [OpaqueTargetMachine] t
|
579
|
-
# @return [String]
|
543
|
+
# @param [OpaqueTargetMachine] t
|
544
|
+
# @return [String]
|
580
545
|
# @scope class
|
581
546
|
attach_function :get_target_machine_triple, :LLVMGetTargetMachineTriple, [OpaqueTargetMachine], :string
|
582
|
-
|
547
|
+
|
583
548
|
# Returns the cpu used creating this target machine. See
|
584
549
|
# llvm::TargetMachine::getCPU. The result needs to be disposed with
|
585
550
|
# LLVMDisposeMessage.
|
586
|
-
#
|
551
|
+
#
|
587
552
|
# @method get_target_machine_cpu(t)
|
588
|
-
# @param [OpaqueTargetMachine] t
|
589
|
-
# @return [String]
|
553
|
+
# @param [OpaqueTargetMachine] t
|
554
|
+
# @return [String]
|
590
555
|
# @scope class
|
591
556
|
attach_function :get_target_machine_cpu, :LLVMGetTargetMachineCPU, [OpaqueTargetMachine], :string
|
592
|
-
|
557
|
+
|
593
558
|
# Returns the feature string used creating this target machine. See
|
594
559
|
# llvm::TargetMachine::getFeatureString. The result needs to be disposed with
|
595
560
|
# LLVMDisposeMessage.
|
596
|
-
#
|
561
|
+
#
|
597
562
|
# @method get_target_machine_feature_string(t)
|
598
|
-
# @param [OpaqueTargetMachine] t
|
599
|
-
# @return [String]
|
563
|
+
# @param [OpaqueTargetMachine] t
|
564
|
+
# @return [String]
|
600
565
|
# @scope class
|
601
566
|
attach_function :get_target_machine_feature_string, :LLVMGetTargetMachineFeatureString, [OpaqueTargetMachine], :string
|
602
|
-
|
603
|
-
#
|
604
|
-
#
|
605
|
-
# @method
|
606
|
-
# @param [OpaqueTargetMachine] t
|
607
|
-
# @return [OpaqueTargetData]
|
608
|
-
# @scope class
|
609
|
-
attach_function :
|
610
|
-
|
567
|
+
|
568
|
+
# Create a DataLayout based on the targetMachine.
|
569
|
+
#
|
570
|
+
# @method create_target_data_layout(t)
|
571
|
+
# @param [OpaqueTargetMachine] t
|
572
|
+
# @return [OpaqueTargetData]
|
573
|
+
# @scope class
|
574
|
+
attach_function :create_target_data_layout, :LLVMCreateTargetDataLayout, [OpaqueTargetMachine], OpaqueTargetData
|
575
|
+
|
611
576
|
# Set the target machine's ASM verbosity.
|
612
|
-
#
|
577
|
+
#
|
613
578
|
# @method set_target_machine_asm_verbosity(t, verbose_asm)
|
614
|
-
# @param [OpaqueTargetMachine] t
|
615
|
-
# @param [Integer] verbose_asm
|
616
|
-
# @return [nil]
|
579
|
+
# @param [OpaqueTargetMachine] t
|
580
|
+
# @param [Integer] verbose_asm
|
581
|
+
# @return [nil]
|
617
582
|
# @scope class
|
618
583
|
attach_function :set_target_machine_asm_verbosity, :LLVMSetTargetMachineAsmVerbosity, [OpaqueTargetMachine, :int], :void
|
619
|
-
|
584
|
+
|
620
585
|
# Emits an asm or object file for the given module to the filename. This
|
621
586
|
# wraps several c++ only classes (among them a file stream). Returns any
|
622
587
|
# error in ErrorMessage. Use LLVMDisposeMessage to dispose the message.
|
623
|
-
#
|
588
|
+
#
|
624
589
|
# @method target_machine_emit_to_file(t, m, filename, codegen, error_message)
|
625
|
-
# @param [OpaqueTargetMachine] t
|
626
|
-
# @param [FFI::Pointer(ModuleRef)] m
|
627
|
-
# @param [String] filename
|
628
|
-
# @param [Symbol from _enum_code_gen_file_type_] codegen
|
629
|
-
# @param [FFI::Pointer(**CharS)] error_message
|
630
|
-
# @return [Integer]
|
590
|
+
# @param [OpaqueTargetMachine] t
|
591
|
+
# @param [FFI::Pointer(ModuleRef)] m
|
592
|
+
# @param [String] filename
|
593
|
+
# @param [Symbol from _enum_code_gen_file_type_] codegen
|
594
|
+
# @param [FFI::Pointer(**CharS)] error_message
|
595
|
+
# @return [Integer]
|
631
596
|
# @scope class
|
632
597
|
attach_function :target_machine_emit_to_file, :LLVMTargetMachineEmitToFile, [OpaqueTargetMachine, :pointer, :string, :code_gen_file_type, :pointer], :int
|
633
|
-
|
598
|
+
|
634
599
|
# Compile the LLVM IR stored in \p M and store the result in \p OutMemBuf.
|
635
|
-
#
|
600
|
+
#
|
636
601
|
# @method target_machine_emit_to_memory_buffer(t, m, codegen, error_message, out_mem_buf)
|
637
|
-
# @param [OpaqueTargetMachine] t
|
638
|
-
# @param [FFI::Pointer(ModuleRef)] m
|
639
|
-
# @param [Symbol from _enum_code_gen_file_type_] codegen
|
640
|
-
# @param [FFI::Pointer(**CharS)] error_message
|
641
|
-
# @param [FFI::Pointer(*MemoryBufferRef)] out_mem_buf
|
642
|
-
# @return [Integer]
|
602
|
+
# @param [OpaqueTargetMachine] t
|
603
|
+
# @param [FFI::Pointer(ModuleRef)] m
|
604
|
+
# @param [Symbol from _enum_code_gen_file_type_] codegen
|
605
|
+
# @param [FFI::Pointer(**CharS)] error_message
|
606
|
+
# @param [FFI::Pointer(*MemoryBufferRef)] out_mem_buf
|
607
|
+
# @return [Integer]
|
643
608
|
# @scope class
|
644
609
|
attach_function :target_machine_emit_to_memory_buffer, :LLVMTargetMachineEmitToMemoryBuffer, [OpaqueTargetMachine, :pointer, :code_gen_file_type, :pointer, :pointer], :int
|
645
|
-
|
610
|
+
|
646
611
|
# Get a triple for the host machine as a string. The result needs to be
|
647
612
|
# disposed with LLVMDisposeMessage.
|
648
|
-
#
|
613
|
+
#
|
649
614
|
# @method get_default_target_triple()
|
650
|
-
# @return [String]
|
615
|
+
# @return [String]
|
651
616
|
# @scope class
|
652
617
|
attach_function :get_default_target_triple, :LLVMGetDefaultTargetTriple, [], :string
|
653
|
-
|
618
|
+
|
619
|
+
# Adds the target-specific analysis passes to the pass manager.
|
620
|
+
#
|
621
|
+
# @method add_analysis_passes(t, pm)
|
622
|
+
# @param [OpaqueTargetMachine] t
|
623
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
624
|
+
# @return [nil]
|
625
|
+
# @scope class
|
626
|
+
attach_function :add_analysis_passes, :LLVMAddAnalysisPasses, [OpaqueTargetMachine, :pointer], :void
|
627
|
+
|
654
628
|
end
|