ruby-llvm 3.5.0 → 13.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 +21 -4
- data/ext/ruby-llvm-support/Rakefile +17 -6
- data/lib/llvm/analysis.rb +2 -0
- data/lib/llvm/analysis_ffi.rb +27 -28
- data/lib/llvm/config.rb +4 -4
- data/lib/llvm/core/bitcode.rb +12 -10
- data/lib/llvm/core/bitcode_ffi.rb +89 -65
- data/lib/llvm/core/builder.rb +4 -3
- data/lib/llvm/core/context.rb +3 -1
- data/lib/llvm/core/module.rb +2 -0
- data/lib/llvm/core/pass_manager.rb +6 -2
- data/lib/llvm/core/type.rb +9 -2
- data/lib/llvm/core/value.rb +154 -24
- data/lib/llvm/core.rb +47 -2
- data/lib/llvm/core_ffi.rb +3863 -3730
- data/lib/llvm/execution_engine.rb +39 -35
- data/lib/llvm/execution_engine_ffi.rb +238 -276
- data/lib/llvm/linker.rb +3 -14
- data/lib/llvm/linker_ffi.rb +22 -26
- data/lib/llvm/support.rb +2 -0
- data/lib/llvm/target.rb +11 -15
- data/lib/llvm/target_ffi.rb +301 -293
- data/lib/llvm/transforms/builder.rb +3 -1
- data/lib/llvm/transforms/builder_ffi.rb +57 -58
- data/lib/llvm/transforms/ipo.rb +3 -1
- data/lib/llvm/transforms/ipo_ffi.rb +59 -60
- data/lib/llvm/transforms/scalar.rb +12 -0
- data/lib/llvm/transforms/scalar_ffi.rb +199 -143
- data/lib/llvm/transforms/vectorize.rb +2 -0
- data/lib/llvm/transforms/vectorize_ffi.rb +15 -16
- data/lib/llvm/version.rb +5 -2
- data/lib/llvm.rb +2 -0
- data/test/array_test.rb +2 -0
- data/test/basic_block_test.rb +2 -1
- data/test/binary_operations_test.rb +2 -0
- data/test/bitcode_test.rb +3 -2
- data/test/branch_test.rb +2 -0
- data/test/call_test.rb +3 -1
- data/test/comparisons_test.rb +2 -0
- data/test/conversions_test.rb +2 -0
- data/test/double_test.rb +10 -7
- data/test/equality_test.rb +4 -4
- data/test/function_test.rb +29 -0
- data/test/generic_value_test.rb +3 -1
- data/test/instruction_test.rb +2 -2
- data/test/integer_test.rb +28 -0
- data/test/ipo_test.rb +3 -1
- data/test/linker_test.rb +2 -9
- data/test/mcjit_test.rb +11 -3
- data/test/memory_access_test.rb +2 -0
- data/test/module_test.rb +18 -1
- data/test/parameter_collection_test.rb +2 -0
- data/test/pass_manager_builder_test.rb +22 -2
- 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 +16 -20
- data/test/test_helper.rb +6 -1
- data/test/type_test.rb +47 -0
- data/test/vector_test.rb +2 -0
- metadata +105 -40
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'llvm'
|
2
4
|
require 'llvm/core'
|
3
5
|
require 'llvm/transforms/builder_ffi'
|
@@ -83,7 +85,7 @@ module LLVM
|
|
83
85
|
|
84
86
|
# Populate an LTO pass manager.
|
85
87
|
# @param [PassManager] pass_manager
|
86
|
-
def build_with_lto(pass_manager, internalize=false, run_inliner=false)
|
88
|
+
def build_with_lto(pass_manager, internalize = false, run_inliner = false)
|
87
89
|
if pass_manager.is_a?(FunctionPassManager)
|
88
90
|
raise ArgumentError, "FunctionPassManager does not support LTO"
|
89
91
|
end
|
@@ -4,115 +4,114 @@ require 'ffi'
|
|
4
4
|
|
5
5
|
module LLVM::C
|
6
6
|
extend FFI::Library
|
7
|
-
ffi_lib ["libLLVM-
|
8
|
-
|
7
|
+
ffi_lib ["libLLVM-13.so.1", "libLLVM.so.13", "LLVM-13"]
|
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
|
class OpaquePassManagerBuilder < FFI::Struct
|
17
17
|
layout :dummy, :char
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
# See llvm::PassManagerBuilder.
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# @method pass_manager_builder_create()
|
23
|
-
# @return [OpaquePassManagerBuilder]
|
23
|
+
# @return [OpaquePassManagerBuilder]
|
24
24
|
# @scope class
|
25
25
|
attach_function :pass_manager_builder_create, :LLVMPassManagerBuilderCreate, [], OpaquePassManagerBuilder
|
26
|
-
|
26
|
+
|
27
27
|
# (Not documented)
|
28
|
-
#
|
28
|
+
#
|
29
29
|
# @method pass_manager_builder_dispose(pmb)
|
30
|
-
# @param [OpaquePassManagerBuilder] pmb
|
31
|
-
# @return [nil]
|
30
|
+
# @param [OpaquePassManagerBuilder] pmb
|
31
|
+
# @return [nil]
|
32
32
|
# @scope class
|
33
33
|
attach_function :pass_manager_builder_dispose, :LLVMPassManagerBuilderDispose, [OpaquePassManagerBuilder], :void
|
34
|
-
|
34
|
+
|
35
35
|
# See llvm::PassManagerBuilder::OptLevel.
|
36
|
-
#
|
36
|
+
#
|
37
37
|
# @method pass_manager_builder_set_opt_level(pmb, opt_level)
|
38
|
-
# @param [OpaquePassManagerBuilder] pmb
|
39
|
-
# @param [Integer] opt_level
|
40
|
-
# @return [nil]
|
38
|
+
# @param [OpaquePassManagerBuilder] pmb
|
39
|
+
# @param [Integer] opt_level
|
40
|
+
# @return [nil]
|
41
41
|
# @scope class
|
42
42
|
attach_function :pass_manager_builder_set_opt_level, :LLVMPassManagerBuilderSetOptLevel, [OpaquePassManagerBuilder, :uint], :void
|
43
|
-
|
43
|
+
|
44
44
|
# See llvm::PassManagerBuilder::SizeLevel.
|
45
|
-
#
|
45
|
+
#
|
46
46
|
# @method pass_manager_builder_set_size_level(pmb, size_level)
|
47
|
-
# @param [OpaquePassManagerBuilder] pmb
|
48
|
-
# @param [Integer] size_level
|
49
|
-
# @return [nil]
|
47
|
+
# @param [OpaquePassManagerBuilder] pmb
|
48
|
+
# @param [Integer] size_level
|
49
|
+
# @return [nil]
|
50
50
|
# @scope class
|
51
51
|
attach_function :pass_manager_builder_set_size_level, :LLVMPassManagerBuilderSetSizeLevel, [OpaquePassManagerBuilder, :uint], :void
|
52
|
-
|
52
|
+
|
53
53
|
# See llvm::PassManagerBuilder::DisableUnitAtATime.
|
54
|
-
#
|
54
|
+
#
|
55
55
|
# @method pass_manager_builder_set_disable_unit_at_a_time(pmb, value)
|
56
|
-
# @param [OpaquePassManagerBuilder] pmb
|
57
|
-
# @param [Integer] value
|
58
|
-
# @return [nil]
|
56
|
+
# @param [OpaquePassManagerBuilder] pmb
|
57
|
+
# @param [Integer] value
|
58
|
+
# @return [nil]
|
59
59
|
# @scope class
|
60
60
|
attach_function :pass_manager_builder_set_disable_unit_at_a_time, :LLVMPassManagerBuilderSetDisableUnitAtATime, [OpaquePassManagerBuilder, :int], :void
|
61
|
-
|
61
|
+
|
62
62
|
# See llvm::PassManagerBuilder::DisableUnrollLoops.
|
63
|
-
#
|
63
|
+
#
|
64
64
|
# @method pass_manager_builder_set_disable_unroll_loops(pmb, value)
|
65
|
-
# @param [OpaquePassManagerBuilder] pmb
|
66
|
-
# @param [Integer] value
|
67
|
-
# @return [nil]
|
65
|
+
# @param [OpaquePassManagerBuilder] pmb
|
66
|
+
# @param [Integer] value
|
67
|
+
# @return [nil]
|
68
68
|
# @scope class
|
69
69
|
attach_function :pass_manager_builder_set_disable_unroll_loops, :LLVMPassManagerBuilderSetDisableUnrollLoops, [OpaquePassManagerBuilder, :int], :void
|
70
|
-
|
70
|
+
|
71
71
|
# See llvm::PassManagerBuilder::DisableSimplifyLibCalls
|
72
|
-
#
|
72
|
+
#
|
73
73
|
# @method pass_manager_builder_set_disable_simplify_lib_calls(pmb, value)
|
74
|
-
# @param [OpaquePassManagerBuilder] pmb
|
75
|
-
# @param [Integer] value
|
76
|
-
# @return [nil]
|
74
|
+
# @param [OpaquePassManagerBuilder] pmb
|
75
|
+
# @param [Integer] value
|
76
|
+
# @return [nil]
|
77
77
|
# @scope class
|
78
78
|
attach_function :pass_manager_builder_set_disable_simplify_lib_calls, :LLVMPassManagerBuilderSetDisableSimplifyLibCalls, [OpaquePassManagerBuilder, :int], :void
|
79
|
-
|
79
|
+
|
80
80
|
# See llvm::PassManagerBuilder::Inliner.
|
81
|
-
#
|
81
|
+
#
|
82
82
|
# @method pass_manager_builder_use_inliner_with_threshold(pmb, threshold)
|
83
|
-
# @param [OpaquePassManagerBuilder] pmb
|
84
|
-
# @param [Integer] threshold
|
85
|
-
# @return [nil]
|
83
|
+
# @param [OpaquePassManagerBuilder] pmb
|
84
|
+
# @param [Integer] threshold
|
85
|
+
# @return [nil]
|
86
86
|
# @scope class
|
87
87
|
attach_function :pass_manager_builder_use_inliner_with_threshold, :LLVMPassManagerBuilderUseInlinerWithThreshold, [OpaquePassManagerBuilder, :uint], :void
|
88
|
-
|
88
|
+
|
89
89
|
# See llvm::PassManagerBuilder::populateFunctionPassManager.
|
90
|
-
#
|
90
|
+
#
|
91
91
|
# @method pass_manager_builder_populate_function_pass_manager(pmb, pm)
|
92
|
-
# @param [OpaquePassManagerBuilder] pmb
|
93
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
94
|
-
# @return [nil]
|
92
|
+
# @param [OpaquePassManagerBuilder] pmb
|
93
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
94
|
+
# @return [nil]
|
95
95
|
# @scope class
|
96
96
|
attach_function :pass_manager_builder_populate_function_pass_manager, :LLVMPassManagerBuilderPopulateFunctionPassManager, [OpaquePassManagerBuilder, :pointer], :void
|
97
|
-
|
97
|
+
|
98
98
|
# See llvm::PassManagerBuilder::populateModulePassManager.
|
99
|
-
#
|
99
|
+
#
|
100
100
|
# @method pass_manager_builder_populate_module_pass_manager(pmb, pm)
|
101
|
-
# @param [OpaquePassManagerBuilder] pmb
|
102
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
103
|
-
# @return [nil]
|
101
|
+
# @param [OpaquePassManagerBuilder] pmb
|
102
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
103
|
+
# @return [nil]
|
104
104
|
# @scope class
|
105
105
|
attach_function :pass_manager_builder_populate_module_pass_manager, :LLVMPassManagerBuilderPopulateModulePassManager, [OpaquePassManagerBuilder, :pointer], :void
|
106
|
-
|
106
|
+
|
107
107
|
# See llvm::PassManagerBuilder::populateLTOPassManager.
|
108
|
-
#
|
108
|
+
#
|
109
109
|
# @method pass_manager_builder_populate_lto_pass_manager(pmb, pm, internalize, run_inliner)
|
110
|
-
# @param [OpaquePassManagerBuilder] pmb
|
111
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
112
|
-
# @param [Integer] internalize
|
113
|
-
# @param [Integer] run_inliner
|
114
|
-
# @return [nil]
|
110
|
+
# @param [OpaquePassManagerBuilder] pmb
|
111
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
112
|
+
# @param [Integer] internalize
|
113
|
+
# @param [Integer] run_inliner
|
114
|
+
# @return [nil]
|
115
115
|
# @scope class
|
116
116
|
attach_function :pass_manager_builder_populate_lto_pass_manager, :LLVMPassManagerBuilderPopulateLTOPassManager, [OpaquePassManagerBuilder, :pointer, :int, :int], :void
|
117
|
-
|
118
117
|
end
|
data/lib/llvm/transforms/ipo.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Interprocedural optimization (IPO)
|
2
4
|
require 'llvm'
|
3
5
|
require 'llvm/core'
|
@@ -61,7 +63,7 @@ module LLVM
|
|
61
63
|
end
|
62
64
|
|
63
65
|
# @LLVMpass internalize
|
64
|
-
def internalize!(all_but_main=true)
|
66
|
+
def internalize!(all_but_main = true)
|
65
67
|
C.add_internalize_pass(self, all_but_main)
|
66
68
|
end
|
67
69
|
|
@@ -4,125 +4,124 @@ require 'ffi'
|
|
4
4
|
|
5
5
|
module LLVM::C
|
6
6
|
extend FFI::Library
|
7
|
-
ffi_lib ["libLLVM-
|
8
|
-
|
7
|
+
ffi_lib ["libLLVM-13.so.1", "libLLVM.so.13", "LLVM-13"]
|
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
|
# See llvm::createArgumentPromotionPass function.
|
16
|
-
#
|
16
|
+
#
|
17
17
|
# @method add_argument_promotion_pass(pm)
|
18
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
19
|
-
# @return [nil]
|
18
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
19
|
+
# @return [nil]
|
20
20
|
# @scope class
|
21
21
|
attach_function :add_argument_promotion_pass, :LLVMAddArgumentPromotionPass, [:pointer], :void
|
22
|
-
|
22
|
+
|
23
23
|
# See llvm::createConstantMergePass function.
|
24
|
-
#
|
24
|
+
#
|
25
25
|
# @method add_constant_merge_pass(pm)
|
26
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
27
|
-
# @return [nil]
|
26
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
27
|
+
# @return [nil]
|
28
28
|
# @scope class
|
29
29
|
attach_function :add_constant_merge_pass, :LLVMAddConstantMergePass, [:pointer], :void
|
30
|
-
|
30
|
+
|
31
31
|
# See llvm::createDeadArgEliminationPass function.
|
32
|
-
#
|
32
|
+
#
|
33
33
|
# @method add_dead_arg_elimination_pass(pm)
|
34
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
35
|
-
# @return [nil]
|
34
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
35
|
+
# @return [nil]
|
36
36
|
# @scope class
|
37
37
|
attach_function :add_dead_arg_elimination_pass, :LLVMAddDeadArgEliminationPass, [:pointer], :void
|
38
|
-
|
38
|
+
|
39
39
|
# See llvm::createFunctionAttrsPass function.
|
40
|
-
#
|
40
|
+
#
|
41
41
|
# @method add_function_attrs_pass(pm)
|
42
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
43
|
-
# @return [nil]
|
42
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
43
|
+
# @return [nil]
|
44
44
|
# @scope class
|
45
45
|
attach_function :add_function_attrs_pass, :LLVMAddFunctionAttrsPass, [:pointer], :void
|
46
|
-
|
46
|
+
|
47
47
|
# See llvm::createFunctionInliningPass function.
|
48
|
-
#
|
48
|
+
#
|
49
49
|
# @method add_function_inlining_pass(pm)
|
50
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
51
|
-
# @return [nil]
|
50
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
51
|
+
# @return [nil]
|
52
52
|
# @scope class
|
53
53
|
attach_function :add_function_inlining_pass, :LLVMAddFunctionInliningPass, [:pointer], :void
|
54
|
-
|
54
|
+
|
55
55
|
# See llvm::createAlwaysInlinerPass function.
|
56
|
-
#
|
56
|
+
#
|
57
57
|
# @method add_always_inliner_pass(pm)
|
58
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
59
|
-
# @return [nil]
|
58
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
59
|
+
# @return [nil]
|
60
60
|
# @scope class
|
61
61
|
attach_function :add_always_inliner_pass, :LLVMAddAlwaysInlinerPass, [:pointer], :void
|
62
|
-
|
62
|
+
|
63
63
|
# See llvm::createGlobalDCEPass function.
|
64
|
-
#
|
64
|
+
#
|
65
65
|
# @method add_global_dce_pass(pm)
|
66
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
67
|
-
# @return [nil]
|
66
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
67
|
+
# @return [nil]
|
68
68
|
# @scope class
|
69
69
|
attach_function :add_global_dce_pass, :LLVMAddGlobalDCEPass, [:pointer], :void
|
70
|
-
|
70
|
+
|
71
71
|
# See llvm::createGlobalOptimizerPass function.
|
72
|
-
#
|
72
|
+
#
|
73
73
|
# @method add_global_optimizer_pass(pm)
|
74
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
75
|
-
# @return [nil]
|
74
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
75
|
+
# @return [nil]
|
76
76
|
# @scope class
|
77
77
|
attach_function :add_global_optimizer_pass, :LLVMAddGlobalOptimizerPass, [:pointer], :void
|
78
|
-
|
78
|
+
|
79
79
|
# See llvm::createIPConstantPropagationPass function.
|
80
|
-
#
|
80
|
+
#
|
81
81
|
# @method add_ip_constant_propagation_pass(pm)
|
82
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
83
|
-
# @return [nil]
|
82
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
83
|
+
# @return [nil]
|
84
84
|
# @scope class
|
85
85
|
attach_function :add_ip_constant_propagation_pass, :LLVMAddIPConstantPropagationPass, [:pointer], :void
|
86
|
-
|
86
|
+
|
87
87
|
# See llvm::createPruneEHPass function.
|
88
|
-
#
|
88
|
+
#
|
89
89
|
# @method add_prune_eh_pass(pm)
|
90
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
91
|
-
# @return [nil]
|
90
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
91
|
+
# @return [nil]
|
92
92
|
# @scope class
|
93
93
|
attach_function :add_prune_eh_pass, :LLVMAddPruneEHPass, [:pointer], :void
|
94
|
-
|
94
|
+
|
95
95
|
# See llvm::createIPSCCPPass function.
|
96
|
-
#
|
96
|
+
#
|
97
97
|
# @method add_ipsccp_pass(pm)
|
98
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
99
|
-
# @return [nil]
|
98
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
99
|
+
# @return [nil]
|
100
100
|
# @scope class
|
101
101
|
attach_function :add_ipsccp_pass, :LLVMAddIPSCCPPass, [:pointer], :void
|
102
|
-
|
102
|
+
|
103
103
|
# See llvm::createInternalizePass function.
|
104
|
-
#
|
104
|
+
#
|
105
105
|
# @method add_internalize_pass(pass_manager_ref, all_but_main)
|
106
|
-
# @param [FFI::Pointer(PassManagerRef)] pass_manager_ref
|
107
|
-
# @param [Integer] all_but_main
|
108
|
-
# @return [nil]
|
106
|
+
# @param [FFI::Pointer(PassManagerRef)] pass_manager_ref
|
107
|
+
# @param [Integer] all_but_main
|
108
|
+
# @return [nil]
|
109
109
|
# @scope class
|
110
110
|
attach_function :add_internalize_pass, :LLVMAddInternalizePass, [:pointer, :uint], :void
|
111
|
-
|
111
|
+
|
112
112
|
# See llvm::createStripDeadPrototypesPass function.
|
113
|
-
#
|
113
|
+
#
|
114
114
|
# @method add_strip_dead_prototypes_pass(pm)
|
115
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
116
|
-
# @return [nil]
|
115
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
116
|
+
# @return [nil]
|
117
117
|
# @scope class
|
118
118
|
attach_function :add_strip_dead_prototypes_pass, :LLVMAddStripDeadPrototypesPass, [:pointer], :void
|
119
|
-
|
119
|
+
|
120
120
|
# See llvm::createStripSymbolsPass function.
|
121
|
-
#
|
121
|
+
#
|
122
122
|
# @method add_strip_symbols_pass(pm)
|
123
|
-
# @param [FFI::Pointer(PassManagerRef)] pm
|
124
|
-
# @return [nil]
|
123
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
124
|
+
# @return [nil]
|
125
125
|
# @scope class
|
126
126
|
attach_function :add_strip_symbols_pass, :LLVMAddStripSymbolsPass, [:pointer], :void
|
127
|
-
|
128
127
|
end
|
@@ -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
|