ruby-llvm-next 10.0.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.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +30 -0
  3. data/README.md +67 -0
  4. data/ext/ruby-llvm-support/Rakefile +110 -0
  5. data/ext/ruby-llvm-support/support.cpp +32 -0
  6. data/lib/llvm.rb +29 -0
  7. data/lib/llvm/analysis.rb +49 -0
  8. data/lib/llvm/analysis_ffi.rb +77 -0
  9. data/lib/llvm/config.rb +10 -0
  10. data/lib/llvm/core.rb +97 -0
  11. data/lib/llvm/core/bitcode.rb +84 -0
  12. data/lib/llvm/core/bitcode_ffi.rb +132 -0
  13. data/lib/llvm/core/builder.rb +944 -0
  14. data/lib/llvm/core/context.rb +24 -0
  15. data/lib/llvm/core/module.rb +240 -0
  16. data/lib/llvm/core/pass_manager.rb +80 -0
  17. data/lib/llvm/core/type.rb +210 -0
  18. data/lib/llvm/core/value.rb +1005 -0
  19. data/lib/llvm/core_ffi.rb +6021 -0
  20. data/lib/llvm/execution_engine.rb +323 -0
  21. data/lib/llvm/execution_engine_ffi.rb +421 -0
  22. data/lib/llvm/linker.rb +16 -0
  23. data/lib/llvm/linker_ffi.rb +44 -0
  24. data/lib/llvm/support.rb +38 -0
  25. data/lib/llvm/target.rb +318 -0
  26. data/lib/llvm/target_ffi.rb +628 -0
  27. data/lib/llvm/transforms/builder.rb +107 -0
  28. data/lib/llvm/transforms/builder_ffi.rb +117 -0
  29. data/lib/llvm/transforms/ipo.rb +78 -0
  30. data/lib/llvm/transforms/ipo_ffi.rb +127 -0
  31. data/lib/llvm/transforms/scalar.rb +152 -0
  32. data/lib/llvm/transforms/scalar_ffi.rb +344 -0
  33. data/lib/llvm/transforms/vectorize.rb +22 -0
  34. data/lib/llvm/transforms/vectorize_ffi.rb +38 -0
  35. data/lib/llvm/version.rb +5 -0
  36. data/test/array_test.rb +38 -0
  37. data/test/basic_block_test.rb +87 -0
  38. data/test/binary_operations_test.rb +58 -0
  39. data/test/bitcode_test.rb +24 -0
  40. data/test/branch_test.rb +57 -0
  41. data/test/call_test.rb +82 -0
  42. data/test/comparisons_test.rb +66 -0
  43. data/test/conversions_test.rb +92 -0
  44. data/test/double_test.rb +34 -0
  45. data/test/equality_test.rb +89 -0
  46. data/test/function_test.rb +100 -0
  47. data/test/generic_value_test.rb +22 -0
  48. data/test/instruction_test.rb +30 -0
  49. data/test/ipo_test.rb +53 -0
  50. data/test/linker_test.rb +37 -0
  51. data/test/mcjit_test.rb +94 -0
  52. data/test/memory_access_test.rb +38 -0
  53. data/test/module_test.rb +93 -0
  54. data/test/parameter_collection_test.rb +28 -0
  55. data/test/pass_manager_builder_test.rb +53 -0
  56. data/test/phi_test.rb +33 -0
  57. data/test/select_test.rb +22 -0
  58. data/test/struct_test.rb +98 -0
  59. data/test/target_test.rb +113 -0
  60. data/test/test_helper.rb +62 -0
  61. data/test/type_test.rb +15 -0
  62. data/test/vector_test.rb +64 -0
  63. metadata +240 -0
@@ -0,0 +1,62 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
2
+
3
+ begin
4
+ require "ruby-debug"
5
+ rescue LoadError
6
+ # Ignore ruby-debug is case it's not installed
7
+ end
8
+
9
+ begin
10
+ require 'simplecov'
11
+
12
+ SimpleCov.start do
13
+ add_filter "/test/"
14
+ end
15
+ rescue LoadError
16
+ warn "Proceeding without SimpleCov. gem install simplecov on supported platforms."
17
+ end
18
+
19
+ require "minitest/autorun"
20
+ require 'minitest/reporters'
21
+
22
+ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
23
+
24
+ require "llvm/core"
25
+ require "llvm/execution_engine"
26
+ require "llvm/transforms/scalar"
27
+
28
+ class Minitest::Test
29
+
30
+ LLVM_SIGNED = true
31
+ LLVM_UNSIGNED = false
32
+
33
+ LLVM_FALSE = 0
34
+ LLVM_TRUE = 1
35
+
36
+ end
37
+
38
+ def define_module(module_name)
39
+ new_module = LLVM::Module.new(module_name)
40
+ yield new_module
41
+ new_module.verify
42
+ new_module
43
+ end
44
+
45
+ def define_function(host_module, function_name, argument_types, return_type)
46
+ host_module.functions.add(function_name, argument_types, return_type) do |function, *arguments|
47
+ yield(LLVM::Builder.new, function, *arguments)
48
+ end
49
+ end
50
+
51
+ def run_function_on_module(host_module, function_name, *argument_values)
52
+ LLVM::MCJITCompiler.new(host_module).
53
+ run_function(host_module.functions[function_name], *argument_values)
54
+ end
55
+
56
+ def run_function(argument_types, argument_values, return_type, &block)
57
+ test_module = define_module("test_module") do |host_module|
58
+ define_function(host_module, "test_function", argument_types, return_type, &block)
59
+ end
60
+
61
+ run_function_on_module(test_module, "test_function", *argument_values)
62
+ end
@@ -0,0 +1,15 @@
1
+ require "test_helper"
2
+
3
+ class TypeTestCase < Minitest::Test
4
+
5
+ def test_element_type
6
+ pointer = LLVM.Pointer(LLVM::Int32.type)
7
+ pointee = pointer.element_type
8
+
9
+ assert_equal :pointer, pointer.kind
10
+ assert_equal :integer, pointee.kind
11
+
12
+ assert_nil pointee.element_type
13
+ end
14
+
15
+ end
@@ -0,0 +1,64 @@
1
+ require "test_helper"
2
+
3
+ class VectorTestCase < Minitest::Test
4
+
5
+ def setup
6
+ LLVM.init_jit
7
+ end
8
+
9
+ def test_all_ones_vector
10
+ assert_raises(NotImplementedError) do
11
+ LLVM::ConstantVector.all_ones
12
+ end
13
+ end
14
+
15
+ def test_constant_vector_from_size
16
+ vector = LLVM::ConstantVector.const(2) { |i| LLVM::Int(i) }
17
+ assert_instance_of LLVM::ConstantVector, vector
18
+ assert_equal 2, vector.size
19
+ end
20
+
21
+ def test_constant_vector_from_array
22
+ vector = LLVM::ConstantVector.const([LLVM::Int(0), LLVM::Int(1)])
23
+ assert_instance_of LLVM::ConstantVector, vector
24
+ assert_equal 2, vector.size
25
+ end
26
+
27
+ def test_vector_elements
28
+ assert_equal 2 + 3, run_vector_elements(2, 3).to_i
29
+ end
30
+
31
+ def test_vector_shuffle
32
+ assert_equal 1 + 4, run_vector_shuffle(1, 2, 3, 4).to_i
33
+ end
34
+
35
+ def run_vector_elements(value1, value2)
36
+ run_function([LLVM::Int, LLVM::Int], [value1, value2], LLVM::Int) do |builder, function, *arguments|
37
+ entry = function.basic_blocks.append
38
+ builder.position_at_end(entry)
39
+ pointer = builder.alloca(LLVM::Vector(LLVM::Int, 2))
40
+ vector = builder.load(pointer)
41
+ vector = builder.insert_element(vector, arguments.first, LLVM::Int32.from_i(0))
42
+ vector = builder.insert_element(vector, arguments.last, LLVM::Int32.from_i(1))
43
+ builder.ret(builder.add(builder.extract_element(vector, LLVM::Int32.from_i(0)),
44
+ builder.extract_element(vector, LLVM::Int32.from_i(1))))
45
+ end
46
+ end
47
+
48
+ def run_vector_shuffle(*values)
49
+ run_function([LLVM::Int, LLVM::Int, LLVM::Int, LLVM::Int], values, LLVM::Int) do |builder, function, *arguments|
50
+ entry = function.basic_blocks.append
51
+ builder.position_at_end(entry)
52
+ vector1 = builder.load(builder.alloca(LLVM::Vector(LLVM::Int, 2)))
53
+ vector1 = builder.insert_element(vector1, arguments[0], LLVM::Int32.from_i(0))
54
+ vector1 = builder.insert_element(vector1, arguments[1], LLVM::Int32.from_i(1))
55
+ vector2 = builder.load(builder.alloca(LLVM::Vector(LLVM::Int, 2)))
56
+ vector2 = builder.insert_element(vector2, arguments[2], LLVM::Int32.from_i(0))
57
+ vector2 = builder.insert_element(vector2, arguments[3], LLVM::Int32.from_i(1))
58
+ vector3 = builder.shuffle_vector(vector1, vector2, LLVM::ConstantVector.const([LLVM::Int(0), LLVM::Int(3)]))
59
+ builder.ret(builder.add(builder.extract_element(vector3, LLVM::Int32.from_i(0)),
60
+ builder.extract_element(vector3, LLVM::Int32.from_i(1))))
61
+ end
62
+ end
63
+
64
+ end
metadata ADDED
@@ -0,0 +1,240 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-llvm-next
3
+ version: !ruby/object:Gem::Version
4
+ version: 10.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jesse Johnson
8
+ - Jeremy Voorhis
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2020-12-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ffi
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 1.13.1
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: 1.13.1
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '12'
35
+ - - "<"
36
+ - !ruby/object:Gem::Version
37
+ version: '14'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: '12'
45
+ - - "<"
46
+ - !ruby/object:Gem::Version
47
+ version: '14'
48
+ - !ruby/object:Gem::Dependency
49
+ name: ffi_gen
50
+ requirement: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.2.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.2.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: minitest
64
+ requirement: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 5.14.1
69
+ type: :development
70
+ prerelease: false
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 5.14.1
76
+ - !ruby/object:Gem::Dependency
77
+ name: minitest-reporters
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.4.2
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.4.2
90
+ - !ruby/object:Gem::Dependency
91
+ name: simplecov
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ - !ruby/object:Gem::Dependency
105
+ name: yard
106
+ requirement: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.9.8
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.9.8
118
+ description: Ruby-LLVM is a Ruby language binding to the LLVM compiler infrastructure
119
+ library.
120
+ email:
121
+ - jesse@hightechsorcery.com
122
+ - jvoorhis@gmail.com
123
+ executables: []
124
+ extensions:
125
+ - ext/ruby-llvm-support/Rakefile
126
+ extra_rdoc_files:
127
+ - README.md
128
+ - LICENSE
129
+ files:
130
+ - LICENSE
131
+ - README.md
132
+ - ext/ruby-llvm-support/Rakefile
133
+ - ext/ruby-llvm-support/support.cpp
134
+ - lib/llvm.rb
135
+ - lib/llvm/analysis.rb
136
+ - lib/llvm/analysis_ffi.rb
137
+ - lib/llvm/config.rb
138
+ - lib/llvm/core.rb
139
+ - lib/llvm/core/bitcode.rb
140
+ - lib/llvm/core/bitcode_ffi.rb
141
+ - lib/llvm/core/builder.rb
142
+ - lib/llvm/core/context.rb
143
+ - lib/llvm/core/module.rb
144
+ - lib/llvm/core/pass_manager.rb
145
+ - lib/llvm/core/type.rb
146
+ - lib/llvm/core/value.rb
147
+ - lib/llvm/core_ffi.rb
148
+ - lib/llvm/execution_engine.rb
149
+ - lib/llvm/execution_engine_ffi.rb
150
+ - lib/llvm/linker.rb
151
+ - lib/llvm/linker_ffi.rb
152
+ - lib/llvm/support.rb
153
+ - lib/llvm/target.rb
154
+ - lib/llvm/target_ffi.rb
155
+ - lib/llvm/transforms/builder.rb
156
+ - lib/llvm/transforms/builder_ffi.rb
157
+ - lib/llvm/transforms/ipo.rb
158
+ - lib/llvm/transforms/ipo_ffi.rb
159
+ - lib/llvm/transforms/scalar.rb
160
+ - lib/llvm/transforms/scalar_ffi.rb
161
+ - lib/llvm/transforms/vectorize.rb
162
+ - lib/llvm/transforms/vectorize_ffi.rb
163
+ - lib/llvm/version.rb
164
+ - test/array_test.rb
165
+ - test/basic_block_test.rb
166
+ - test/binary_operations_test.rb
167
+ - test/bitcode_test.rb
168
+ - test/branch_test.rb
169
+ - test/call_test.rb
170
+ - test/comparisons_test.rb
171
+ - test/conversions_test.rb
172
+ - test/double_test.rb
173
+ - test/equality_test.rb
174
+ - test/function_test.rb
175
+ - test/generic_value_test.rb
176
+ - test/instruction_test.rb
177
+ - test/ipo_test.rb
178
+ - test/linker_test.rb
179
+ - test/mcjit_test.rb
180
+ - test/memory_access_test.rb
181
+ - test/module_test.rb
182
+ - test/parameter_collection_test.rb
183
+ - test/pass_manager_builder_test.rb
184
+ - test/phi_test.rb
185
+ - test/select_test.rb
186
+ - test/struct_test.rb
187
+ - test/target_test.rb
188
+ - test/test_helper.rb
189
+ - test/type_test.rb
190
+ - test/vector_test.rb
191
+ homepage: http://github.com/ruby-llvm/ruby-llvm
192
+ licenses: []
193
+ metadata: {}
194
+ post_install_message:
195
+ rdoc_options: []
196
+ require_paths:
197
+ - lib
198
+ required_ruby_version: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ required_rubygems_version: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ requirements: []
209
+ rubygems_version: 3.1.2
210
+ signing_key:
211
+ specification_version: 4
212
+ summary: LLVM bindings for Ruby
213
+ test_files:
214
+ - test/double_test.rb
215
+ - test/type_test.rb
216
+ - test/basic_block_test.rb
217
+ - test/struct_test.rb
218
+ - test/array_test.rb
219
+ - test/vector_test.rb
220
+ - test/instruction_test.rb
221
+ - test/ipo_test.rb
222
+ - test/branch_test.rb
223
+ - test/binary_operations_test.rb
224
+ - test/bitcode_test.rb
225
+ - test/pass_manager_builder_test.rb
226
+ - test/equality_test.rb
227
+ - test/function_test.rb
228
+ - test/parameter_collection_test.rb
229
+ - test/memory_access_test.rb
230
+ - test/select_test.rb
231
+ - test/module_test.rb
232
+ - test/test_helper.rb
233
+ - test/comparisons_test.rb
234
+ - test/target_test.rb
235
+ - test/call_test.rb
236
+ - test/conversions_test.rb
237
+ - test/linker_test.rb
238
+ - test/generic_value_test.rb
239
+ - test/phi_test.rb
240
+ - test/mcjit_test.rb