ruby-llvm 3.2.0.beta.1 → 3.3.0

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.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +6 -3
  3. data/ext/ruby-llvm-support/Rakefile +80 -24
  4. data/ext/ruby-llvm-support/support.cpp +4 -3
  5. data/lib/llvm.rb +2 -2
  6. data/lib/llvm/analysis_ffi.rb +1 -1
  7. data/lib/llvm/config.rb +10 -0
  8. data/lib/llvm/core.rb +7 -5
  9. data/lib/llvm/core/bitcode_ffi.rb +1 -1
  10. data/lib/llvm/core/builder.rb +88 -6
  11. data/lib/llvm/core/module.rb +1 -0
  12. data/lib/llvm/core/type.rb +4 -4
  13. data/lib/llvm/core/value.rb +111 -25
  14. data/lib/llvm/core_ffi.rb +248 -1
  15. data/lib/llvm/execution_engine_ffi.rb +61 -1
  16. data/lib/llvm/linker.rb +0 -2
  17. data/lib/llvm/linker_ffi.rb +1 -1
  18. data/lib/llvm/support.rb +1 -1
  19. data/lib/llvm/target.rb +1 -1
  20. data/lib/llvm/target_ffi.rb +30 -25
  21. data/lib/llvm/transforms/builder.rb +102 -0
  22. data/lib/llvm/transforms/builder_ffi.rb +118 -0
  23. data/lib/llvm/transforms/ipo.rb +64 -4
  24. data/lib/llvm/transforms/ipo_ffi.rb +1 -1
  25. data/lib/llvm/transforms/scalar.rb +60 -20
  26. data/lib/llvm/transforms/scalar_ffi.rb +1 -1
  27. data/lib/llvm/transforms/vectorize.rb +5 -0
  28. data/lib/llvm/transforms/vectorize_ffi.rb +9 -1
  29. data/lib/llvm/version.rb +2 -21
  30. data/test/array_test.rb +1 -1
  31. data/test/basic_block_test.rb +1 -1
  32. data/test/binary_operations_test.rb +1 -1
  33. data/test/bitcode_test.rb +1 -1
  34. data/test/branch_test.rb +1 -1
  35. data/test/call_test.rb +1 -1
  36. data/test/comparisons_test.rb +1 -1
  37. data/test/conversions_test.rb +1 -1
  38. data/test/double_test.rb +1 -1
  39. data/test/equality_test.rb +4 -4
  40. data/test/function_test.rb +73 -0
  41. data/test/generic_value_test.rb +1 -1
  42. data/test/instruction_test.rb +1 -1
  43. data/test/ipo_test.rb +1 -1
  44. data/test/linker_test.rb +2 -2
  45. data/test/memory_access_test.rb +1 -1
  46. data/test/module_test.rb +6 -6
  47. data/test/parameter_collection_test.rb +1 -1
  48. data/test/pass_manager_builder_test.rb +33 -0
  49. data/test/phi_test.rb +1 -1
  50. data/test/select_test.rb +1 -1
  51. data/test/struct_test.rb +9 -1
  52. data/test/target_test.rb +19 -13
  53. data/test/test_helper.rb +2 -2
  54. data/test/type_test.rb +1 -1
  55. data/test/vector_test.rb +2 -2
  56. metadata +117 -85
  57. data/test/basic_test.rb +0 -11
@@ -4,7 +4,7 @@ require 'ffi'
4
4
 
5
5
  module LLVM::C
6
6
  extend FFI::Library
7
- ffi_lib 'LLVM-3.2'
7
+ ffi_lib 'LLVM-3.3'
8
8
 
9
9
  def self.attach_function(name, *_)
10
10
  begin; super; rescue FFI::NotFoundError => e
@@ -19,6 +19,13 @@ module LLVM::C
19
19
  # @scope class
20
20
  attach_function :link_in_jit, :LLVMLinkInJIT, [], :void
21
21
 
22
+ # (Not documented)
23
+ #
24
+ # @method link_in_mcjit()
25
+ # @return [nil]
26
+ # @scope class
27
+ attach_function :link_in_mcjit, :LLVMLinkInMCJIT, [], :void
28
+
22
29
  # (Not documented)
23
30
  #
24
31
  # @method link_in_interpreter()
@@ -36,6 +43,24 @@ module LLVM::C
36
43
  layout :dummy, :char
37
44
  end
38
45
 
46
+ # (Not documented)
47
+ #
48
+ # = Fields:
49
+ # :opt_level ::
50
+ # (Integer)
51
+ # :code_model ::
52
+ # (unknown)
53
+ # :no_frame_pointer_elim ::
54
+ # (Integer)
55
+ # :enable_fast_i_sel ::
56
+ # (Integer)
57
+ class MCJITCompilerOptions < FFI::Struct
58
+ layout :opt_level, :uint,
59
+ :code_model, :char,
60
+ :no_frame_pointer_elim, :int,
61
+ :enable_fast_i_sel, :int
62
+ end
63
+
39
64
  # ===-- Operations on generic values --------------------------------------===
40
65
  #
41
66
  # @method create_generic_value_of_int(ty, n, is_signed)
@@ -136,6 +161,41 @@ module LLVM::C
136
161
  # @scope class
137
162
  attach_function :create_jit_compiler_for_module, :LLVMCreateJITCompilerForModule, [:pointer, :pointer, :uint, :pointer], :int
138
163
 
164
+ # (Not documented)
165
+ #
166
+ # @method initialize_mcjit_compiler_options(options, size_of_options)
167
+ # @param [MCJITCompilerOptions] options
168
+ # @param [Integer] size_of_options
169
+ # @return [nil]
170
+ # @scope class
171
+ attach_function :initialize_mcjit_compiler_options, :LLVMInitializeMCJITCompilerOptions, [MCJITCompilerOptions, :ulong], :void
172
+
173
+ # Create an MCJIT execution engine for a module, with the given options. It is
174
+ # the responsibility of the caller to ensure that all fields in Options up to
175
+ # the given SizeOfOptions are initialized. It is correct to pass a smaller
176
+ # value of SizeOfOptions that omits some fields. The canonical way of using
177
+ # this is:
178
+ #
179
+ # LLVMMCJITCompilerOptions options;
180
+ # LLVMInitializeMCJITCompilerOptions(&options, sizeof(options));
181
+ # ... fill in those options you care about
182
+ # LLVMCreateMCJITCompilerForModule(&jit, mod, &options, sizeof(options),
183
+ # &error);
184
+ #
185
+ # Note that this is also correct, though possibly suboptimal:
186
+ #
187
+ # LLVMCreateMCJITCompilerForModule(&jit, mod, 0, 0, &error);
188
+ #
189
+ # @method create_mcjit_compiler_for_module(out_jit, m, options, size_of_options, out_error)
190
+ # @param [FFI::Pointer(*ExecutionEngineRef)] out_jit
191
+ # @param [FFI::Pointer(ModuleRef)] m
192
+ # @param [MCJITCompilerOptions] options
193
+ # @param [Integer] size_of_options
194
+ # @param [FFI::Pointer(**CharS)] out_error
195
+ # @return [Integer]
196
+ # @scope class
197
+ attach_function :create_mcjit_compiler_for_module, :LLVMCreateMCJITCompilerForModule, [:pointer, :pointer, MCJITCompilerOptions, :ulong, :pointer], :int
198
+
139
199
  # Deprecated: Use LLVMCreateExecutionEngineForModule instead.
140
200
  #
141
201
  # @method create_execution_engine(out_ee, mp, out_error)
@@ -22,8 +22,6 @@ module LLVM
22
22
  # @return [nil, String] human-readable error if linking has failed
23
23
  def link_into_and_destroy(other)
24
24
  result = LLVM.with_message_output do |msg|
25
- # HACK ALERT: ffi-gen missed LLVMLinkerPreserveSource enumeration for
26
- # some reason. It is inlined as a constant here.
27
25
  C.link_modules(other, self, :linker_destroy_source, msg)
28
26
  end
29
27
 
@@ -4,7 +4,7 @@ require 'ffi'
4
4
 
5
5
  module LLVM::C
6
6
  extend FFI::Library
7
- ffi_lib 'LLVM-3.2'
7
+ ffi_lib 'LLVM-3.3'
8
8
 
9
9
  def self.attach_function(name, *_)
10
10
  begin; super; rescue FFI::NotFoundError => e
@@ -12,7 +12,7 @@ module LLVM
12
12
  OpaqueType = LLVM::C::OpaqueType
13
13
  OpaqueModule = LLVM::C::OpaqueModule
14
14
 
15
- lib_name = FFI.map_library_name('RubyLLVMSupport-3.2')
15
+ lib_name = FFI.map_library_name("RubyLLVMSupport-#{LLVM_VERSION}")
16
16
  lib_path = File.expand_path("../../ext/ruby-llvm-support/#{lib_name}", File.dirname(__FILE__))
17
17
  ffi_lib [lib_path]
18
18
 
@@ -44,7 +44,7 @@ module LLVM
44
44
  C.send init
45
45
  end
46
46
  rescue FFI::NotFoundError
47
- raise ArgumentError, "LLVM target #{target} is not linked in. Try `llvm-config-3.2 --targets-built'."
47
+ raise ArgumentError, "LLVM target #{target} is not linked in. Try `llvm-config-#{LLVM_VERSION} --targets-built'."
48
48
  end
49
49
 
50
50
  begin
@@ -4,7 +4,7 @@ require 'ffi'
4
4
 
5
5
  module LLVM::C
6
6
  extend FFI::Library
7
- ffi_lib 'LLVM-3.2'
7
+ ffi_lib 'LLVM-3.3'
8
8
 
9
9
  def self.attach_function(name, *_)
10
10
  begin; super; rescue FFI::NotFoundError => e
@@ -299,14 +299,7 @@ module LLVM::C
299
299
  attach_function :dispose_target_data, :LLVMDisposeTargetData, [OpaqueTargetData], :void
300
300
 
301
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
302
+ class OpaqueTargetMachine < FFI::Struct
310
303
  layout :dummy, :char
311
304
  end
312
305
 
@@ -491,77 +484,89 @@ module LLVM::C
491
484
  # @param [Symbol from _enum_code_gen_opt_level_] level
492
485
  # @param [Symbol from _enum_reloc_mode_] reloc
493
486
  # @param [Symbol from _enum_code_model_] code_model
494
- # @return [TargetMachine]
487
+ # @return [OpaqueTargetMachine]
495
488
  # @scope class
496
- attach_function :create_target_machine, :LLVMCreateTargetMachine, [Target, :string, :string, :string, :code_gen_opt_level, :reloc_mode, :code_model], TargetMachine
489
+ attach_function :create_target_machine, :LLVMCreateTargetMachine, [Target, :string, :string, :string, :code_gen_opt_level, :reloc_mode, :code_model], OpaqueTargetMachine
497
490
 
498
491
  # Dispose the LLVMTargetMachineRef instance generated by
499
492
  # LLVMCreateTargetMachine.
500
493
  #
501
494
  # @method dispose_target_machine(t)
502
- # @param [TargetMachine] t
495
+ # @param [OpaqueTargetMachine] t
503
496
  # @return [nil]
504
497
  # @scope class
505
- attach_function :dispose_target_machine, :LLVMDisposeTargetMachine, [TargetMachine], :void
498
+ attach_function :dispose_target_machine, :LLVMDisposeTargetMachine, [OpaqueTargetMachine], :void
506
499
 
507
500
  # Returns the Target used in a TargetMachine
508
501
  #
509
502
  # @method get_target_machine_target(t)
510
- # @param [TargetMachine] t
503
+ # @param [OpaqueTargetMachine] t
511
504
  # @return [Target]
512
505
  # @scope class
513
- attach_function :get_target_machine_target, :LLVMGetTargetMachineTarget, [TargetMachine], Target
506
+ attach_function :get_target_machine_target, :LLVMGetTargetMachineTarget, [OpaqueTargetMachine], Target
514
507
 
515
508
  # Returns the triple used creating this target machine. See
516
509
  # llvm::TargetMachine::getTriple. The result needs to be disposed with
517
510
  # LLVMDisposeMessage.
518
511
  #
519
512
  # @method get_target_machine_triple(t)
520
- # @param [TargetMachine] t
513
+ # @param [OpaqueTargetMachine] t
521
514
  # @return [String]
522
515
  # @scope class
523
- attach_function :get_target_machine_triple, :LLVMGetTargetMachineTriple, [TargetMachine], :string
516
+ attach_function :get_target_machine_triple, :LLVMGetTargetMachineTriple, [OpaqueTargetMachine], :string
524
517
 
525
518
  # Returns the cpu used creating this target machine. See
526
519
  # llvm::TargetMachine::getCPU. The result needs to be disposed with
527
520
  # LLVMDisposeMessage.
528
521
  #
529
522
  # @method get_target_machine_cpu(t)
530
- # @param [TargetMachine] t
523
+ # @param [OpaqueTargetMachine] t
531
524
  # @return [String]
532
525
  # @scope class
533
- attach_function :get_target_machine_cpu, :LLVMGetTargetMachineCPU, [TargetMachine], :string
526
+ attach_function :get_target_machine_cpu, :LLVMGetTargetMachineCPU, [OpaqueTargetMachine], :string
534
527
 
535
528
  # Returns the feature string used creating this target machine. See
536
529
  # llvm::TargetMachine::getFeatureString. The result needs to be disposed with
537
530
  # LLVMDisposeMessage.
538
531
  #
539
532
  # @method get_target_machine_feature_string(t)
540
- # @param [TargetMachine] t
533
+ # @param [OpaqueTargetMachine] t
541
534
  # @return [String]
542
535
  # @scope class
543
- attach_function :get_target_machine_feature_string, :LLVMGetTargetMachineFeatureString, [TargetMachine], :string
536
+ attach_function :get_target_machine_feature_string, :LLVMGetTargetMachineFeatureString, [OpaqueTargetMachine], :string
544
537
 
545
538
  # Returns the llvm::DataLayout used for this llvm:TargetMachine.
546
539
  #
547
540
  # @method get_target_machine_data(t)
548
- # @param [TargetMachine] t
541
+ # @param [OpaqueTargetMachine] t
549
542
  # @return [OpaqueTargetData]
550
543
  # @scope class
551
- attach_function :get_target_machine_data, :LLVMGetTargetMachineData, [TargetMachine], OpaqueTargetData
544
+ attach_function :get_target_machine_data, :LLVMGetTargetMachineData, [OpaqueTargetMachine], OpaqueTargetData
552
545
 
553
546
  # Emits an asm or object file for the given module to the filename. This
554
547
  # wraps several c++ only classes (among them a file stream). Returns any
555
548
  # error in ErrorMessage. Use LLVMDisposeMessage to dispose the message.
556
549
  #
557
550
  # @method target_machine_emit_to_file(t, m, filename, codegen, error_message)
558
- # @param [TargetMachine] t
551
+ # @param [OpaqueTargetMachine] t
559
552
  # @param [FFI::Pointer(ModuleRef)] m
560
553
  # @param [String] filename
561
554
  # @param [Symbol from _enum_code_gen_file_type_] codegen
562
555
  # @param [FFI::Pointer(**CharS)] error_message
563
556
  # @return [Integer]
564
557
  # @scope class
565
- attach_function :target_machine_emit_to_file, :LLVMTargetMachineEmitToFile, [TargetMachine, :pointer, :string, :code_gen_file_type, :pointer], :int
558
+ attach_function :target_machine_emit_to_file, :LLVMTargetMachineEmitToFile, [OpaqueTargetMachine, :pointer, :string, :code_gen_file_type, :pointer], :int
559
+
560
+ # Compile the LLVM IR stored in \p M and store the result in \p OutMemBuf.
561
+ #
562
+ # @method target_machine_emit_to_memory_buffer(t, m, codegen, error_message, out_mem_buf)
563
+ # @param [OpaqueTargetMachine] t
564
+ # @param [FFI::Pointer(ModuleRef)] m
565
+ # @param [Symbol from _enum_code_gen_file_type_] codegen
566
+ # @param [FFI::Pointer(**CharS)] error_message
567
+ # @param [FFI::Pointer(*MemoryBufferRef)] out_mem_buf
568
+ # @return [Integer]
569
+ # @scope class
570
+ attach_function :target_machine_emit_to_memory_buffer, :LLVMTargetMachineEmitToMemoryBuffer, [OpaqueTargetMachine, :pointer, :code_gen_file_type, :pointer, :pointer], :int
566
571
 
567
572
  end
@@ -0,0 +1,102 @@
1
+ require 'llvm'
2
+ require 'llvm/core'
3
+ require 'llvm/transforms/builder_ffi'
4
+
5
+ module LLVM
6
+ class PassManagerBuilder
7
+ include PointerIdentity
8
+
9
+ attr_reader :size_level
10
+ attr_reader :opt_level
11
+ attr_reader :unit_at_a_time
12
+ attr_reader :unroll_loops
13
+ attr_reader :simplify_lib_calls
14
+ attr_reader :inliner_threshold
15
+
16
+ def initialize
17
+ @ptr = C.pass_manager_builder_create
18
+
19
+ @size_level = 0
20
+ @opt_level = 0
21
+ @unit_at_a_time = false
22
+ @unroll_loops = false
23
+ @simplify_lib_calls = false
24
+ @inliner_threshold = 0
25
+ end
26
+
27
+ def dispose
28
+ return if @ptr.nil?
29
+
30
+ C.pass_manager_builder_dispose(@ptr)
31
+ @ptr = nil
32
+ end
33
+
34
+ # Specify the basic optimization level.
35
+ # @param [Integer] level 0 = -O0, 1 = -O1, 2 = -O2, 3 = -O3
36
+ def opt_level=(level)
37
+ @opt_level = level.to_i
38
+ C.pass_manager_builder_set_opt_level(self, @opt_level)
39
+ end
40
+
41
+ # How much we're optimizing for size.
42
+ # @param [Integer] level 0 = none, 1 = -Os, 2 = -Oz
43
+ def size_level=(level)
44
+ @size_level = level.to_i
45
+ C.pass_manager_builder_set_size_level(self, @size_level)
46
+ end
47
+
48
+ # @param [Boolean] do_unit_at_a_time
49
+ def unit_at_a_time=(do_unit_at_a_time)
50
+ @unit_at_a_time = do_unit_at_a_time
51
+ C.pass_manager_builder_set_disable_unit_at_a_time(self, flag(!@unit_at_a_time))
52
+ end
53
+
54
+ # @param [Boolean] do_unroll
55
+ def unroll_loops=(do_unroll)
56
+ @unroll_loops = do_unroll
57
+ C.pass_manager_builder_set_disable_unroll_loops(self, flag(!@unroll_loops))
58
+ end
59
+
60
+ # @param [Boolean] do_simplify_lib_calls
61
+ def simplify_lib_calls=(do_simplify_lib_calls)
62
+ @simplify_lib_calls = do_simplify_lib_calls
63
+ C.pass_manager_builder_set_disable_simplify_lib_calls(self, flag(!@simplify_lib_calls))
64
+ end
65
+
66
+ # @param [Integer] threshold 0 = -O1, 225 = -O2, 275 = -O3
67
+ def inliner_threshold=(threshold)
68
+ @inliner_threshold = threshold
69
+ C.pass_manager_builder_use_inliner_with_threshold(self, @inliner_threshold)
70
+ end
71
+
72
+ # Populate a pass manager.
73
+ # @param [PassManager, FunctionPassManager] pass_manager
74
+ def build(pass_manager)
75
+ case pass_manager
76
+ when FunctionPassManager
77
+ C.pass_manager_builder_populate_function_pass_manager(self, pass_manager)
78
+
79
+ when PassManager
80
+ C.pass_manager_builder_populate_module_pass_manager(self, pass_manager)
81
+ end
82
+ end
83
+
84
+ # Populate an LTO pass manager.
85
+ # @param [PassManager] pass_manager
86
+ def build_with_lto(pass_manager, internalize=false, run_inliner=false)
87
+ if pass_manager.is_a?(FunctionPassManager)
88
+ raise ArgumentError, "FunctionPassManager does not support LTO"
89
+ end
90
+
91
+ # Add flag() when the header gets fixed and has LLVMBool
92
+ C.pass_manager_builder_populate_lto_pass_manager(self,
93
+ pass_manager, internalize, run_inliner)
94
+ end
95
+
96
+ private
97
+
98
+ def flag(boolean)
99
+ boolean ? 1 : 0
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,118 @@
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.3'
8
+
9
+ def self.attach_function(name, *_)
10
+ begin; super; rescue FFI::NotFoundError => e
11
+ (class << self; self; end).class_eval { define_method(name) { |*_| raise e } }
12
+ end
13
+ end
14
+
15
+ # (Not documented)
16
+ class OpaquePassManagerBuilder < FFI::Struct
17
+ layout :dummy, :char
18
+ end
19
+
20
+ # See llvm::PassManagerBuilder.
21
+ #
22
+ # @method pass_manager_builder_create()
23
+ # @return [OpaquePassManagerBuilder]
24
+ # @scope class
25
+ attach_function :pass_manager_builder_create, :LLVMPassManagerBuilderCreate, [], OpaquePassManagerBuilder
26
+
27
+ # (Not documented)
28
+ #
29
+ # @method pass_manager_builder_dispose(pmb)
30
+ # @param [OpaquePassManagerBuilder] pmb
31
+ # @return [nil]
32
+ # @scope class
33
+ attach_function :pass_manager_builder_dispose, :LLVMPassManagerBuilderDispose, [OpaquePassManagerBuilder], :void
34
+
35
+ # See llvm::PassManagerBuilder::OptLevel.
36
+ #
37
+ # @method pass_manager_builder_set_opt_level(pmb, opt_level)
38
+ # @param [OpaquePassManagerBuilder] pmb
39
+ # @param [Integer] opt_level
40
+ # @return [nil]
41
+ # @scope class
42
+ attach_function :pass_manager_builder_set_opt_level, :LLVMPassManagerBuilderSetOptLevel, [OpaquePassManagerBuilder, :uint], :void
43
+
44
+ # See llvm::PassManagerBuilder::SizeLevel.
45
+ #
46
+ # @method pass_manager_builder_set_size_level(pmb, size_level)
47
+ # @param [OpaquePassManagerBuilder] pmb
48
+ # @param [Integer] size_level
49
+ # @return [nil]
50
+ # @scope class
51
+ attach_function :pass_manager_builder_set_size_level, :LLVMPassManagerBuilderSetSizeLevel, [OpaquePassManagerBuilder, :uint], :void
52
+
53
+ # See llvm::PassManagerBuilder::DisableUnitAtATime.
54
+ #
55
+ # @method pass_manager_builder_set_disable_unit_at_a_time(pmb, value)
56
+ # @param [OpaquePassManagerBuilder] pmb
57
+ # @param [Integer] value
58
+ # @return [nil]
59
+ # @scope class
60
+ attach_function :pass_manager_builder_set_disable_unit_at_a_time, :LLVMPassManagerBuilderSetDisableUnitAtATime, [OpaquePassManagerBuilder, :int], :void
61
+
62
+ # See llvm::PassManagerBuilder::DisableUnrollLoops.
63
+ #
64
+ # @method pass_manager_builder_set_disable_unroll_loops(pmb, value)
65
+ # @param [OpaquePassManagerBuilder] pmb
66
+ # @param [Integer] value
67
+ # @return [nil]
68
+ # @scope class
69
+ attach_function :pass_manager_builder_set_disable_unroll_loops, :LLVMPassManagerBuilderSetDisableUnrollLoops, [OpaquePassManagerBuilder, :int], :void
70
+
71
+ # See llvm::PassManagerBuilder::DisableSimplifyLibCalls
72
+ #
73
+ # @method pass_manager_builder_set_disable_simplify_lib_calls(pmb, value)
74
+ # @param [OpaquePassManagerBuilder] pmb
75
+ # @param [Integer] value
76
+ # @return [nil]
77
+ # @scope class
78
+ attach_function :pass_manager_builder_set_disable_simplify_lib_calls, :LLVMPassManagerBuilderSetDisableSimplifyLibCalls, [OpaquePassManagerBuilder, :int], :void
79
+
80
+ # See llvm::PassManagerBuilder::Inliner.
81
+ #
82
+ # @method pass_manager_builder_use_inliner_with_threshold(pmb, threshold)
83
+ # @param [OpaquePassManagerBuilder] pmb
84
+ # @param [Integer] threshold
85
+ # @return [nil]
86
+ # @scope class
87
+ attach_function :pass_manager_builder_use_inliner_with_threshold, :LLVMPassManagerBuilderUseInlinerWithThreshold, [OpaquePassManagerBuilder, :uint], :void
88
+
89
+ # See llvm::PassManagerBuilder::populateFunctionPassManager.
90
+ #
91
+ # @method pass_manager_builder_populate_function_pass_manager(pmb, pm)
92
+ # @param [OpaquePassManagerBuilder] pmb
93
+ # @param [FFI::Pointer(PassManagerRef)] pm
94
+ # @return [nil]
95
+ # @scope class
96
+ attach_function :pass_manager_builder_populate_function_pass_manager, :LLVMPassManagerBuilderPopulateFunctionPassManager, [OpaquePassManagerBuilder, :pointer], :void
97
+
98
+ # See llvm::PassManagerBuilder::populateModulePassManager.
99
+ #
100
+ # @method pass_manager_builder_populate_module_pass_manager(pmb, pm)
101
+ # @param [OpaquePassManagerBuilder] pmb
102
+ # @param [FFI::Pointer(PassManagerRef)] pm
103
+ # @return [nil]
104
+ # @scope class
105
+ attach_function :pass_manager_builder_populate_module_pass_manager, :LLVMPassManagerBuilderPopulateModulePassManager, [OpaquePassManagerBuilder, :pointer], :void
106
+
107
+ # See llvm::PassManagerBuilder::populateLTOPassManager.
108
+ #
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]
115
+ # @scope class
116
+ attach_function :pass_manager_builder_populate_lto_pass_manager, :LLVMPassManagerBuilderPopulateLTOPassManager, [OpaquePassManagerBuilder, :pointer, :int, :int], :void
117
+
118
+ end