ruby-llvm 3.1.0.beta.1 → 3.2.0.beta.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.
- 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
|