ruby-llvm 13.0.0 → 13.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 +4 -4
- data/ext/ruby-llvm-support/Rakefile +2 -0
- data/lib/llvm/analysis.rb +2 -0
- data/lib/llvm/core/bitcode.rb +2 -0
- data/lib/llvm/core/builder.rb +2 -0
- data/lib/llvm/core/context.rb +2 -0
- data/lib/llvm/core/module.rb +2 -0
- data/lib/llvm/core/pass_manager.rb +2 -0
- data/lib/llvm/core/type.rb +7 -0
- data/lib/llvm/core/value.rb +16 -0
- data/lib/llvm/core.rb +2 -0
- data/lib/llvm/execution_engine.rb +2 -0
- data/lib/llvm/linker.rb +2 -0
- data/lib/llvm/support.rb +2 -0
- data/lib/llvm/target.rb +2 -0
- data/lib/llvm/transforms/builder.rb +2 -0
- data/lib/llvm/transforms/ipo.rb +2 -0
- data/lib/llvm/transforms/scalar.rb +12 -0
- data/lib/llvm/transforms/vectorize.rb +2 -0
- data/lib/llvm/version.rb +5 -3
- data/lib/llvm.rb +2 -0
- data/test/array_test.rb +2 -0
- data/test/basic_block_test.rb +2 -0
- data/test/binary_operations_test.rb +2 -0
- data/test/bitcode_test.rb +2 -0
- data/test/branch_test.rb +2 -0
- data/test/call_test.rb +2 -0
- data/test/comparisons_test.rb +2 -0
- data/test/conversions_test.rb +2 -0
- data/test/double_test.rb +2 -0
- data/test/equality_test.rb +2 -0
- data/test/function_test.rb +2 -0
- data/test/generic_value_test.rb +2 -0
- data/test/instruction_test.rb +2 -0
- data/test/integer_test.rb +28 -0
- data/test/ipo_test.rb +2 -0
- data/test/linker_test.rb +2 -0
- data/test/mcjit_test.rb +2 -0
- data/test/memory_access_test.rb +2 -0
- data/test/module_test.rb +2 -0
- data/test/parameter_collection_test.rb +2 -0
- data/test/pass_manager_builder_test.rb +21 -0
- data/test/phi_test.rb +2 -0
- data/test/select_test.rb +2 -0
- data/test/struct_test.rb +2 -0
- data/test/target_test.rb +15 -3
- data/test/test_helper.rb +2 -0
- data/test/type_test.rb +47 -0
- data/test/vector_test.rb +2 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4728b4463e1ffaea0e8b00c976923fe77404b01c55ff3c25b015aa2fef5decf
|
4
|
+
data.tar.gz: 35e6017a7035f29b9a39cfd6cbf18116a181f9e2706b12c0318a251525250bc7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5353f3dfc22fcaa701ffa5bc70d5987e03a678881ad03a530ed99f4baada579396c9d8720a999cb9fff9fb93d4efad13fb2cd4ed6486b9a0658f54ad5676f663
|
7
|
+
data.tar.gz: 95cbae2bfda937b9d8eb1a821083bc04858a3e19942ffbf8c195671f51f817d17be2829c51015e3bcd9b699eb467e9dca127e0ff0bb743a2f76288180014846d
|
data/lib/llvm/analysis.rb
CHANGED
data/lib/llvm/core/bitcode.rb
CHANGED
data/lib/llvm/core/builder.rb
CHANGED
data/lib/llvm/core/context.rb
CHANGED
data/lib/llvm/core/module.rb
CHANGED
data/lib/llvm/core/type.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module LLVM
|
2
4
|
class Type
|
3
5
|
include PointerIdentity
|
@@ -59,6 +61,11 @@ module LLVM
|
|
59
61
|
C.dump_type(self)
|
60
62
|
end
|
61
63
|
|
64
|
+
# Build string of LLVM type representation.
|
65
|
+
def to_s
|
66
|
+
C.print_type_to_string(self)
|
67
|
+
end
|
68
|
+
|
62
69
|
# Creates an array type of Type with the given size.
|
63
70
|
def self.array(ty, sz = 0)
|
64
71
|
from_ptr(C.array_type(LLVM::Type(ty), sz), :array)
|
data/lib/llvm/core/value.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module LLVM
|
2
4
|
class Value
|
3
5
|
include PointerIdentity
|
@@ -40,6 +42,10 @@ module LLVM
|
|
40
42
|
C.dump_value(self)
|
41
43
|
end
|
42
44
|
|
45
|
+
def to_s
|
46
|
+
C.print_value_to_string(self)
|
47
|
+
end
|
48
|
+
|
43
49
|
# Returns whether the value is constant.
|
44
50
|
def constant?
|
45
51
|
case C.is_constant(self)
|
@@ -483,6 +489,16 @@ module LLVM
|
|
483
489
|
def int_to_ptr(type)
|
484
490
|
ConstantExpr.from_ptr(C.const_int_to_ptr(self, type))
|
485
491
|
end
|
492
|
+
|
493
|
+
# constant zext
|
494
|
+
def zext(type)
|
495
|
+
self.class.from_ptr(C.const_z_ext(self, type))
|
496
|
+
end
|
497
|
+
|
498
|
+
# constant sext
|
499
|
+
def sext(type)
|
500
|
+
self.class.from_ptr(C.const_s_ext(self, type))
|
501
|
+
end
|
486
502
|
end
|
487
503
|
|
488
504
|
def self.const_missing(const)
|
data/lib/llvm/core.rb
CHANGED
data/lib/llvm/linker.rb
CHANGED
data/lib/llvm/support.rb
CHANGED
data/lib/llvm/target.rb
CHANGED
data/lib/llvm/transforms/ipo.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'llvm'
|
2
4
|
require 'llvm/core'
|
3
5
|
require 'llvm/transforms/scalar_ffi'
|
@@ -148,5 +150,15 @@ module LLVM
|
|
148
150
|
def basicaa!
|
149
151
|
C.add_basic_alias_analysis_pass(self)
|
150
152
|
end
|
153
|
+
|
154
|
+
# @LLVMpass mergefunc
|
155
|
+
def mergefunc!
|
156
|
+
C.add_merge_functions_pass(self)
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
module C
|
162
|
+
attach_function :add_merge_functions_pass, :LLVMAddMergeFunctionsPass, [:pointer], :void
|
151
163
|
end
|
152
164
|
end
|
data/lib/llvm/version.rb
CHANGED
data/lib/llvm.rb
CHANGED
data/test/array_test.rb
CHANGED
data/test/basic_block_test.rb
CHANGED
data/test/bitcode_test.rb
CHANGED
data/test/branch_test.rb
CHANGED
data/test/call_test.rb
CHANGED
data/test/comparisons_test.rb
CHANGED
data/test/conversions_test.rb
CHANGED
data/test/double_test.rb
CHANGED
data/test/equality_test.rb
CHANGED
data/test/function_test.rb
CHANGED
data/test/generic_value_test.rb
CHANGED
data/test/instruction_test.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class IntegerTestCase < Minitest::Test
|
6
|
+
|
7
|
+
def test_const_zext
|
8
|
+
assert i = LLVM::Int8.from_i(-1)
|
9
|
+
assert_equal 'i8 -1', i.to_s
|
10
|
+
assert_equal :integer, i.type.kind
|
11
|
+
assert_equal 8, i.type.width
|
12
|
+
assert zext = i.zext(LLVM::Int64)
|
13
|
+
assert_equal 'i64 255', zext.to_s
|
14
|
+
assert_equal :integer, zext.type.kind
|
15
|
+
assert_equal 64, zext.type.width
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_const_sext
|
19
|
+
assert i = LLVM::Int8.from_i(-1)
|
20
|
+
assert_equal 'i8 -1', i.to_s
|
21
|
+
assert_equal :integer, i.type.kind
|
22
|
+
assert_equal 8, i.type.width
|
23
|
+
assert sext = i.sext(LLVM::Int64)
|
24
|
+
assert_equal 'i64 -1', sext.to_s
|
25
|
+
assert_equal :integer, sext.type.kind
|
26
|
+
assert_equal 64, sext.type.width
|
27
|
+
end
|
28
|
+
end
|
data/test/ipo_test.rb
CHANGED
data/test/linker_test.rb
CHANGED
data/test/mcjit_test.rb
CHANGED
data/test/memory_access_test.rb
CHANGED
data/test/module_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
require 'llvm/config'
|
3
5
|
require 'llvm/transforms/builder'
|
@@ -50,4 +52,23 @@ class PassManagerBuilderTest < Minitest::Test
|
|
50
52
|
@builder.build_with_lto(@pass_manager, false, 0)
|
51
53
|
end
|
52
54
|
end
|
55
|
+
|
56
|
+
PASSES = [
|
57
|
+
'always_inline!',
|
58
|
+
'adce!',
|
59
|
+
'tailcallelim!',
|
60
|
+
'fun_attrs!',
|
61
|
+
'mergefunc!',
|
62
|
+
].freeze
|
63
|
+
|
64
|
+
describe "PassManager Passes" do
|
65
|
+
before do
|
66
|
+
assert @pass_manager = LLVM::PassManager.new
|
67
|
+
end
|
68
|
+
PASSES.each do |pass|
|
69
|
+
it "should return '#{pass}'" do
|
70
|
+
assert_nil @pass_manager.send(pass)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
53
74
|
end
|
data/test/phi_test.rb
CHANGED
data/test/select_test.rb
CHANGED
data/test/struct_test.rb
CHANGED
data/test/target_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: ascii-8bit
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require "test_helper"
|
4
5
|
require 'tempfile'
|
@@ -71,13 +72,24 @@ class TargetTestCase < Minitest::Test
|
|
71
72
|
|
72
73
|
Tempfile.open('emit') do |tmp|
|
73
74
|
mach.emit(mod, tmp.path)
|
74
|
-
|
75
|
+
data = tmp.read
|
76
|
+
assert_match(/xorl\t%eax, %eax/, data)
|
77
|
+
assert_equal 218, data.length
|
75
78
|
end
|
76
79
|
|
77
|
-
|
80
|
+
# despite the above test, in LLVM <= 11 the objdump output was:
|
81
|
+
# 00000000 <main>:
|
82
|
+
# 0: 66 31 c0 xor %ax,%ax
|
83
|
+
# 3: 66 c3 retw
|
84
|
+
# In LLVM 13, the objdump output is:
|
85
|
+
# 00000000 <main>:
|
86
|
+
# 0: 31 c0 xor %eax,%eax
|
87
|
+
# 2: c3 ret
|
78
88
|
Tempfile.open('emit') do |tmp|
|
79
89
|
mach.emit(mod, tmp.path, :object)
|
80
|
-
|
90
|
+
data = File.read(tmp.path, mode: 'rb')
|
91
|
+
assert_match(/\x31\xc0\xc3/, data)
|
92
|
+
assert_equal 528, data.length
|
81
93
|
end
|
82
94
|
end
|
83
95
|
|
data/test/test_helper.rb
CHANGED
data/test/type_test.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "test_helper"
|
2
4
|
|
3
5
|
class TypeTestCase < Minitest::Test
|
4
6
|
|
7
|
+
extend MiniTest::Spec::DSL
|
8
|
+
|
5
9
|
def test_element_type
|
6
10
|
pointer = LLVM.Pointer(LLVM::Int32.type)
|
7
11
|
pointee = pointer.element_type
|
@@ -12,4 +16,47 @@ class TypeTestCase < Minitest::Test
|
|
12
16
|
assert_nil pointee.element_type
|
13
17
|
end
|
14
18
|
|
19
|
+
TO_S_TESTS = [
|
20
|
+
[LLVM.Struct(LLVM::Int32, LLVM::Int32), '{ i32, i32 }'],
|
21
|
+
[LLVM.Struct(LLVM::Int32, LLVM::Int32, "s1"), '%s1 = type { i32, i32 }'],
|
22
|
+
[LLVM::Type.struct([LLVM::Int32, LLVM::Int32], true), '<{ i32, i32 }>'],
|
23
|
+
[LLVM::Type.struct([LLVM::Int32, LLVM::Int32], true, "s2"), '%s2 = type <{ i32, i32 }>'],
|
24
|
+
|
25
|
+
[LLVM.Array(LLVM::Int8), '[0 x i8]'],
|
26
|
+
[LLVM.Array(LLVM::Int8, 42), '[42 x i8]'],
|
27
|
+
[LLVM::Type.array(LLVM::Int1), '[0 x i1]'],
|
28
|
+
[LLVM::Type.array(LLVM::Int1, 42), '[42 x i1]'],
|
29
|
+
|
30
|
+
[LLVM.Vector(LLVM::Int8, 42), '<42 x i8>'],
|
31
|
+
[LLVM::Type.vector(LLVM::Int1, 42), '<42 x i1>'],
|
32
|
+
|
33
|
+
[LLVM.Void, 'void'],
|
34
|
+
[LLVM::Type.void, 'void'],
|
35
|
+
|
36
|
+
[LLVM.Pointer(LLVM::Int8), 'i8*'],
|
37
|
+
[LLVM::Type.pointer(LLVM::Int1), 'i1*'],
|
38
|
+
|
39
|
+
[LLVM.Function([LLVM::Int8], LLVM.Void), 'void (i8)'],
|
40
|
+
[LLVM.Function([LLVM::Int8], LLVM::Int8), 'i8 (i8)'],
|
41
|
+
[LLVM.Function([], LLVM::Int8), 'i8 ()'],
|
42
|
+
[LLVM.Function([], LLVM.Void), 'void ()'],
|
43
|
+
[LLVM::Type.function([LLVM::Int1], LLVM.Void), 'void (i1)'],
|
44
|
+
[LLVM::Type.function([LLVM::Int1], LLVM::Int1), 'i1 (i1)'],
|
45
|
+
[LLVM::Type.function([], LLVM::Int1), 'i1 ()'],
|
46
|
+
[LLVM::Type.function([], LLVM.Void), 'void ()'],
|
47
|
+
].freeze
|
48
|
+
|
49
|
+
describe "LLVM::Type#to_s" do
|
50
|
+
TO_S_TESTS.each do |(type, string)|
|
51
|
+
it "should return '#{string}'" do
|
52
|
+
assert type.is_a?(LLVM::Type)
|
53
|
+
assert_equal string, type.to_s
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should have 22 dynamic tests' do
|
58
|
+
assert_equal 22, TO_S_TESTS.size
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
15
62
|
end
|
data/test/vector_test.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-llvm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 13.0.
|
4
|
+
version: 13.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jesse Johnson
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-
|
12
|
+
date: 2021-12-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 1.13
|
20
|
+
version: '1.13'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 1.13
|
27
|
+
version: '1.13'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rake
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -216,6 +216,7 @@ files:
|
|
216
216
|
- test/function_test.rb
|
217
217
|
- test/generic_value_test.rb
|
218
218
|
- test/instruction_test.rb
|
219
|
+
- test/integer_test.rb
|
219
220
|
- test/ipo_test.rb
|
220
221
|
- test/linker_test.rb
|
221
222
|
- test/mcjit_test.rb
|
@@ -279,4 +280,5 @@ test_files:
|
|
279
280
|
- test/linker_test.rb
|
280
281
|
- test/generic_value_test.rb
|
281
282
|
- test/phi_test.rb
|
283
|
+
- test/integer_test.rb
|
282
284
|
- test/mcjit_test.rb
|