ruby-llvm 2.7.0

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.
@@ -0,0 +1,139 @@
1
+ require 'llvm'
2
+ require 'llvm/core'
3
+ require 'llvm/target'
4
+ require 'llvm/analysis'
5
+
6
+ module LLVM
7
+ module C
8
+ # Generic values
9
+ attach_function :LLVMCreateGenericValueOfInt, [:pointer, :long_long, :int], :pointer
10
+ attach_function :LLVMCreateGenericValueOfPointer, [:pointer], :pointer
11
+ attach_function :LLVMCreateGenericValueOfFloat, [:pointer, :double], :pointer
12
+
13
+ attach_function :LLVMGenericValueIntWidth, [:pointer], :uint
14
+
15
+ attach_function :LLVMGenericValueToInt, [:pointer, :int], :long_long
16
+ attach_function :LLVMGenericValueToPointer, [:pointer], :pointer
17
+ attach_function :LLVMGenericValueToFloat, [:pointer, :pointer], :double
18
+ attach_function :LLVMDisposeGenericValue, [:pointer], :void
19
+
20
+ # Execution engines
21
+ attach_function :LLVMCreateExecutionEngineForModule, [:pointer, :pointer, :pointer], :int
22
+ attach_function :LLVMCreateInterpreterForModule, [:pointer, :pointer, :pointer], :int
23
+ attach_function :LLVMCreateJITCompilerForModule, [:pointer, :pointer, :uint, :pointer], :int
24
+ attach_function :LLVMDisposeExecutionEngine, [:pointer], :void
25
+
26
+ attach_function :LLVMRunStaticConstructors, [:pointer], :void
27
+ attach_function :LLVMRunStaticDestructors, [:pointer], :void
28
+
29
+ attach_function :LLVMRunFunctionAsMain, [:pointer, :pointer, :uint, :pointer, :pointer], :int
30
+ attach_function :LLVMRunFunction, [:pointer, :pointer, :uint, :pointer], :pointer
31
+
32
+ attach_function :LLVMFreeMachineCodeForFunction, [:pointer, :pointer], :void
33
+ attach_function :LLVMAddModuleProvider, [:pointer, :pointer], :void
34
+ attach_function :LLVMRemoveModuleProvider, [:pointer, :pointer, :pointer, :pointer], :int
35
+
36
+ attach_function :LLVMFindFunction, [:pointer, :pointer, :pointer, :pointer], :int
37
+
38
+ attach_function :LLVMGetExecutionEngineTargetData, [:pointer], :pointer
39
+
40
+ attach_function :LLVMAddGlobalMapping, [:pointer, :pointer, :pointer], :void
41
+
42
+ attach_function :LLVMGetPointerToGlobal, [:pointer, :pointer], :pointer
43
+
44
+ attach_function :LLVMInitializeX86TargetInfo, [], :void
45
+
46
+ attach_function :LLVMInitializeX86Target, [], :void
47
+ end
48
+
49
+ def LLVM.init_x86
50
+ LLVM::C.LLVMInitializeX86Target
51
+ LLVM::C.LLVMInitializeX86TargetInfo
52
+ end
53
+
54
+ class ExecutionEngine
55
+ class << self
56
+ private :new
57
+ end
58
+
59
+ def initialize(ptr) # :nodoc:
60
+ @ptr = ptr
61
+ end
62
+
63
+ def to_ptr # :nodoc:
64
+ @ptr
65
+ end
66
+
67
+ def self.create_jit_compiler(mod, opt_level = 3)
68
+ FFI::MemoryPointer.new(FFI.type_size(:pointer)) do |ptr|
69
+ error = FFI::MemoryPointer.new(FFI.type_size(:pointer))
70
+ status = C.LLVMCreateJITCompilerForModule(ptr, mod, opt_level, error)
71
+ errorp = error.read_pointer
72
+ message = errorp.read_string unless errorp.null?
73
+
74
+ if status.zero?
75
+ return new(ptr.read_pointer)
76
+ else
77
+ C.LLVMDisposeMessage(error)
78
+ raise RuntimeError, "Error creating JIT compiler: #{message}"
79
+ end
80
+ end
81
+ end
82
+
83
+ def run_function(fun, *args)
84
+ FFI::MemoryPointer.new(FFI.type_size(:pointer) * args.size) do |args_ptr|
85
+ args_ptr.write_array_of_pointer(args.map { |arg| LLVM.GenericValue(arg).to_ptr })
86
+ return LLVM::GenericValue.from_ptr(
87
+ C.LLVMRunFunction(self, fun, args.size, args_ptr))
88
+ end
89
+ end
90
+
91
+ def pointer_to_global(global)
92
+ C.LLVMGetPointerToGlobal(self, global)
93
+ end
94
+ end
95
+
96
+ class GenericValue
97
+ class << self
98
+ private :new
99
+ end
100
+
101
+ def initialize(ptr) # :nodoc:
102
+ @ptr = ptr
103
+ end
104
+
105
+ def to_ptr # :nodoc:
106
+ @ptr
107
+ end
108
+
109
+ def self.from_i(i, type = LLVM::Int, signed = true)
110
+ new(C.LLVMCreateGenericValueOfInt(type, i, signed ? 1 : 0))
111
+ end
112
+
113
+ def self.from_f(f)
114
+ type = LLVM::Float.type
115
+ new(C.LLVMCreateGenericValueOfFloat(type, f))
116
+ end
117
+
118
+ def self.from_ptr(ptr)
119
+ new(ptr)
120
+ end
121
+
122
+ def to_i(signed = true)
123
+ C.LLVMGenericValueToInt(self, signed ? 1 : 0)
124
+ end
125
+
126
+ def to_f
127
+ C.LLVMGenericValueToFloat(LLVM::Float.type, self)
128
+ end
129
+ end
130
+
131
+ def GenericValue(val)
132
+ case val
133
+ when GenericValue then val
134
+ when Integer then GenericValue.from_i(val)
135
+ when Float then GenericValue.from_f(val)
136
+ end
137
+ end
138
+ module_function :GenericValue
139
+ end
@@ -0,0 +1,8 @@
1
+ require 'llvm'
2
+ require 'llvm/core'
3
+
4
+ module LLVM
5
+ module C
6
+ attach_function :LLVMAddTargetData, [:pointer, :pointer], :void
7
+ end
8
+ end
@@ -0,0 +1,119 @@
1
+ require 'llvm'
2
+ require 'llvm/core'
3
+
4
+ module LLVM
5
+ module C
6
+ attach_function :LLVMAddAggressiveDCEPass, [:pointer], :void
7
+ attach_function :LLVMAddCFGSimplificationPass, [:pointer], :void
8
+ attach_function :LLVMAddDeadStoreEliminationPass, [:pointer], :void
9
+ attach_function :LLVMAddGVNPass, [:pointer], :void
10
+ attach_function :LLVMAddIndVarSimplifyPass, [:pointer], :void
11
+ attach_function :LLVMAddInstructionCombiningPass, [:pointer], :void
12
+ attach_function :LLVMAddJumpThreadingPass, [:pointer], :void
13
+ attach_function :LLVMAddLICMPass, [:pointer], :void
14
+ attach_function :LLVMAddLoopDeletionPass, [:pointer], :void
15
+ attach_function :LLVMAddLoopIndexSplitPass, [:pointer], :void
16
+ attach_function :LLVMAddLoopRotatePass, [:pointer], :void
17
+ attach_function :LLVMAddLoopUnrollPass, [:pointer], :void
18
+ attach_function :LLVMAddLoopUnswitchPass, [:pointer], :void
19
+ attach_function :LLVMAddMemCpyOptPass, [:pointer], :void
20
+ attach_function :LLVMAddPromoteMemoryToRegisterPass, [:pointer], :void
21
+ attach_function :LLVMAddReassociatePass, [:pointer], :void
22
+ attach_function :LLVMAddSCCPPass, [:pointer], :void
23
+ attach_function :LLVMAddScalarReplAggregatesPass, [:pointer], :void
24
+ attach_function :LLVMAddSimplifyLibCallsPass, [:pointer], :void
25
+ attach_function :LLVMAddTailCallEliminationPass, [:pointer], :void
26
+ attach_function :LLVMAddConstantPropagationPass, [:pointer], :void
27
+ attach_function :LLVMAddDemoteMemoryToRegisterPass, [:pointer], :void
28
+ end
29
+
30
+ class PassManager
31
+ def adce!
32
+ C.LLVMAddAggressiveDCEPass(self)
33
+ end
34
+
35
+ def simplifycfg!
36
+ C.LLVMAddCFGSimplificationPass(self)
37
+ end
38
+
39
+ def dse!
40
+ C.LLVMAddDeadStoreEliminationPass(self)
41
+ end
42
+
43
+ def gvn!
44
+ C.LLVMAddGVNPass(self)
45
+ end
46
+
47
+ def indvars!
48
+ C.LLVMAddIndVarSimplifyPass(self)
49
+ end
50
+
51
+ def instcombine!
52
+ C.LLVMAddInstructionCombiningPass(self)
53
+ end
54
+
55
+ def jump_threading!
56
+ C.LLVMAddJumpThreadingPass(self)
57
+ end
58
+
59
+ def licm!
60
+ C.LLVMAddLICMPass(self)
61
+ end
62
+
63
+ def loop_deletion!
64
+ C.LLVMAddLoopDeletionPass(self)
65
+ end
66
+
67
+ def loop_index_split!
68
+ C.LLVMAddLoopIndexSplitPass(self)
69
+ end
70
+
71
+ def loop_rotate!
72
+ C.LLVMAddLoopRotatePass(self)
73
+ end
74
+
75
+ def loop_unroll!
76
+ C.LLVMAddLoopUnrollPass(self)
77
+ end
78
+
79
+ def loop_unswitch!
80
+ C.LLVMAddLoopUnswitchPass(self)
81
+ end
82
+
83
+ def memcpyopt!
84
+ C.LLVMAddMemCpyOptPass(self)
85
+ end
86
+
87
+ def mem2reg!
88
+ C.LLVMAddPromoteMemoryToRegisterPass(self)
89
+ end
90
+
91
+ def reassociate!
92
+ C.LLVMAddReassociatePass(self)
93
+ end
94
+
95
+ def sccp!
96
+ C.LLVMAddSCCPPass(self)
97
+ end
98
+
99
+ def scalarrepl!
100
+ C.LLVMAddScalarReplAggregatesPass(self)
101
+ end
102
+
103
+ def simplify_libcalls!
104
+ C.LLVMAddSimplifyLibCallsPass(self)
105
+ end
106
+
107
+ def tailcallelim!
108
+ C.LLVMAddTailCallEliminationPass(self)
109
+ end
110
+
111
+ def constprop!
112
+ C.LLVMAddConstantPropagationPass(self)
113
+ end
114
+
115
+ def reg2mem!
116
+ C.LLVMAddDemoteMemoryToRegisterPass(self)
117
+ end
118
+ end
119
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-llvm
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.7.0
5
+ platform: ruby
6
+ authors:
7
+ - Jeremy Voorhis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-06-10 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: ffi
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.5.4
24
+ version:
25
+ description:
26
+ email: jvoorhis@gmail.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - README.rdoc
33
+ files:
34
+ - lib/llvm/analysis.rb
35
+ - lib/llvm/core/builder.rb
36
+ - lib/llvm/core/context.rb
37
+ - lib/llvm/core/module.rb
38
+ - lib/llvm/core/pass_manager.rb
39
+ - lib/llvm/core/type.rb
40
+ - lib/llvm/core/value.rb
41
+ - lib/llvm/core.rb
42
+ - lib/llvm/execution_engine.rb
43
+ - lib/llvm/target.rb
44
+ - lib/llvm/transforms/scalar.rb
45
+ - lib/llvm.rb
46
+ - README.rdoc
47
+ has_rdoc: true
48
+ homepage: http://github.com/jvoorhis/ruby-llvm
49
+ post_install_message:
50
+ rdoc_options: []
51
+
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ version:
66
+ requirements: []
67
+
68
+ rubyforge_project:
69
+ rubygems_version: 1.3.1
70
+ signing_key:
71
+ specification_version: 2
72
+ summary: LLVM bindings for Ruby
73
+ test_files: []
74
+