ruby-llvm 3.1.0.beta.1 → 3.2.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +30 -0
- data/README.md +49 -0
- data/ext/ruby-llvm-support/Rakefile +30 -7
- data/ext/ruby-llvm-support/support.cpp +48 -1
- data/lib/llvm.rb +26 -3
- data/lib/llvm/analysis.rb +8 -11
- data/lib/llvm/analysis_ffi.rb +1 -1
- data/lib/llvm/core.rb +36 -1
- data/lib/llvm/core/bitcode_ffi.rb +1 -1
- data/lib/llvm/core/builder.rb +20 -14
- data/lib/llvm/core/module.rb +87 -63
- data/lib/llvm/core/pass_manager.rb +30 -30
- data/lib/llvm/core/type.rb +34 -51
- data/lib/llvm/core/value.rb +13 -25
- data/lib/llvm/core_ffi.rb +62 -21
- data/lib/llvm/execution_engine.rb +13 -19
- data/lib/llvm/execution_engine_ffi.rb +1 -1
- data/lib/llvm/linker.rb +35 -0
- data/lib/llvm/linker_ffi.rb +45 -0
- data/lib/llvm/support.rb +32 -6
- data/lib/llvm/target.rb +318 -1
- data/lib/llvm/target_ffi.rb +302 -14
- data/lib/llvm/transforms/ipo_ffi.rb +1 -1
- data/lib/llvm/transforms/scalar_ffi.rb +1 -1
- data/lib/llvm/transforms/vectorize.rb +17 -0
- data/lib/llvm/transforms/vectorize_ffi.rb +31 -0
- data/lib/llvm/version.rb +21 -2
- data/test/array_test.rb +1 -1
- data/test/basic_block_test.rb +1 -1
- data/test/basic_test.rb +1 -1
- data/test/binary_operations_test.rb +1 -1
- data/test/bitcode_test.rb +2 -2
- data/test/branch_test.rb +1 -1
- data/test/call_test.rb +1 -1
- data/test/comparisons_test.rb +1 -1
- data/test/conversions_test.rb +1 -1
- data/test/double_test.rb +2 -2
- data/test/equality_test.rb +5 -5
- data/test/generic_value_test.rb +1 -1
- data/test/instruction_test.rb +1 -1
- data/test/ipo_test.rb +1 -1
- data/test/linker_test.rb +46 -0
- data/test/memory_access_test.rb +1 -1
- data/test/module_test.rb +50 -1
- data/test/phi_test.rb +1 -1
- data/test/select_test.rb +1 -1
- data/test/struct_test.rb +3 -3
- data/test/target_test.rb +124 -0
- data/test/test_helper.rb +10 -1
- data/test/type_test.rb +1 -1
- data/test/vector_test.rb +1 -1
- metadata +33 -22
- data/README.rdoc +0 -34
data/lib/llvm/target_ffi.rb
CHANGED
@@ -4,7 +4,7 @@ require 'ffi'
|
|
4
4
|
|
5
5
|
module LLVM::C
|
6
6
|
extend FFI::Library
|
7
|
-
ffi_lib 'LLVM-3.
|
7
|
+
ffi_lib 'LLVM-3.2'
|
8
8
|
|
9
9
|
def self.attach_function(name, *_)
|
10
10
|
begin; super; rescue FFI::NotFoundError => e
|
@@ -107,7 +107,7 @@ module LLVM::C
|
|
107
107
|
attach_function :initialize_native_target, :LLVMInitializeNativeTarget, [], :int
|
108
108
|
|
109
109
|
# Creates target data from a target layout string.
|
110
|
-
# See the constructor llvm::
|
110
|
+
# See the constructor llvm::DataLayout::DataLayout.
|
111
111
|
#
|
112
112
|
# @method create_target_data(string_rep)
|
113
113
|
# @param [String] string_rep
|
@@ -139,7 +139,7 @@ module LLVM::C
|
|
139
139
|
|
140
140
|
# Converts target data to a target layout string. The string must be disposed
|
141
141
|
# with LLVMDisposeMessage.
|
142
|
-
# See the constructor llvm::
|
142
|
+
# See the constructor llvm::DataLayout::DataLayout.
|
143
143
|
#
|
144
144
|
# @method copy_string_rep_of_target_data(opaque_target_data)
|
145
145
|
# @param [OpaqueTargetData] opaque_target_data
|
@@ -149,7 +149,7 @@ module LLVM::C
|
|
149
149
|
|
150
150
|
# Returns the byte order of a target, either LLVMBigEndian or
|
151
151
|
# LLVMLittleEndian.
|
152
|
-
# See the method llvm::
|
152
|
+
# See the method llvm::DataLayout::isLittleEndian.
|
153
153
|
#
|
154
154
|
# @method byte_order(opaque_target_data)
|
155
155
|
# @param [OpaqueTargetData] opaque_target_data
|
@@ -158,7 +158,7 @@ module LLVM::C
|
|
158
158
|
attach_function :byte_order, :LLVMByteOrder, [OpaqueTargetData], :byte_ordering
|
159
159
|
|
160
160
|
# Returns the pointer size in bytes for a target.
|
161
|
-
# See the method llvm::
|
161
|
+
# See the method llvm::DataLayout::getPointerSize.
|
162
162
|
#
|
163
163
|
# @method pointer_size(opaque_target_data)
|
164
164
|
# @param [OpaqueTargetData] opaque_target_data
|
@@ -166,8 +166,19 @@ module LLVM::C
|
|
166
166
|
# @scope class
|
167
167
|
attach_function :pointer_size, :LLVMPointerSize, [OpaqueTargetData], :uint
|
168
168
|
|
169
|
+
# Returns the pointer size in bytes for a target for a specified
|
170
|
+
# address space.
|
171
|
+
# See the method llvm::DataLayout::getPointerSize.
|
172
|
+
#
|
173
|
+
# @method pointer_size_for_as(opaque_target_data, as)
|
174
|
+
# @param [OpaqueTargetData] opaque_target_data
|
175
|
+
# @param [Integer] as
|
176
|
+
# @return [Integer]
|
177
|
+
# @scope class
|
178
|
+
attach_function :pointer_size_for_as, :LLVMPointerSizeForAS, [OpaqueTargetData, :uint], :uint
|
179
|
+
|
169
180
|
# Returns the integer type that is the same size as a pointer on a target.
|
170
|
-
# See the method llvm::
|
181
|
+
# See the method llvm::DataLayout::getIntPtrType.
|
171
182
|
#
|
172
183
|
# @method int_ptr_type(opaque_target_data)
|
173
184
|
# @param [OpaqueTargetData] opaque_target_data
|
@@ -175,8 +186,19 @@ module LLVM::C
|
|
175
186
|
# @scope class
|
176
187
|
attach_function :int_ptr_type, :LLVMIntPtrType, [OpaqueTargetData], :pointer
|
177
188
|
|
189
|
+
# Returns the integer type that is the same size as a pointer on a target.
|
190
|
+
# This version allows the address space to be specified.
|
191
|
+
# See the method llvm::DataLayout::getIntPtrType.
|
192
|
+
#
|
193
|
+
# @method int_ptr_type_for_as(opaque_target_data, as)
|
194
|
+
# @param [OpaqueTargetData] opaque_target_data
|
195
|
+
# @param [Integer] as
|
196
|
+
# @return [FFI::Pointer(TypeRef)]
|
197
|
+
# @scope class
|
198
|
+
attach_function :int_ptr_type_for_as, :LLVMIntPtrTypeForAS, [OpaqueTargetData, :uint], :pointer
|
199
|
+
|
178
200
|
# Computes the size of a type in bytes for a target.
|
179
|
-
# See the method llvm::
|
201
|
+
# See the method llvm::DataLayout::getTypeSizeInBits.
|
180
202
|
#
|
181
203
|
# @method size_of_type_in_bits(opaque_target_data, type_ref)
|
182
204
|
# @param [OpaqueTargetData] opaque_target_data
|
@@ -186,7 +208,7 @@ module LLVM::C
|
|
186
208
|
attach_function :size_of_type_in_bits, :LLVMSizeOfTypeInBits, [OpaqueTargetData, :pointer], :ulong_long
|
187
209
|
|
188
210
|
# Computes the storage size of a type in bytes for a target.
|
189
|
-
# See the method llvm::
|
211
|
+
# See the method llvm::DataLayout::getTypeStoreSize.
|
190
212
|
#
|
191
213
|
# @method store_size_of_type(opaque_target_data, type_ref)
|
192
214
|
# @param [OpaqueTargetData] opaque_target_data
|
@@ -196,7 +218,7 @@ module LLVM::C
|
|
196
218
|
attach_function :store_size_of_type, :LLVMStoreSizeOfType, [OpaqueTargetData, :pointer], :ulong_long
|
197
219
|
|
198
220
|
# Computes the ABI size of a type in bytes for a target.
|
199
|
-
# See the method llvm::
|
221
|
+
# See the method llvm::DataLayout::getTypeAllocSize.
|
200
222
|
#
|
201
223
|
# @method abi_size_of_type(opaque_target_data, type_ref)
|
202
224
|
# @param [OpaqueTargetData] opaque_target_data
|
@@ -206,7 +228,7 @@ module LLVM::C
|
|
206
228
|
attach_function :abi_size_of_type, :LLVMABISizeOfType, [OpaqueTargetData, :pointer], :ulong_long
|
207
229
|
|
208
230
|
# Computes the ABI alignment of a type in bytes for a target.
|
209
|
-
# See the method llvm::
|
231
|
+
# See the method llvm::DataLayout::getTypeABISize.
|
210
232
|
#
|
211
233
|
# @method abi_alignment_of_type(opaque_target_data, type_ref)
|
212
234
|
# @param [OpaqueTargetData] opaque_target_data
|
@@ -216,7 +238,7 @@ module LLVM::C
|
|
216
238
|
attach_function :abi_alignment_of_type, :LLVMABIAlignmentOfType, [OpaqueTargetData, :pointer], :uint
|
217
239
|
|
218
240
|
# Computes the call frame alignment of a type in bytes for a target.
|
219
|
-
# See the method llvm::
|
241
|
+
# See the method llvm::DataLayout::getTypeABISize.
|
220
242
|
#
|
221
243
|
# @method call_frame_alignment_of_type(opaque_target_data, type_ref)
|
222
244
|
# @param [OpaqueTargetData] opaque_target_data
|
@@ -226,7 +248,7 @@ module LLVM::C
|
|
226
248
|
attach_function :call_frame_alignment_of_type, :LLVMCallFrameAlignmentOfType, [OpaqueTargetData, :pointer], :uint
|
227
249
|
|
228
250
|
# Computes the preferred alignment of a type in bytes for a target.
|
229
|
-
# See the method llvm::
|
251
|
+
# See the method llvm::DataLayout::getTypeABISize.
|
230
252
|
#
|
231
253
|
# @method preferred_alignment_of_type(opaque_target_data, type_ref)
|
232
254
|
# @param [OpaqueTargetData] opaque_target_data
|
@@ -236,7 +258,7 @@ module LLVM::C
|
|
236
258
|
attach_function :preferred_alignment_of_type, :LLVMPreferredAlignmentOfType, [OpaqueTargetData, :pointer], :uint
|
237
259
|
|
238
260
|
# Computes the preferred alignment of a global variable in bytes for a target.
|
239
|
-
# See the method llvm::
|
261
|
+
# See the method llvm::DataLayout::getPreferredAlignment.
|
240
262
|
#
|
241
263
|
# @method preferred_alignment_of_global(opaque_target_data, global_var)
|
242
264
|
# @param [OpaqueTargetData] opaque_target_data
|
@@ -268,7 +290,7 @@ module LLVM::C
|
|
268
290
|
attach_function :offset_of_element, :LLVMOffsetOfElement, [OpaqueTargetData, :pointer, :uint], :ulong_long
|
269
291
|
|
270
292
|
# Deallocates a TargetData.
|
271
|
-
# See the destructor llvm::
|
293
|
+
# See the destructor llvm::DataLayout::~DataLayout.
|
272
294
|
#
|
273
295
|
# @method dispose_target_data(opaque_target_data)
|
274
296
|
# @param [OpaqueTargetData] opaque_target_data
|
@@ -276,4 +298,270 @@ module LLVM::C
|
|
276
298
|
# @scope class
|
277
299
|
attach_function :dispose_target_data, :LLVMDisposeTargetData, [OpaqueTargetData], :void
|
278
300
|
|
301
|
+
# (Not documented)
|
302
|
+
module TargetMachineWrappers
|
303
|
+
def emit_to_file(m, filename, codegen, error_message)
|
304
|
+
LLVM::C.target_machine_emit_to_file(self, m, filename, codegen, error_message)
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
class TargetMachine < FFI::Struct
|
309
|
+
include TargetMachineWrappers
|
310
|
+
layout :dummy, :char
|
311
|
+
end
|
312
|
+
|
313
|
+
# (Not documented)
|
314
|
+
module TargetWrappers
|
315
|
+
def has_jit()
|
316
|
+
LLVM::C.target_has_jit(self)
|
317
|
+
end
|
318
|
+
|
319
|
+
def has_target_machine()
|
320
|
+
LLVM::C.target_has_target_machine(self)
|
321
|
+
end
|
322
|
+
|
323
|
+
def has_asm_backend()
|
324
|
+
LLVM::C.target_has_asm_backend(self)
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
class Target < FFI::Struct
|
329
|
+
include TargetWrappers
|
330
|
+
layout :dummy, :char
|
331
|
+
end
|
332
|
+
|
333
|
+
# (Not documented)
|
334
|
+
#
|
335
|
+
# <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:code_gen_opt_level).</em>
|
336
|
+
#
|
337
|
+
# === Options:
|
338
|
+
# :none ::
|
339
|
+
#
|
340
|
+
# :less ::
|
341
|
+
#
|
342
|
+
# :default ::
|
343
|
+
#
|
344
|
+
# :aggressive ::
|
345
|
+
#
|
346
|
+
#
|
347
|
+
# @method _enum_code_gen_opt_level_
|
348
|
+
# @return [Symbol]
|
349
|
+
# @scope class
|
350
|
+
enum :code_gen_opt_level, [
|
351
|
+
:none, 0,
|
352
|
+
:less, 1,
|
353
|
+
:default, 2,
|
354
|
+
:aggressive, 3
|
355
|
+
]
|
356
|
+
|
357
|
+
# (Not documented)
|
358
|
+
#
|
359
|
+
# <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:reloc_mode).</em>
|
360
|
+
#
|
361
|
+
# === Options:
|
362
|
+
# :default ::
|
363
|
+
#
|
364
|
+
# :static ::
|
365
|
+
#
|
366
|
+
# :pic ::
|
367
|
+
#
|
368
|
+
# :dynamic_no_pic ::
|
369
|
+
#
|
370
|
+
#
|
371
|
+
# @method _enum_reloc_mode_
|
372
|
+
# @return [Symbol]
|
373
|
+
# @scope class
|
374
|
+
enum :reloc_mode, [
|
375
|
+
:default, 0,
|
376
|
+
:static, 1,
|
377
|
+
:pic, 2,
|
378
|
+
:dynamic_no_pic, 3
|
379
|
+
]
|
380
|
+
|
381
|
+
# (Not documented)
|
382
|
+
#
|
383
|
+
# <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:code_model).</em>
|
384
|
+
#
|
385
|
+
# === Options:
|
386
|
+
# :default ::
|
387
|
+
#
|
388
|
+
# :jit_default ::
|
389
|
+
#
|
390
|
+
# :small ::
|
391
|
+
#
|
392
|
+
# :kernel ::
|
393
|
+
#
|
394
|
+
# :medium ::
|
395
|
+
#
|
396
|
+
# :large ::
|
397
|
+
#
|
398
|
+
#
|
399
|
+
# @method _enum_code_model_
|
400
|
+
# @return [Symbol]
|
401
|
+
# @scope class
|
402
|
+
enum :code_model, [
|
403
|
+
:default, 0,
|
404
|
+
:jit_default, 1,
|
405
|
+
:small, 2,
|
406
|
+
:kernel, 3,
|
407
|
+
:medium, 4,
|
408
|
+
:large, 5
|
409
|
+
]
|
410
|
+
|
411
|
+
# (Not documented)
|
412
|
+
#
|
413
|
+
# <em>This entry is only for documentation and no real method. The FFI::Enum can be accessed via #enum_type(:code_gen_file_type).</em>
|
414
|
+
#
|
415
|
+
# === Options:
|
416
|
+
# :assembly ::
|
417
|
+
#
|
418
|
+
# :object ::
|
419
|
+
#
|
420
|
+
#
|
421
|
+
# @method _enum_code_gen_file_type_
|
422
|
+
# @return [Symbol]
|
423
|
+
# @scope class
|
424
|
+
enum :code_gen_file_type, [
|
425
|
+
:assembly, 0,
|
426
|
+
:object, 1
|
427
|
+
]
|
428
|
+
|
429
|
+
# Returns the first llvm::Target in the registered targets list.
|
430
|
+
#
|
431
|
+
# @method get_first_target()
|
432
|
+
# @return [Target]
|
433
|
+
# @scope class
|
434
|
+
attach_function :get_first_target, :LLVMGetFirstTarget, [], Target
|
435
|
+
|
436
|
+
# Returns the next llvm::Target given a previous one (or null if there's none)
|
437
|
+
#
|
438
|
+
# @method get_next_target(t)
|
439
|
+
# @param [Target] t
|
440
|
+
# @return [Target]
|
441
|
+
# @scope class
|
442
|
+
attach_function :get_next_target, :LLVMGetNextTarget, [Target], Target
|
443
|
+
|
444
|
+
# Returns the name of a target. See llvm::Target::getName
|
445
|
+
#
|
446
|
+
# @method get_target_name(t)
|
447
|
+
# @param [Target] t
|
448
|
+
# @return [String]
|
449
|
+
# @scope class
|
450
|
+
attach_function :get_target_name, :LLVMGetTargetName, [Target], :string
|
451
|
+
|
452
|
+
# Returns the description of a target. See llvm::Target::getDescription
|
453
|
+
#
|
454
|
+
# @method get_target_description(t)
|
455
|
+
# @param [Target] t
|
456
|
+
# @return [String]
|
457
|
+
# @scope class
|
458
|
+
attach_function :get_target_description, :LLVMGetTargetDescription, [Target], :string
|
459
|
+
|
460
|
+
# Returns if the target has a JIT
|
461
|
+
#
|
462
|
+
# @method target_has_jit(t)
|
463
|
+
# @param [Target] t
|
464
|
+
# @return [Integer]
|
465
|
+
# @scope class
|
466
|
+
attach_function :target_has_jit, :LLVMTargetHasJIT, [Target], :int
|
467
|
+
|
468
|
+
# Returns if the target has a TargetMachine associated
|
469
|
+
#
|
470
|
+
# @method target_has_target_machine(t)
|
471
|
+
# @param [Target] t
|
472
|
+
# @return [Integer]
|
473
|
+
# @scope class
|
474
|
+
attach_function :target_has_target_machine, :LLVMTargetHasTargetMachine, [Target], :int
|
475
|
+
|
476
|
+
# Returns if the target as an ASM backend (required for emitting output)
|
477
|
+
#
|
478
|
+
# @method target_has_asm_backend(t)
|
479
|
+
# @param [Target] t
|
480
|
+
# @return [Integer]
|
481
|
+
# @scope class
|
482
|
+
attach_function :target_has_asm_backend, :LLVMTargetHasAsmBackend, [Target], :int
|
483
|
+
|
484
|
+
# Creates a new llvm::TargetMachine. See llvm::Target::createTargetMachine
|
485
|
+
#
|
486
|
+
# @method create_target_machine(t, triple, cpu, features, level, reloc, code_model)
|
487
|
+
# @param [Target] t
|
488
|
+
# @param [String] triple
|
489
|
+
# @param [String] cpu
|
490
|
+
# @param [String] features
|
491
|
+
# @param [Symbol from _enum_code_gen_opt_level_] level
|
492
|
+
# @param [Symbol from _enum_reloc_mode_] reloc
|
493
|
+
# @param [Symbol from _enum_code_model_] code_model
|
494
|
+
# @return [TargetMachine]
|
495
|
+
# @scope class
|
496
|
+
attach_function :create_target_machine, :LLVMCreateTargetMachine, [Target, :string, :string, :string, :code_gen_opt_level, :reloc_mode, :code_model], TargetMachine
|
497
|
+
|
498
|
+
# Dispose the LLVMTargetMachineRef instance generated by
|
499
|
+
# LLVMCreateTargetMachine.
|
500
|
+
#
|
501
|
+
# @method dispose_target_machine(t)
|
502
|
+
# @param [TargetMachine] t
|
503
|
+
# @return [nil]
|
504
|
+
# @scope class
|
505
|
+
attach_function :dispose_target_machine, :LLVMDisposeTargetMachine, [TargetMachine], :void
|
506
|
+
|
507
|
+
# Returns the Target used in a TargetMachine
|
508
|
+
#
|
509
|
+
# @method get_target_machine_target(t)
|
510
|
+
# @param [TargetMachine] t
|
511
|
+
# @return [Target]
|
512
|
+
# @scope class
|
513
|
+
attach_function :get_target_machine_target, :LLVMGetTargetMachineTarget, [TargetMachine], Target
|
514
|
+
|
515
|
+
# Returns the triple used creating this target machine. See
|
516
|
+
# llvm::TargetMachine::getTriple. The result needs to be disposed with
|
517
|
+
# LLVMDisposeMessage.
|
518
|
+
#
|
519
|
+
# @method get_target_machine_triple(t)
|
520
|
+
# @param [TargetMachine] t
|
521
|
+
# @return [String]
|
522
|
+
# @scope class
|
523
|
+
attach_function :get_target_machine_triple, :LLVMGetTargetMachineTriple, [TargetMachine], :string
|
524
|
+
|
525
|
+
# Returns the cpu used creating this target machine. See
|
526
|
+
# llvm::TargetMachine::getCPU. The result needs to be disposed with
|
527
|
+
# LLVMDisposeMessage.
|
528
|
+
#
|
529
|
+
# @method get_target_machine_cpu(t)
|
530
|
+
# @param [TargetMachine] t
|
531
|
+
# @return [String]
|
532
|
+
# @scope class
|
533
|
+
attach_function :get_target_machine_cpu, :LLVMGetTargetMachineCPU, [TargetMachine], :string
|
534
|
+
|
535
|
+
# Returns the feature string used creating this target machine. See
|
536
|
+
# llvm::TargetMachine::getFeatureString. The result needs to be disposed with
|
537
|
+
# LLVMDisposeMessage.
|
538
|
+
#
|
539
|
+
# @method get_target_machine_feature_string(t)
|
540
|
+
# @param [TargetMachine] t
|
541
|
+
# @return [String]
|
542
|
+
# @scope class
|
543
|
+
attach_function :get_target_machine_feature_string, :LLVMGetTargetMachineFeatureString, [TargetMachine], :string
|
544
|
+
|
545
|
+
# Returns the llvm::DataLayout used for this llvm:TargetMachine.
|
546
|
+
#
|
547
|
+
# @method get_target_machine_data(t)
|
548
|
+
# @param [TargetMachine] t
|
549
|
+
# @return [OpaqueTargetData]
|
550
|
+
# @scope class
|
551
|
+
attach_function :get_target_machine_data, :LLVMGetTargetMachineData, [TargetMachine], OpaqueTargetData
|
552
|
+
|
553
|
+
# Emits an asm or object file for the given module to the filename. This
|
554
|
+
# wraps several c++ only classes (among them a file stream). Returns any
|
555
|
+
# error in ErrorMessage. Use LLVMDisposeMessage to dispose the message.
|
556
|
+
#
|
557
|
+
# @method target_machine_emit_to_file(t, m, filename, codegen, error_message)
|
558
|
+
# @param [TargetMachine] t
|
559
|
+
# @param [FFI::Pointer(ModuleRef)] m
|
560
|
+
# @param [String] filename
|
561
|
+
# @param [Symbol from _enum_code_gen_file_type_] codegen
|
562
|
+
# @param [FFI::Pointer(**CharS)] error_message
|
563
|
+
# @return [Integer]
|
564
|
+
# @scope class
|
565
|
+
attach_function :target_machine_emit_to_file, :LLVMTargetMachineEmitToFile, [TargetMachine, :pointer, :string, :code_gen_file_type, :pointer], :int
|
566
|
+
|
279
567
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'llvm'
|
2
|
+
require 'llvm/core'
|
3
|
+
require 'llvm/transforms/vectorize_ffi'
|
4
|
+
|
5
|
+
module LLVM
|
6
|
+
class PassManager
|
7
|
+
# @LLVMpass bb_vectorize
|
8
|
+
def bb_vectorize!
|
9
|
+
C.add_bb_vectorize_pass(self)
|
10
|
+
end
|
11
|
+
|
12
|
+
# @LLVMpass loop_vectorize
|
13
|
+
def loop_vectorize!
|
14
|
+
C.add_loop_vectorize_pass(self)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|