ruby-llvm 3.0.0.beta → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +6 -3
- data/ext/ruby-llvm-support/Rakefile +1 -0
- data/lib/llvm/analysis.rb +8 -18
- data/lib/llvm/analysis_ffi.rb +68 -0
- data/lib/llvm/core.rb +2 -598
- data/lib/llvm/core/bitcode.rb +12 -16
- data/lib/llvm/core/bitcode_ffi.rb +104 -0
- data/lib/llvm/core/builder.rb +85 -84
- data/lib/llvm/core/context.rb +5 -3
- data/lib/llvm/core/module.rb +24 -22
- data/lib/llvm/core/pass_manager.rb +13 -11
- data/lib/llvm/core/type.rb +56 -24
- data/lib/llvm/core/value.rb +98 -99
- data/lib/llvm/core_ffi.rb +4712 -0
- data/lib/llvm/execution_engine.rb +46 -57
- data/lib/llvm/execution_engine_ffi.rb +310 -0
- data/lib/llvm/support.rb +2 -2
- data/lib/llvm/target.rb +2 -4
- data/lib/llvm/target_ffi.rb +217 -0
- data/lib/llvm/transforms/ipo.rb +3 -8
- data/lib/llvm/transforms/ipo_ffi.rb +122 -0
- data/lib/llvm/transforms/scalar.rb +22 -46
- data/lib/llvm/transforms/scalar_ffi.rb +250 -0
- data/lib/llvm/version.rb +1 -1
- data/test/conversions_test.rb +6 -0
- data/test/equality_test.rb +2 -2
- data/test/struct_test.rb +11 -2
- metadata +97 -83
data/lib/llvm/support.rb
CHANGED
@@ -9,12 +9,12 @@ module LLVM
|
|
9
9
|
'../',
|
10
10
|
FFI.map_library_name('RubyLLVMSupport-3.0.0')))
|
11
11
|
ffi_lib [support_lib]
|
12
|
-
attach_function :LLVMLoadLibraryPermanently, [:string], :int
|
12
|
+
attach_function :load_library_permanently, :LLVMLoadLibraryPermanently, [:string], :int
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
def load_library(libname)
|
17
|
-
Support::C.
|
17
|
+
Support::C.load_library_permanently(libname)
|
18
18
|
nil
|
19
19
|
end
|
20
20
|
|
data/lib/llvm/target.rb
CHANGED
@@ -0,0 +1,217 @@
|
|
1
|
+
# Generated by ffi_gen. Please do not change this file by hand.
|
2
|
+
|
3
|
+
require 'ffi'
|
4
|
+
|
5
|
+
module LLVM::C
|
6
|
+
extend FFI::Library
|
7
|
+
ffi_lib 'LLVM-3.0'
|
8
|
+
|
9
|
+
# (Not documented)
|
10
|
+
#
|
11
|
+
# === Options:
|
12
|
+
# :big ::
|
13
|
+
#
|
14
|
+
# :little ::
|
15
|
+
#
|
16
|
+
#
|
17
|
+
# @return [Array<Symbol>]
|
18
|
+
def self.byte_ordering_enum
|
19
|
+
[:big, :little]
|
20
|
+
end
|
21
|
+
enum :byte_ordering, [
|
22
|
+
:big,
|
23
|
+
:little
|
24
|
+
]
|
25
|
+
|
26
|
+
# (Not documented)
|
27
|
+
#
|
28
|
+
# = Fields:
|
29
|
+
#
|
30
|
+
class OpaqueTargetData < FFI::Struct
|
31
|
+
end
|
32
|
+
|
33
|
+
# (Not documented)
|
34
|
+
#
|
35
|
+
# = Fields:
|
36
|
+
#
|
37
|
+
class OpaqueTargetLibraryInfotData < FFI::Struct
|
38
|
+
end
|
39
|
+
|
40
|
+
# (Not documented)
|
41
|
+
#
|
42
|
+
# = Fields:
|
43
|
+
#
|
44
|
+
class StructLayout < FFI::Struct
|
45
|
+
end
|
46
|
+
|
47
|
+
# Creates target data from a target layout string.
|
48
|
+
# See the constructor llvm::TargetData::TargetData.
|
49
|
+
#
|
50
|
+
# @method create_target_data(string_rep)
|
51
|
+
# @param [String] string_rep
|
52
|
+
# @return [FFI::Pointer(TargetDataRef)]
|
53
|
+
# @scope class
|
54
|
+
attach_function :create_target_data, :LLVMCreateTargetData, [:string], :pointer
|
55
|
+
|
56
|
+
# Adds target data information to a pass manager. This does not take ownership
|
57
|
+
# of the target data.
|
58
|
+
# See the method llvm::PassManagerBase::add.
|
59
|
+
#
|
60
|
+
# @method add_target_data(target_data_ref, pass_manager_ref)
|
61
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
62
|
+
# @param [FFI::Pointer(PassManagerRef)] pass_manager_ref
|
63
|
+
# @return [nil]
|
64
|
+
# @scope class
|
65
|
+
attach_function :add_target_data, :LLVMAddTargetData, [:pointer, :pointer], :void
|
66
|
+
|
67
|
+
# Adds target library information to a pass manager. This does not take
|
68
|
+
# ownership of the target library info.
|
69
|
+
# See the method llvm::PassManagerBase::add.
|
70
|
+
#
|
71
|
+
# @method add_target_library_info(target_library_info_ref, pass_manager_ref)
|
72
|
+
# @param [FFI::Pointer(TargetLibraryInfoRef)] target_library_info_ref
|
73
|
+
# @param [FFI::Pointer(PassManagerRef)] pass_manager_ref
|
74
|
+
# @return [nil]
|
75
|
+
# @scope class
|
76
|
+
attach_function :add_target_library_info, :LLVMAddTargetLibraryInfo, [:pointer, :pointer], :void
|
77
|
+
|
78
|
+
# Converts target data to a target layout string. The string must be disposed
|
79
|
+
# with LLVMDisposeMessage.
|
80
|
+
# See the constructor llvm::TargetData::TargetData.
|
81
|
+
#
|
82
|
+
# @method copy_string_rep_of_target_data(target_data_ref)
|
83
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
84
|
+
# @return [String]
|
85
|
+
# @scope class
|
86
|
+
attach_function :copy_string_rep_of_target_data, :LLVMCopyStringRepOfTargetData, [:pointer], :string
|
87
|
+
|
88
|
+
# Returns the byte order of a target, either LLVMBigEndian or
|
89
|
+
# LLVMLittleEndian.
|
90
|
+
# See the method llvm::TargetData::isLittleEndian.
|
91
|
+
#
|
92
|
+
# @method byte_order(target_data_ref)
|
93
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
94
|
+
# @return [Symbol from byte_ordering_enum]
|
95
|
+
# @scope class
|
96
|
+
attach_function :byte_order, :LLVMByteOrder, [:pointer], :byte_ordering
|
97
|
+
|
98
|
+
# Returns the pointer size in bytes for a target.
|
99
|
+
# See the method llvm::TargetData::getPointerSize.
|
100
|
+
#
|
101
|
+
# @method pointer_size(target_data_ref)
|
102
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
103
|
+
# @return [Integer]
|
104
|
+
# @scope class
|
105
|
+
attach_function :pointer_size, :LLVMPointerSize, [:pointer], :uint
|
106
|
+
|
107
|
+
# Returns the integer type that is the same size as a pointer on a target.
|
108
|
+
# See the method llvm::TargetData::getIntPtrType.
|
109
|
+
#
|
110
|
+
# @method int_ptr_type(target_data_ref)
|
111
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
112
|
+
# @return [FFI::Pointer(TypeRef)]
|
113
|
+
# @scope class
|
114
|
+
attach_function :int_ptr_type, :LLVMIntPtrType, [:pointer], :pointer
|
115
|
+
|
116
|
+
# Computes the size of a type in bytes for a target.
|
117
|
+
# See the method llvm::TargetData::getTypeSizeInBits.
|
118
|
+
#
|
119
|
+
# @method size_of_type_in_bits(target_data_ref, type_ref)
|
120
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
121
|
+
# @param [FFI::Pointer(TypeRef)] type_ref
|
122
|
+
# @return [Integer]
|
123
|
+
# @scope class
|
124
|
+
attach_function :size_of_type_in_bits, :LLVMSizeOfTypeInBits, [:pointer, :pointer], :ulong_long
|
125
|
+
|
126
|
+
# Computes the storage size of a type in bytes for a target.
|
127
|
+
# See the method llvm::TargetData::getTypeStoreSize.
|
128
|
+
#
|
129
|
+
# @method store_size_of_type(target_data_ref, type_ref)
|
130
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
131
|
+
# @param [FFI::Pointer(TypeRef)] type_ref
|
132
|
+
# @return [Integer]
|
133
|
+
# @scope class
|
134
|
+
attach_function :store_size_of_type, :LLVMStoreSizeOfType, [:pointer, :pointer], :ulong_long
|
135
|
+
|
136
|
+
# Computes the ABI size of a type in bytes for a target.
|
137
|
+
# See the method llvm::TargetData::getTypeAllocSize.
|
138
|
+
#
|
139
|
+
# @method abi_size_of_type(target_data_ref, type_ref)
|
140
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
141
|
+
# @param [FFI::Pointer(TypeRef)] type_ref
|
142
|
+
# @return [Integer]
|
143
|
+
# @scope class
|
144
|
+
attach_function :abi_size_of_type, :LLVMABISizeOfType, [:pointer, :pointer], :ulong_long
|
145
|
+
|
146
|
+
# Computes the ABI alignment of a type in bytes for a target.
|
147
|
+
# See the method llvm::TargetData::getTypeABISize.
|
148
|
+
#
|
149
|
+
# @method abi_alignment_of_type(target_data_ref, type_ref)
|
150
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
151
|
+
# @param [FFI::Pointer(TypeRef)] type_ref
|
152
|
+
# @return [Integer]
|
153
|
+
# @scope class
|
154
|
+
attach_function :abi_alignment_of_type, :LLVMABIAlignmentOfType, [:pointer, :pointer], :uint
|
155
|
+
|
156
|
+
# Computes the call frame alignment of a type in bytes for a target.
|
157
|
+
# See the method llvm::TargetData::getTypeABISize.
|
158
|
+
#
|
159
|
+
# @method call_frame_alignment_of_type(target_data_ref, type_ref)
|
160
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
161
|
+
# @param [FFI::Pointer(TypeRef)] type_ref
|
162
|
+
# @return [Integer]
|
163
|
+
# @scope class
|
164
|
+
attach_function :call_frame_alignment_of_type, :LLVMCallFrameAlignmentOfType, [:pointer, :pointer], :uint
|
165
|
+
|
166
|
+
# Computes the preferred alignment of a type in bytes for a target.
|
167
|
+
# See the method llvm::TargetData::getTypeABISize.
|
168
|
+
#
|
169
|
+
# @method preferred_alignment_of_type(target_data_ref, type_ref)
|
170
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
171
|
+
# @param [FFI::Pointer(TypeRef)] type_ref
|
172
|
+
# @return [Integer]
|
173
|
+
# @scope class
|
174
|
+
attach_function :preferred_alignment_of_type, :LLVMPreferredAlignmentOfType, [:pointer, :pointer], :uint
|
175
|
+
|
176
|
+
# Computes the preferred alignment of a global variable in bytes for a target.
|
177
|
+
# See the method llvm::TargetData::getPreferredAlignment.
|
178
|
+
#
|
179
|
+
# @method preferred_alignment_of_global(target_data_ref, global_var)
|
180
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
181
|
+
# @param [FFI::Pointer(ValueRef)] global_var
|
182
|
+
# @return [Integer]
|
183
|
+
# @scope class
|
184
|
+
attach_function :preferred_alignment_of_global, :LLVMPreferredAlignmentOfGlobal, [:pointer, :pointer], :uint
|
185
|
+
|
186
|
+
# Computes the structure element that contains the byte offset for a target.
|
187
|
+
# See the method llvm::StructLayout::getElementContainingOffset.
|
188
|
+
#
|
189
|
+
# @method element_at_offset(target_data_ref, struct_ty, offset)
|
190
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
191
|
+
# @param [FFI::Pointer(TypeRef)] struct_ty
|
192
|
+
# @param [Integer] offset
|
193
|
+
# @return [Integer]
|
194
|
+
# @scope class
|
195
|
+
attach_function :element_at_offset, :LLVMElementAtOffset, [:pointer, :pointer, :ulong_long], :uint
|
196
|
+
|
197
|
+
# Computes the byte offset of the indexed struct element for a target.
|
198
|
+
# See the method llvm::StructLayout::getElementContainingOffset.
|
199
|
+
#
|
200
|
+
# @method offset_of_element(target_data_ref, struct_ty, element)
|
201
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
202
|
+
# @param [FFI::Pointer(TypeRef)] struct_ty
|
203
|
+
# @param [Integer] element
|
204
|
+
# @return [Integer]
|
205
|
+
# @scope class
|
206
|
+
attach_function :offset_of_element, :LLVMOffsetOfElement, [:pointer, :pointer, :uint], :ulong_long
|
207
|
+
|
208
|
+
# Deallocates a TargetData.
|
209
|
+
# See the destructor llvm::TargetData::~TargetData.
|
210
|
+
#
|
211
|
+
# @method dispose_target_data(target_data_ref)
|
212
|
+
# @param [FFI::Pointer(TargetDataRef)] target_data_ref
|
213
|
+
# @return [nil]
|
214
|
+
# @scope class
|
215
|
+
attach_function :dispose_target_data, :LLVMDisposeTargetData, [:pointer], :void
|
216
|
+
|
217
|
+
end
|
data/lib/llvm/transforms/ipo.rb
CHANGED
@@ -1,23 +1,18 @@
|
|
1
1
|
# Interprocedural optimization (IPO)
|
2
2
|
require 'llvm'
|
3
3
|
require 'llvm/core'
|
4
|
+
require 'llvm/transforms/ipo_ffi'
|
4
5
|
|
5
6
|
module LLVM
|
6
|
-
# @private
|
7
|
-
module C
|
8
|
-
attach_function :LLVMAddGlobalDCEPass, [:pointer], :void
|
9
|
-
attach_function :LLVMAddFunctionInliningPass, [:pointer], :void
|
10
|
-
end
|
11
|
-
|
12
7
|
class PassManager
|
13
8
|
# @LLVMpass gdce
|
14
9
|
def gdce!
|
15
|
-
C.
|
10
|
+
C.add_global_dce_pass(self)
|
16
11
|
end
|
17
12
|
|
18
13
|
# @LLVMpass inline
|
19
14
|
def inline!
|
20
|
-
C.
|
15
|
+
C.add_function_inlining_pass(self)
|
21
16
|
end
|
22
17
|
end
|
23
18
|
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
# Generated by ffi_gen. Please do not change this file by hand.
|
2
|
+
|
3
|
+
require 'ffi'
|
4
|
+
|
5
|
+
module LLVM::C
|
6
|
+
extend FFI::Library
|
7
|
+
ffi_lib 'LLVM-3.0'
|
8
|
+
|
9
|
+
# (Not documented)
|
10
|
+
#
|
11
|
+
# @method add_argument_promotion_pass(pm)
|
12
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
13
|
+
# @return [nil]
|
14
|
+
# @scope class
|
15
|
+
attach_function :add_argument_promotion_pass, :LLVMAddArgumentPromotionPass, [:pointer], :void
|
16
|
+
|
17
|
+
# See llvm::createConstantMergePass function.
|
18
|
+
#
|
19
|
+
# @method add_constant_merge_pass(pm)
|
20
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
21
|
+
# @return [nil]
|
22
|
+
# @scope class
|
23
|
+
attach_function :add_constant_merge_pass, :LLVMAddConstantMergePass, [:pointer], :void
|
24
|
+
|
25
|
+
# See llvm::createDeadArgEliminationPass function.
|
26
|
+
#
|
27
|
+
# @method add_dead_arg_elimination_pass(pm)
|
28
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
29
|
+
# @return [nil]
|
30
|
+
# @scope class
|
31
|
+
attach_function :add_dead_arg_elimination_pass, :LLVMAddDeadArgEliminationPass, [:pointer], :void
|
32
|
+
|
33
|
+
# See llvm::createFunctionAttrsPass function.
|
34
|
+
#
|
35
|
+
# @method add_function_attrs_pass(pm)
|
36
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
37
|
+
# @return [nil]
|
38
|
+
# @scope class
|
39
|
+
attach_function :add_function_attrs_pass, :LLVMAddFunctionAttrsPass, [:pointer], :void
|
40
|
+
|
41
|
+
# See llvm::createFunctionInliningPass function.
|
42
|
+
#
|
43
|
+
# @method add_function_inlining_pass(pm)
|
44
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
45
|
+
# @return [nil]
|
46
|
+
# @scope class
|
47
|
+
attach_function :add_function_inlining_pass, :LLVMAddFunctionInliningPass, [:pointer], :void
|
48
|
+
|
49
|
+
# See llvm::createAlwaysInlinerPass function.
|
50
|
+
#
|
51
|
+
# @method add_always_inliner_pass(pm)
|
52
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
53
|
+
# @return [nil]
|
54
|
+
# @scope class
|
55
|
+
attach_function :add_always_inliner_pass, :LLVMAddAlwaysInlinerPass, [:pointer], :void
|
56
|
+
|
57
|
+
# See llvm::createGlobalDCEPass function.
|
58
|
+
#
|
59
|
+
# @method add_global_dce_pass(pm)
|
60
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
61
|
+
# @return [nil]
|
62
|
+
# @scope class
|
63
|
+
attach_function :add_global_dce_pass, :LLVMAddGlobalDCEPass, [:pointer], :void
|
64
|
+
|
65
|
+
# See llvm::createGlobalOptimizerPass function.
|
66
|
+
#
|
67
|
+
# @method add_global_optimizer_pass(pm)
|
68
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
69
|
+
# @return [nil]
|
70
|
+
# @scope class
|
71
|
+
attach_function :add_global_optimizer_pass, :LLVMAddGlobalOptimizerPass, [:pointer], :void
|
72
|
+
|
73
|
+
# See llvm::createIPConstantPropagationPass function.
|
74
|
+
#
|
75
|
+
# @method add_ip_constant_propagation_pass(pm)
|
76
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
77
|
+
# @return [nil]
|
78
|
+
# @scope class
|
79
|
+
attach_function :add_ip_constant_propagation_pass, :LLVMAddIPConstantPropagationPass, [:pointer], :void
|
80
|
+
|
81
|
+
# See llvm::createPruneEHPass function.
|
82
|
+
#
|
83
|
+
# @method add_prune_eh_pass(pm)
|
84
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
85
|
+
# @return [nil]
|
86
|
+
# @scope class
|
87
|
+
attach_function :add_prune_eh_pass, :LLVMAddPruneEHPass, [:pointer], :void
|
88
|
+
|
89
|
+
# See llvm::createIPSCCPPass function.
|
90
|
+
#
|
91
|
+
# @method add_ipsccp_pass(pm)
|
92
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
93
|
+
# @return [nil]
|
94
|
+
# @scope class
|
95
|
+
attach_function :add_ipsccp_pass, :LLVMAddIPSCCPPass, [:pointer], :void
|
96
|
+
|
97
|
+
# See llvm::createInternalizePass function.
|
98
|
+
#
|
99
|
+
# @method add_internalize_pass(pass_manager_ref, all_but_main)
|
100
|
+
# @param [FFI::Pointer(PassManagerRef)] pass_manager_ref
|
101
|
+
# @param [Integer] all_but_main
|
102
|
+
# @return [nil]
|
103
|
+
# @scope class
|
104
|
+
attach_function :add_internalize_pass, :LLVMAddInternalizePass, [:pointer, :uint], :void
|
105
|
+
|
106
|
+
# See llvm::createStripDeadPrototypesPass function.
|
107
|
+
#
|
108
|
+
# @method add_strip_dead_prototypes_pass(pm)
|
109
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
110
|
+
# @return [nil]
|
111
|
+
# @scope class
|
112
|
+
attach_function :add_strip_dead_prototypes_pass, :LLVMAddStripDeadPrototypesPass, [:pointer], :void
|
113
|
+
|
114
|
+
# See llvm::createStripSymbolsPass function.
|
115
|
+
#
|
116
|
+
# @method add_strip_symbols_pass(pm)
|
117
|
+
# @param [FFI::Pointer(PassManagerRef)] pm
|
118
|
+
# @return [nil]
|
119
|
+
# @scope class
|
120
|
+
attach_function :add_strip_symbols_pass, :LLVMAddStripSymbolsPass, [:pointer], :void
|
121
|
+
|
122
|
+
end
|
@@ -1,136 +1,112 @@
|
|
1
1
|
require 'llvm'
|
2
2
|
require 'llvm/core'
|
3
|
+
require 'llvm/transforms/scalar_ffi'
|
3
4
|
|
4
5
|
module LLVM
|
5
|
-
# @private
|
6
|
-
module C
|
7
|
-
attach_function :LLVMAddAggressiveDCEPass, [:pointer], :void
|
8
|
-
attach_function :LLVMAddCFGSimplificationPass, [:pointer], :void
|
9
|
-
attach_function :LLVMAddDeadStoreEliminationPass, [:pointer], :void
|
10
|
-
attach_function :LLVMAddGVNPass, [:pointer], :void
|
11
|
-
attach_function :LLVMAddIndVarSimplifyPass, [:pointer], :void
|
12
|
-
attach_function :LLVMAddInstructionCombiningPass, [:pointer], :void
|
13
|
-
attach_function :LLVMAddJumpThreadingPass, [:pointer], :void
|
14
|
-
attach_function :LLVMAddLICMPass, [:pointer], :void
|
15
|
-
attach_function :LLVMAddLoopDeletionPass, [: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
6
|
class PassManager
|
31
7
|
# @LLVMpass adce
|
32
8
|
def adce!
|
33
|
-
C.
|
9
|
+
C.add_aggressive_dce_pass(self)
|
34
10
|
end
|
35
11
|
|
36
12
|
# @LLVMpass simplifycfg
|
37
13
|
def simplifycfg!
|
38
|
-
C.
|
14
|
+
C.add_cfg_simplification_pass(self)
|
39
15
|
end
|
40
16
|
|
41
17
|
# @LLVMpass dse
|
42
18
|
def dse!
|
43
|
-
C.
|
19
|
+
C.add_dead_store_elimination_pass(self)
|
44
20
|
end
|
45
21
|
|
46
22
|
# @LLVMpass gvn
|
47
23
|
def gvn!
|
48
|
-
C.
|
24
|
+
C.add_gvn_pass(self)
|
49
25
|
end
|
50
26
|
|
51
27
|
# @LLVMpass indvars
|
52
28
|
def indvars!
|
53
|
-
C.
|
29
|
+
C.add_ind_var_simplify_pass(self)
|
54
30
|
end
|
55
31
|
|
56
32
|
# @LLVMpass instcombine
|
57
33
|
def instcombine!
|
58
|
-
C.
|
34
|
+
C.add_instruction_combining_pass(self)
|
59
35
|
end
|
60
36
|
|
61
37
|
# @LLVMpass jump-threading
|
62
38
|
def jump_threading!
|
63
|
-
C.
|
39
|
+
C.add_jump_threading_pass(self)
|
64
40
|
end
|
65
41
|
|
66
42
|
# @LLVMpass licm
|
67
43
|
def licm!
|
68
|
-
C.
|
44
|
+
C.add_licm_pass(self)
|
69
45
|
end
|
70
46
|
|
71
47
|
# @LLVMpass loop-deletion
|
72
48
|
def loop_deletion!
|
73
|
-
C.
|
49
|
+
C.add_loop_deletion_pass(self)
|
74
50
|
end
|
75
51
|
|
76
52
|
# @LLVMpass loop-rotate
|
77
53
|
def loop_rotate!
|
78
|
-
C.
|
54
|
+
C.add_loop_rotate_pass(self)
|
79
55
|
end
|
80
56
|
|
81
57
|
# @LLVMpass loop-unroll
|
82
58
|
def loop_unroll!
|
83
|
-
C.
|
59
|
+
C.add_loop_unroll_pass(self)
|
84
60
|
end
|
85
61
|
|
86
62
|
# @LLVMpass loop-unswitch
|
87
63
|
def loop_unswitch!
|
88
|
-
C.
|
64
|
+
C.add_loop_unswitch_pass(self)
|
89
65
|
end
|
90
66
|
|
91
67
|
# @LLVMpass memcpyopt
|
92
68
|
def memcpyopt!
|
93
|
-
C.
|
69
|
+
C.add_mem_cpy_opt_pass(self)
|
94
70
|
end
|
95
71
|
|
96
72
|
# @LLVMpass mem2reg
|
97
73
|
def mem2reg!
|
98
|
-
C.
|
74
|
+
C.add_promote_memory_to_register_pass(self)
|
99
75
|
end
|
100
76
|
|
101
77
|
# @LLVMpass reassociate
|
102
78
|
def reassociate!
|
103
|
-
C.
|
79
|
+
C.add_reassociate_pass(self)
|
104
80
|
end
|
105
81
|
|
106
82
|
# @LLVMpass sccp
|
107
83
|
def sccp!
|
108
|
-
C.
|
84
|
+
C.add_sccp_pass(self)
|
109
85
|
end
|
110
86
|
|
111
87
|
# @LLVMpass scalarrepl
|
112
88
|
def scalarrepl!
|
113
|
-
C.
|
89
|
+
C.add_scalar_repl_aggregates_pass(self)
|
114
90
|
end
|
115
91
|
|
116
92
|
# @LLVMpass simplify-libcalls
|
117
93
|
def simplify_libcalls!
|
118
|
-
C.
|
94
|
+
C.add_simplify_lib_calls_pass(self)
|
119
95
|
end
|
120
96
|
|
121
97
|
# @LLVMpass tailcallelim
|
122
98
|
def tailcallelim!
|
123
|
-
C.
|
99
|
+
C.add_tail_call_elimination_pass(self)
|
124
100
|
end
|
125
101
|
|
126
102
|
# @LLVMpass constprop
|
127
103
|
def constprop!
|
128
|
-
C.
|
104
|
+
C.add_constant_propagation_pass(self)
|
129
105
|
end
|
130
106
|
|
131
107
|
# @LLVMpass reg2mem
|
132
108
|
def reg2mem!
|
133
|
-
C.
|
109
|
+
C.add_demote_memory_to_register_pass(self)
|
134
110
|
end
|
135
111
|
end
|
136
112
|
end
|