Class: LLVM::Module
- Inherits:
-
Object
- Object
- LLVM::Module
- Includes:
- PointerIdentity
- Defined in:
- lib/llvm/linker.rb,
lib/llvm/analysis.rb,
lib/llvm/core/module.rb,
lib/llvm/core/bitcode.rb
Defined Under Namespace
Classes: FunctionCollection, GlobalCollection, TypeCollection
Class Method Summary collapse
- .from_ptr(ptr) ⇒ Object
-
.parse_bitcode(path_or_memory_buffer) ⇒ LLVM::Module
Parse a module from a memory buffer.
Instance Method Summary collapse
-
#data_layout ⇒ String
Get module data layout.
-
#data_layout=(data_layout) ⇒ Object
Set module data layout.
- #dispose ⇒ Object
-
#dump ⇒ Object
Print the module’s IR to the standard error.
-
#functions ⇒ Object
Returns a FunctionCollection of all the Functions in the module.
-
#globals ⇒ Object
Returns an Enumerable of all the GlobalVariables in the module.
-
#initialize(name) ⇒ Module
constructor
Important: Call #dispose to free backend memory after use, but not when using JITCompiler with this module.
-
#link_into(other) ⇒ nil, String
Link the current module into
other
. -
#link_into_and_destroy(other) ⇒ nil, String
Link the current module into
other
, and dispose the current module. -
#to_s ⇒ Object
Returns the LLVM IR of the module as a string.
-
#triple ⇒ String
Get module triple.
-
#triple=(triple) ⇒ Object
Set module triple.
-
#types ⇒ Object
Returns a TypeCollection of all the Types in the module.
-
#verify ⇒ nil, String
Verify that the module is valid.
-
#verify! ⇒ nil
Verify that a module is valid, and abort the process if not.
-
#write_bitcode(path_or_io) ⇒ true, false
Write bitcode to the given path, IO object or file descriptor.
Methods included from PointerIdentity
Constructor Details
#initialize(name) ⇒ Module
Important: Call #dispose to free backend memory after use, but not when using JITCompiler with this module.
14 15 16 |
# File 'lib/llvm/core/module.rb', line 14 def initialize(name) @ptr = C.module_create_with_name(name) end |
Class Method Details
.from_ptr(ptr) ⇒ Object
6 7 8 9 10 11 |
# File 'lib/llvm/core/module.rb', line 6 def self.from_ptr(ptr) return if ptr.null? mod = allocate mod.instance_variable_set(:@ptr, ptr) mod end |
.parse_bitcode(path_or_memory_buffer) ⇒ LLVM::Module
Parse a module from a memory buffer
8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/llvm/core/bitcode.rb', line 8 def self.parse_bitcode(path_or_memory_buffer) memory_buffer = case path_or_memory_buffer when MemoryBuffer then path_or_memory_buffer else MemoryBuffer.from_file(path_or_memory_buffer) end FFI::MemoryPointer.new(:pointer) do |mod_ref| FFI::MemoryPointer.new(:pointer) do |msg_ref| status = C.parse_bitcode(memory_buffer, mod_ref, msg_ref) raise msg_ref.get_pointer(0).get_string(0) if status != 0 return from_ptr(mod_ref.get_pointer(0)) end end end |
Instance Method Details
#data_layout ⇒ String
Get module data layout.
42 43 44 |
# File 'lib/llvm/core/module.rb', line 42 def data_layout C.get_data_layout(self) end |
#data_layout=(data_layout) ⇒ Object
Set module data layout.
49 50 51 |
# File 'lib/llvm/core/module.rb', line 49 def data_layout=(data_layout) C.set_data_layout(self, data_layout.to_s) end |
#dispose ⇒ Object
18 19 20 21 22 23 |
# File 'lib/llvm/core/module.rb', line 18 def dispose return if @ptr.nil? C.dispose_module(@ptr) @ptr = nil end |
#dump ⇒ Object
Print the module’s IR to the standard error.
235 236 237 |
# File 'lib/llvm/core/module.rb', line 235 def dump C.dump_module(self) end |
#functions ⇒ Object
Returns a FunctionCollection of all the Functions in the module.
146 147 148 |
# File 'lib/llvm/core/module.rb', line 146 def functions @functions ||= FunctionCollection.new(self) end |
#globals ⇒ Object
Returns an Enumerable of all the GlobalVariables in the module.
72 73 74 |
# File 'lib/llvm/core/module.rb', line 72 def globals @globals ||= GlobalCollection.new(self) end |
#link_into(other) ⇒ nil, String
Link the current module into other
.
10 11 12 13 14 15 16 17 18 |
# File 'lib/llvm/linker.rb', line 10 def link_into(other) LLVM. do |msg| # HACK ALERT: ffi-gen missed LLVMLinkerPreserveSource enumeration for # some reason. It is inlined as a constant here. # C.link_modules(mod, self, :linker_preserve_source, msg) C.link_modules(other, self, 1, msg) end end |
#link_into_and_destroy(other) ⇒ nil, String
Link the current module into other
, and dispose the current module.
23 24 25 26 27 28 29 30 31 |
# File 'lib/llvm/linker.rb', line 23 def link_into_and_destroy(other) result = LLVM. do |msg| C.link_modules(other, self, :linker_destroy_source, msg) end @ptr = nil result end |
#to_s ⇒ Object
Returns the LLVM IR of the module as a string.
230 231 232 |
# File 'lib/llvm/core/module.rb', line 230 def to_s C.print_module_to_string(self) end |
#triple ⇒ String
Get module triple.
28 29 30 |
# File 'lib/llvm/core/module.rb', line 28 def triple C.get_target(self) end |
#triple=(triple) ⇒ Object
Set module triple.
35 36 37 |
# File 'lib/llvm/core/module.rb', line 35 def triple=(triple) C.set_target(self, triple.to_s) end |
#types ⇒ Object
Returns a TypeCollection of all the Types in the module.
54 55 56 |
# File 'lib/llvm/core/module.rb', line 54 def types @types ||= TypeCollection.new(self) end |
#verify ⇒ nil, String
Verify that the module is valid.
11 12 13 |
# File 'lib/llvm/analysis.rb', line 11 def verify do_verification(:return_status) end |
#verify! ⇒ nil
Verify that a module is valid, and abort the process if not.
17 18 19 |
# File 'lib/llvm/analysis.rb', line 17 def verify! do_verification(:abort_process) end |
#write_bitcode(path_or_io) ⇒ true, false
Write bitcode to the given path, IO object or file descriptor
25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/llvm/core/bitcode.rb', line 25 def write_bitcode(path_or_io) status = if path_or_io.respond_to?(:path) C.write_bitcode_to_file(self, path_or_io.path) elsif path_or_io.respond_to?(:fileno) C.write_bitcode_to_fd(self, path_or_io.fileno, 0, 1) elsif path_or_io.kind_of?(Integer) C.write_bitcode_to_fd(self, path_or_io, 0, 1) else C.write_bitcode_to_file(self, path_or_io.to_str) end return status == 0 end |