Class: LLVM::PassBuilder

Inherits:
Object
  • Object
show all
Extended by:
FFI::Library
Defined in:
lib/llvm/transforms/pass_builder.rb

Overview

rubocop:disable Metrics/ClassLength

Constant Summary collapse

OPT_PASSES =

rubocop:disable Layout/LineLength

{
  # :nocov:
  '0' => 'always-inline,coro-cond(coro-early,cgscc(coro-split),coro-cleanup,globaldce),function(annotation-remarks),verify',
  '1' => 'annotation2metadata,forceattrs,inferattrs,coro-early,function<eager-inv>(lower-expect,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;no-switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,sroa<modify-cfg>,early-cse<>),openmp-opt,ipsccp,called-value-propagation,globalopt,function<eager-inv>(mem2reg,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>),always-inline,require<globals-aa>,function(invalidate<aa>),require<profile-summary>,cgscc(devirt<4>(inline,function-attrs<skip-non-recursive-function-attrs>,function<eager-inv;no-rerun>(sroa<modify-cfg>,early-cse<memssa>,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,libcalls-shrinkwrap,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,reassociate,loop-mssa(loop-instsimplify,loop-simplifycfg,licm<no-allowspeculation>,loop-rotate<header-duplication;no-prepare-for-lto>,licm<allowspeculation>,simple-loop-unswitch<no-nontrivial;trivial>),simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop(loop-idiom,indvars,loop-deletion,loop-unroll-full),sroa<modify-cfg>,memcpyopt,sccp,bdce,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,coro-elide,adce,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>),function-attrs,function(require<should-not-run-function-passes>),coro-split)),deadargelim,coro-cleanup,globalopt,globaldce,elim-avail-extern,rpo-function-attrs,recompute-globalsaa,function<eager-inv>(float2int,lower-constant-intrinsics,loop(loop-rotate<header-duplication;no-prepare-for-lto>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;vectorize-forced-only;>,infer-alignment,loop-load-elim,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;sink-common-insts;speculate-blocks;simplify-cond-branch>,vector-combine,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop-unroll<O1>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>),globaldce,constmerge,cg-profile,rel-lookup-table-converter,function(annotation-remarks),verify',
  '2' => 'annotation2metadata,forceattrs,inferattrs,coro-early,function<eager-inv>(lower-expect,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;no-switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,sroa<modify-cfg>,early-cse<>),openmp-opt,ipsccp,called-value-propagation,globalopt,function<eager-inv>(mem2reg,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>),always-inline,require<globals-aa>,function(invalidate<aa>),require<profile-summary>,cgscc(devirt<4>(inline,function-attrs<skip-non-recursive-function-attrs>,openmp-opt-cgscc,function<eager-inv;no-rerun>(sroa<modify-cfg>,early-cse<memssa>,speculative-execution<only-if-divergent-target>,jump-threading,correlated-propagation,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,aggressive-instcombine,libcalls-shrinkwrap,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,reassociate,constraint-elimination,loop-mssa(loop-instsimplify,loop-simplifycfg,licm<no-allowspeculation>,loop-rotate<header-duplication;no-prepare-for-lto>,licm<allowspeculation>,simple-loop-unswitch<no-nontrivial;trivial>),simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop(loop-idiom,indvars,loop-deletion,loop-unroll-full),sroa<modify-cfg>,vector-combine,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,jump-threading,correlated-propagation,adce,memcpyopt,dse,move-auto-init,loop-mssa(licm<allowspeculation>),coro-elide,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;hoist-common-insts;sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>),function-attrs,function(require<should-not-run-function-passes>),coro-split)),deadargelim,coro-cleanup,globalopt,globaldce,elim-avail-extern,rpo-function-attrs,recompute-globalsaa,function<eager-inv>(float2int,lower-constant-intrinsics,loop(loop-rotate<header-duplication;no-prepare-for-lto>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,infer-alignment,loop-load-elim,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;sink-common-insts;speculate-blocks;simplify-cond-branch>,slp-vectorizer,vector-combine,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop-unroll<O2>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>),globaldce,constmerge,cg-profile,rel-lookup-table-converter,function(annotation-remarks),verify',
  '3' => 'annotation2metadata,forceattrs,inferattrs,coro-early,function<eager-inv>(lower-expect,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;no-switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,sroa<modify-cfg>,early-cse<>,callsite-splitting),openmp-opt,ipsccp,called-value-propagation,globalopt,function<eager-inv>(mem2reg,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>),always-inline,require<globals-aa>,function(invalidate<aa>),require<profile-summary>,cgscc(devirt<4>(inline,function-attrs<skip-non-recursive-function-attrs>,argpromotion,openmp-opt-cgscc,function<eager-inv;no-rerun>(sroa<modify-cfg>,early-cse<memssa>,speculative-execution<only-if-divergent-target>,jump-threading,correlated-propagation,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,aggressive-instcombine,libcalls-shrinkwrap,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,reassociate,constraint-elimination,loop-mssa(loop-instsimplify,loop-simplifycfg,licm<no-allowspeculation>,loop-rotate<header-duplication;no-prepare-for-lto>,licm<allowspeculation>,simple-loop-unswitch<nontrivial;trivial>),simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop(loop-idiom,indvars,loop-deletion,loop-unroll-full),sroa<modify-cfg>,vector-combine,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,jump-threading,correlated-propagation,adce,memcpyopt,dse,move-auto-init,loop-mssa(licm<allowspeculation>),coro-elide,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;hoist-common-insts;sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>),function-attrs,function(require<should-not-run-function-passes>),coro-split)),deadargelim,coro-cleanup,globalopt,globaldce,elim-avail-extern,rpo-function-attrs,recompute-globalsaa,function<eager-inv>(float2int,lower-constant-intrinsics,chr,loop(loop-rotate<header-duplication;no-prepare-for-lto>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,infer-alignment,loop-load-elim,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;sink-common-insts;speculate-blocks;simplify-cond-branch>,slp-vectorizer,vector-combine,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop-unroll<O3>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>),globaldce,constmerge,cg-profile,rel-lookup-table-converter,function(annotation-remarks),verify',
  's' => 'annotation2metadata,forceattrs,inferattrs,coro-early,function<eager-inv>(lower-expect,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;no-switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,sroa<modify-cfg>,early-cse<>),openmp-opt,ipsccp,called-value-propagation,globalopt,function<eager-inv>(mem2reg,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>),always-inline,require<globals-aa>,function(invalidate<aa>),require<profile-summary>,cgscc(devirt<4>(inline,function-attrs<skip-non-recursive-function-attrs>,function<eager-inv;no-rerun>(sroa<modify-cfg>,early-cse<memssa>,speculative-execution<only-if-divergent-target>,jump-threading,correlated-propagation,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,aggressive-instcombine,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,reassociate,constraint-elimination,loop-mssa(loop-instsimplify,loop-simplifycfg,licm<no-allowspeculation>,loop-rotate<header-duplication;no-prepare-for-lto>,licm<allowspeculation>,simple-loop-unswitch<no-nontrivial;trivial>),simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop(loop-idiom,indvars,loop-deletion,loop-unroll-full),sroa<modify-cfg>,vector-combine,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,jump-threading,correlated-propagation,adce,memcpyopt,dse,move-auto-init,loop-mssa(licm<allowspeculation>),coro-elide,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;hoist-common-insts;sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>),function-attrs,function(require<should-not-run-function-passes>),coro-split)),deadargelim,coro-cleanup,globalopt,globaldce,elim-avail-extern,rpo-function-attrs,recompute-globalsaa,function<eager-inv>(float2int,lower-constant-intrinsics,loop(loop-rotate<header-duplication;no-prepare-for-lto>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,infer-alignment,loop-load-elim,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;sink-common-insts;speculate-blocks;simplify-cond-branch>,slp-vectorizer,vector-combine,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop-unroll<O2>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>),globaldce,constmerge,cg-profile,rel-lookup-table-converter,function(annotation-remarks),verify',
  'z' => 'annotation2metadata,forceattrs,inferattrs,coro-early,function<eager-inv>(lower-expect,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;no-switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,sroa<modify-cfg>,early-cse<>),openmp-opt,ipsccp,called-value-propagation,globalopt,function<eager-inv>(mem2reg,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>),always-inline,require<globals-aa>,function(invalidate<aa>),require<profile-summary>,cgscc(devirt<4>(inline,function-attrs<skip-non-recursive-function-attrs>,function<eager-inv;no-rerun>(sroa<modify-cfg>,early-cse<memssa>,speculative-execution<only-if-divergent-target>,jump-threading,correlated-propagation,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,aggressive-instcombine,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,reassociate,constraint-elimination,loop-mssa(loop-instsimplify,loop-simplifycfg,licm<no-allowspeculation>,loop-rotate<no-header-duplication;no-prepare-for-lto>,licm<allowspeculation>,simple-loop-unswitch<no-nontrivial;trivial>),simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop(loop-idiom,indvars,loop-deletion,loop-unroll-full),sroa<modify-cfg>,vector-combine,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,jump-threading,correlated-propagation,adce,memcpyopt,dse,move-auto-init,loop-mssa(licm<allowspeculation>),coro-elide,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;hoist-common-insts;sink-common-insts;speculate-blocks;simplify-cond-branch>,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>),function-attrs,function(require<should-not-run-function-passes>),coro-split)),deadargelim,coro-cleanup,globalopt,globaldce,elim-avail-extern,rpo-function-attrs,recompute-globalsaa,function<eager-inv>(float2int,lower-constant-intrinsics,loop(loop-rotate<no-header-duplication;no-prepare-for-lto>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;vectorize-forced-only;>,infer-alignment,loop-load-elim,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;sink-common-insts;speculate-blocks;simplify-cond-branch>,vector-combine,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop-unroll<O2>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;no-use-loop-info;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts;speculate-blocks;simplify-cond-branch>),globaldce,constmerge,cg-profile,rel-lookup-table-converter,function(annotation-remarks),verify',
  # :nocov:
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePassBuilder

rubocop:enable Layout/LineLength



24
25
26
27
28
# File 'lib/llvm/transforms/pass_builder.rb', line 24

def initialize
  @passes = []
  @inliner_threshold = nil
  @merge_functions = nil
end

Instance Attribute Details

#inliner_thresholdObject

Returns the value of attribute inliner_threshold.



9
10
11
# File 'lib/llvm/transforms/pass_builder.rb', line 9

def inliner_threshold
  @inliner_threshold
end

#merge_functionsObject

Returns the value of attribute merge_functions.



9
10
11
# File 'lib/llvm/transforms/pass_builder.rb', line 9

def merge_functions
  @merge_functions
end

#passesObject

Returns the value of attribute passes.



8
9
10
# File 'lib/llvm/transforms/pass_builder.rb', line 8

def passes
  @passes
end

Instance Method Details

#adce!Object

Aggressive Dead Code Elimination

Returns:

  • self



461
462
463
# File 'lib/llvm/transforms/pass_builder.rb', line 461

def adce!
  add_pass('adce')
end

#add_discriminators!Object

Returns self.

Returns:

  • self



349
350
351
# File 'lib/llvm/transforms/pass_builder.rb', line 349

def add_discriminators!
  add_pass('add-discriminators')
end

#add_function_passObject



30
31
32
33
34
35
36
37
# File 'lib/llvm/transforms/pass_builder.rb', line 30

def add_function_pass
  pb = PassBuilder.new
  if block_given?
    yield pb
  end

  add_pass("function(#{pb.pass_string})")
end

#add_pass(pass) ⇒ Object

Returns self.

Returns:

  • self



64
65
66
67
# File 'lib/llvm/transforms/pass_builder.rb', line 64

def add_pass(pass)
  passes << pass
  self
end

#alignment_from_assumptions!Object

Returns self.

Returns:

  • self



143
144
145
# File 'lib/llvm/transforms/pass_builder.rb', line 143

def alignment_from_assumptions!
  add_pass('alignment-from-assumptions')
end

#always_inline!Object

Returns:

  • self



404
405
406
# File 'lib/llvm/transforms/pass_builder.rb', line 404

def always_inline!
  add_pass('always-inline')
end

#argpromotion!Object Also known as: arg_promote!

Returns self.

Returns:

  • self



528
529
530
# File 'lib/llvm/transforms/pass_builder.rb', line 528

def argpromotion!
  add_pass('argpromotion')
end

#asan!(options = {}) ⇒ Object

Returns:

  • self



572
573
574
575
# File 'lib/llvm/transforms/pass_builder.rb', line 572

def asan!(options = {})
  opt_str = options[:kernel] ? '<kernel>' : ''
  add_pass("asan#{opt_str}")
end

#basic_aa!Object Also known as: basicaa!

Returns self.

Returns:

  • self



364
365
366
# File 'lib/llvm/transforms/pass_builder.rb', line 364

def basic_aa!
  add_pass('require<basic-aa>')
end

#bb_vectorize!Object



650
651
652
653
# File 'lib/llvm/transforms/pass_builder.rb', line 650

def bb_vectorize!
  warn('bb_vectorize! / LLVMAddBBVectorizePass was removed from LLVM - replace with slp_vectorize!')
  slp_vectorize!
end

#bdce!Object

Bit-Tracking Dead Code Elimination pass

Returns:

  • self



515
516
517
# File 'lib/llvm/transforms/pass_builder.rb', line 515

def bdce!
  add_pass('bdce')
end

#called_value_propagation!Object

Propagate called values This file implements a transformation that attaches !callees metadata to indirect call sites. For a given call site, the metadata, if present, indicates the set of functions the call site could possibly target at run-time. This metadata is added to indirect call sites when the set of possible targets can be determined by analysis and is known to be small. The analysis driving the transformation is similar to constant propagation and makes uses of the generic sparse propagation solver. llvm.org/doxygen/CalledValuePropagation_8h_source.html

Returns:

  • self



438
439
440
# File 'lib/llvm/transforms/pass_builder.rb', line 438

def called_value_propagation!
  add_pass('called-value-propagation')
end

#constmerge!Object Also known as: const_merge!

ConstantMerge is designed to build up a map of available constants and eliminate duplicates when it is initialized. llvm.org/doxygen/ConstantMerge_8cpp_source.html llvm.org/doxygen/ConstantMerge_8h_source.html

Returns:

  • self



453
454
455
# File 'lib/llvm/transforms/pass_builder.rb', line 453

def constmerge!
  add_pass('constmerge')
end

#constprop!Object



655
656
657
# File 'lib/llvm/transforms/pass_builder.rb', line 655

def constprop!
  warn('constprop! / LLVMAddConstantPropagationPass was removed from LLVM')
end

#correlated_propagation!Object

Returns self.

Returns:

  • self



329
330
331
# File 'lib/llvm/transforms/pass_builder.rb', line 329

def correlated_propagation!
  add_pass('correlated-propagation')
end

#cvprop!Object

Returns self.

Returns:

  • self



324
325
326
# File 'lib/llvm/transforms/pass_builder.rb', line 324

def cvprop!
  correlated_propagation!
end

#dce!Object

Returns self.

Returns:

  • self



70
71
72
# File 'lib/llvm/transforms/pass_builder.rb', line 70

def dce!
  add_pass('dce')
end

#deadargelim!Object Also known as: dae!

Returns self.

Returns:

  • self



443
444
445
# File 'lib/llvm/transforms/pass_builder.rb', line 443

def deadargelim!
  add_pass('deadargelim')
end

#dfsan!Object

Returns:

  • self



592
593
594
# File 'lib/llvm/transforms/pass_builder.rb', line 592

def dfsan!
  add_pass('dfsan')
end

#dse!Object

Dead Store Elimination his file implements a trivial dead store elimination that only considers basic-block local redundant stores. llvm.org/doxygen/DeadStoreElimination_8h_source.html

Returns:

  • self



523
524
525
# File 'lib/llvm/transforms/pass_builder.rb', line 523

def dse!
  add_pass('dse')
end

#early_cse!Object

A simple and fast domtree-based CSE pass.

This pass does a simple depth-first walk over the dominator tree, eliminating trivially redundant instructions and using instsimplify to canonicalize things as it goes. It is intended to be fast and catch obvious cases so that instcombine and other passes are more effective. It is expected that a later pass of GVN will catch the interesting/hard cases. llvm.org/doxygen/EarlyCSE_8h_source.html llvm.org/doxygen/EarlyCSE_8cpp.html

Returns:

  • self



288
289
290
# File 'lib/llvm/transforms/pass_builder.rb', line 288

def early_cse!
  add_pass('early-cse')
end

#early_cse_memssa!Object

Returns:

  • self



296
297
298
# File 'lib/llvm/transforms/pass_builder.rb', line 296

def early_cse_memssa!
  add_pass('early-cse<memssa>')
end

#function_attrs!Object Also known as: fun_attrs!

Returns self.

Returns:

  • self



466
467
468
# File 'lib/llvm/transforms/pass_builder.rb', line 466

def function_attrs!
  add_pass('function-attrs')
end

#global_opt!Object

Returns self.

Returns:

  • self



500
501
502
# File 'lib/llvm/transforms/pass_builder.rb', line 500

def global_opt!
  add_pass('globalopt')
end

#globaldce!Object Also known as: gdce!

Global Dead Code Elimination TODO: takes params

Returns:

  • self



507
508
509
# File 'lib/llvm/transforms/pass_builder.rb', line 507

def globaldce!
  add_pass('globaldce')
end

#gobals_aa!Object

Returns self.

Returns:

  • self



391
392
393
# File 'lib/llvm/transforms/pass_builder.rb', line 391

def gobals_aa!
  add_pass('require<globals-aa>')
end

#gvn!Object

Global Value Numbering pass llvm.org/doxygen/GVN_8h_source.html TODO: takes params

Returns:

  • self



107
108
109
# File 'lib/llvm/transforms/pass_builder.rb', line 107

def gvn!
  add_pass('gvn')
end

#gvn_hoist!Object

hoists expressions from branches to a common dominator. llvm.org/doxygen/GVNHoist_8cpp_source.html

Returns:

  • self



121
122
123
# File 'lib/llvm/transforms/pass_builder.rb', line 121

def gvn_hoist!
  add_pass('gvn-hoist')
end

#gvn_sink!Object

sink instructions into successors llvm.org/doxygen/GVNSink_8cpp_source.html

Returns:

  • self



128
129
130
# File 'lib/llvm/transforms/pass_builder.rb', line 128

def gvn_sink!
  add_pass('gvn-sink')
end

#hwasan!(_options = {}) ⇒ Object

Returns:

  • self



562
563
564
# File 'lib/llvm/transforms/pass_builder.rb', line 562

def hwasan!(_options = {})
  add_pass('hwasan')
end

#indvars!Object

Returns self.

Returns:

  • self



138
139
140
# File 'lib/llvm/transforms/pass_builder.rb', line 138

def indvars!
  add_pass('indvars')
end

#inline!Object

Returns:

  • self



539
540
541
# File 'lib/llvm/transforms/pass_builder.rb', line 539

def inline!
  add_pass('inline')
end

#instcombine!Object

Combine instructions to form fewer, simple instructions. This pass does not modify the CFG. This pass is where algebraic simplification happens. llvm.org/doxygen/InstructionCombining_8cpp_source.html llvm.org/doxygen/InstCombineInternal_8h_source.html

Returns:

  • self



209
210
211
# File 'lib/llvm/transforms/pass_builder.rb', line 209

def instcombine!
  add_pass('instcombine')
end

#instsimplify!Object

Returns self.

Returns:

  • self



214
215
216
# File 'lib/llvm/transforms/pass_builder.rb', line 214

def instsimplify!
  add_pass('instsimplify')
end

#internalize!(_all_but_main = true) ⇒ Object

TODO: test this

Returns:

  • self



486
487
488
# File 'lib/llvm/transforms/pass_builder.rb', line 486

def internalize!(_all_but_main = true) # rubocop:disable Style/OptionalBooleanParameter
  add_pass('internalize')
end

#ipcp!Object



626
627
628
# File 'lib/llvm/transforms/pass_builder.rb', line 626

def ipcp!
  deprecated('ipcp! / LLVMAddIPConstantPropagationPass was removed from LLVM')
end

#ipsccp!Object

TODO:

accept parameters ipsccp<no-func-spec;func-spec>

This pass implements interprocedural sparse conditional constant propagation and merging. llvm.org/doxygen/IPO_2SCCP_8h_source.html llvm.org/doxygen/IPO_2SCCP_8cpp_source.html

Returns:

  • self



495
496
497
# File 'lib/llvm/transforms/pass_builder.rb', line 495

def ipsccp!
  add_pass('ipsccp')
end

#jump_threading!Object

Returns self.

Returns:

  • self



133
134
135
# File 'lib/llvm/transforms/pass_builder.rb', line 133

def jump_threading!
  add_pass('jump-threading')
end

#lcssa!Object

Returns self.

Returns:

  • self



301
302
303
# File 'lib/llvm/transforms/pass_builder.rb', line 301

def lcssa!
  add_pass('lcssa')
end

#licm!Object

Returns self.

Returns:

  • self



75
76
77
# File 'lib/llvm/transforms/pass_builder.rb', line 75

def licm!
  add_pass('licm')
end

#loop_deletion!Object

Returns self.

Returns:

  • self



148
149
150
# File 'lib/llvm/transforms/pass_builder.rb', line 148

def loop_deletion!
  add_pass('loop-deletion')
end

#loop_idiom!Object

Returns self.

Returns:

  • self



153
154
155
# File 'lib/llvm/transforms/pass_builder.rb', line 153

def loop_idiom!
  add_pass('loop-idiom')
end

#loop_reroll!Object

Returns self.

Returns:

  • self



163
164
165
# File 'lib/llvm/transforms/pass_builder.rb', line 163

def loop_reroll!
  add_pass('loop-reroll')
end

#loop_rotate!Object

Returns self.

Returns:

  • self



158
159
160
# File 'lib/llvm/transforms/pass_builder.rb', line 158

def loop_rotate!
  add_pass('loop-rotate')
end

#loop_unroll!Object

Returns self.

Returns:

  • self



168
169
170
# File 'lib/llvm/transforms/pass_builder.rb', line 168

def loop_unroll!
  add_pass('loop-unroll')
end

#loop_unroll_and_jam!Object

Returns self.

Returns:

  • self



173
174
175
# File 'lib/llvm/transforms/pass_builder.rb', line 173

def loop_unroll_and_jam!
  add_pass('loop-unroll-and-jam')
end

#loop_unswitch!Object

Returns self.

Returns:

  • self



183
184
185
# File 'lib/llvm/transforms/pass_builder.rb', line 183

def loop_unswitch!
  simple_loop_unswitch!
end

#loop_vectorize!Object

TODO: takes params

Returns:

  • self



189
190
191
# File 'lib/llvm/transforms/pass_builder.rb', line 189

def loop_vectorize!
  add_pass('loop-vectorize')
end

#lower_constant_intrinsics!Object

Returns self.

Returns:

  • self



334
335
336
# File 'lib/llvm/transforms/pass_builder.rb', line 334

def lower_constant_intrinsics!
  add_pass('lower-constant-intrinsics')
end

#lower_expect!Object

Returns self.

Returns:

  • self



319
320
321
# File 'lib/llvm/transforms/pass_builder.rb', line 319

def lower_expect!
  add_pass('lower-expect')
end

#loweratomic!Object

Returns self.

Returns:

  • self



219
220
221
# File 'lib/llvm/transforms/pass_builder.rb', line 219

def loweratomic!
  add_pass('loweratomic')
end

#lowerswitch!Object

Returns self.

Returns:

  • self



396
397
398
# File 'lib/llvm/transforms/pass_builder.rb', line 396

def lowerswitch!
  add_pass('lowerswitch')
end

#mem2reg!Object

Returns self.

Returns:

  • self



244
245
246
# File 'lib/llvm/transforms/pass_builder.rb', line 244

def mem2reg!
  add_pass('mem2reg')
end

#memcpyopt!Object

Returns self.

Returns:

  • self



194
195
196
# File 'lib/llvm/transforms/pass_builder.rb', line 194

def memcpyopt!
  add_pass('memcpyopt')
end

#memoryssa!Object

Returns self.

Returns:

  • self



306
307
308
# File 'lib/llvm/transforms/pass_builder.rb', line 306

def memoryssa!
  add_pass('require<memoryssa>')
end

#mergefunc!Object

Returns:

  • self



424
425
426
# File 'lib/llvm/transforms/pass_builder.rb', line 424

def mergefunc!
  add_pass('mergefunc')
end

#mergeicmps!Object

Returns self.

Returns:

  • self



359
360
361
# File 'lib/llvm/transforms/pass_builder.rb', line 359

def mergeicmps!
  add_pass('mergeicmps')
end

#mergereturn!Object

Returns self.

Returns:

  • self



354
355
356
# File 'lib/llvm/transforms/pass_builder.rb', line 354

def mergereturn!
  add_pass('mergereturn')
end

#mldst_motion!Object

Merged Load Store Motion

Returns:

  • self



99
100
101
# File 'lib/llvm/transforms/pass_builder.rb', line 99

def mldst_motion!
  add_pass('mldst-motion')
end

#module_summary!Object

Returns self.

Returns:

  • self



254
255
256
# File 'lib/llvm/transforms/pass_builder.rb', line 254

def module_summary!
  add_pass('require<module-summary>')
end

#msan!(options = {}) ⇒ Object

Memory Sanitizer TODO: takes params llvm.org/doxygen/MemorySanitizer_8cpp.html llvm.org/doxygen/MemorySanitizer_8h_source.html clang.llvm.org/docs/MemorySanitizer.html KernelMemorySanitizer only supports X86_64 and SystemZ at the moment.

Returns:

  • self



584
585
586
587
# File 'lib/llvm/transforms/pass_builder.rb', line 584

def msan!(options = {})
  opt_str = options[:kernel] ? '<kernel>' : ''
  add_pass("msan#{opt_str}")
end

#newgvn!Object

New Global Value Numbering pass llvm.org/doxygen/NewGVN_8cpp.html#details

Returns:

  • self



114
115
116
# File 'lib/llvm/transforms/pass_builder.rb', line 114

def newgvn!
  add_pass('newgvn')
end

#no_op_cgscc!Object

Returns self.

Returns:

  • self



264
265
266
# File 'lib/llvm/transforms/pass_builder.rb', line 264

def no_op_cgscc!
  add_pass('no-op-cgscc')
end

#no_op_function!Object

Returns self.

Returns:

  • self



269
270
271
# File 'lib/llvm/transforms/pass_builder.rb', line 269

def no_op_function!
  add_pass('no-op-function')
end

#no_op_module!Object

Returns self.

Returns:

  • self



259
260
261
# File 'lib/llvm/transforms/pass_builder.rb', line 259

def no_op_module!
  add_pass('no-op-module')
end

#o!(opt_level = '0', options = {}) ⇒ Object

–O0 - Optimization level 0. Similar to clang -O0. Use -passes=‘default<O0>’ for the new PM –O1 - Optimization level 1. Similar to clang -O1. Use -passes=‘default<O1>’ for the new PM –O2 - Optimization level 2. Similar to clang -O2. Use -passes=‘default<O2>’ for the new PM –O3 - Optimization level 3. Similar to clang -O3. Use -passes=‘default<O3>’ for the new PM –Os - Like -O2 but size-conscious. Similar to clang -Os. Use -passes=‘default<Os>’ for the new PM –Oz - Like -O2 but optimize for code size above all else. Similar to clang -Oz. Use -passes=‘default<Oz>’ for the new PM

Returns:

  • self



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/llvm/transforms/pass_builder.rb', line 46

def o!(opt_level = '0', options = {})
  opt_level = opt_level.to_s
  expanded_pass = OPT_PASSES[opt_level]

  if expanded_pass.nil?
    return add_pass("default<O#{opt_level}>")
  end

  if options[:disable_inline]
    expanded_pass = expanded_pass.gsub('devirt<4>(inline,', 'devirt<4>(')
  end
  if options[:disable_always_inline]
    expanded_pass = expanded_pass.gsub('always-inline,', '')
  end
  add_pass(expanded_pass)
end

#objc_arc_aa!Object

Returns self.

Returns:

  • self



371
372
373
# File 'lib/llvm/transforms/pass_builder.rb', line 371

def objc_arc_aa!
  add_pass('require<objc-arc-aa>')
end

#partial_inliner!Object

This pass performs partial inlining, typically by inlining an if statement that surrounds the body of the function. llvm.org/doxygen/PartialInlining_8h_source.html llvm.org/doxygen/PartialInlining_8cpp_source.html llvm.org/doxygen/PartialInlining_8h.html llvm.org/doxygen/PartialInlining_8cpp.html

Returns:

  • self



415
416
417
# File 'lib/llvm/transforms/pass_builder.rb', line 415

def partial_inliner!
  add_pass('partial-inliner')
end

#partially_inline_libcalls!Object

Returns self.

Returns:

  • self



224
225
226
# File 'lib/llvm/transforms/pass_builder.rb', line 224

def partially_inline_libcalls!
  add_pass('partially-inline-libcalls')
end

#pass_stringObject



622
623
624
# File 'lib/llvm/transforms/pass_builder.rb', line 622

def pass_string
  passes.join(',')
end

#prune_eh!Object



630
631
632
# File 'lib/llvm/transforms/pass_builder.rb', line 630

def prune_eh!
  deprecated('prune_eh! / LLVMAddPruneEHPass was removed in LLVM 16')
end

#reassociate!Object

Returns self.

Returns:

  • self



229
230
231
# File 'lib/llvm/transforms/pass_builder.rb', line 229

def reassociate!
  add_pass('reassociate')
end

#reg2mem!Object

Returns self.

Returns:

  • self



239
240
241
# File 'lib/llvm/transforms/pass_builder.rb', line 239

def reg2mem!
  add_pass('reg2mem')
end

#run(mod, target) ⇒ Object



608
609
610
611
612
613
614
615
616
617
618
619
620
# File 'lib/llvm/transforms/pass_builder.rb', line 608

def run(mod, target)
  return self if passes.empty?

  error = with_options { |options| C.run_passes(mod, pass_string, target, options) }
  if !error.null?
    error_msg = C.get_error_message(error)
    # TODO: clone then dispose of error_msg, currently produces "munmap_chunk(): invalid pointer"
    # save_message = error_msg.clone
    # C.dispose_error_message(error_msg)
    raise ArgumentError, error_msg
  end
  self
end

#sancov_module!Object

Returns:

  • self



598
599
600
# File 'lib/llvm/transforms/pass_builder.rb', line 598

def sancov_module!
  add_pass('sancov-module')
end

#sanmd_module!Object

Returns:

  • self



604
605
606
# File 'lib/llvm/transforms/pass_builder.rb', line 604

def sanmd_module!
  add_pass('sanmd-module')
end

#scalarizer!Object

Returns self.

Returns:

  • self



93
94
95
# File 'lib/llvm/transforms/pass_builder.rb', line 93

def scalarizer!
  add_pass('scalarizer')
end

#scalarrepl!Object



638
639
640
# File 'lib/llvm/transforms/pass_builder.rb', line 638

def scalarrepl!
  deprecated('TODO: scalarrepl')
end

#scalarrepl_ssa!Object



642
643
644
# File 'lib/llvm/transforms/pass_builder.rb', line 642

def scalarrepl_ssa!
  deprecated('TODO: scalarrepl_ssa')
end

#scalarrepl_threshold!(_threshold = 0) ⇒ Object



646
647
648
# File 'lib/llvm/transforms/pass_builder.rb', line 646

def scalarrepl_threshold!(_threshold = 0)
  deprecated('TODO: scalarrepl_threshold')
end

#sccp!Object

Returns self.

Returns:

  • self



199
200
201
# File 'lib/llvm/transforms/pass_builder.rb', line 199

def sccp!
  add_pass('sccp')
end

#scev_aa!Object

Returns self.

Returns:

  • self



376
377
378
# File 'lib/llvm/transforms/pass_builder.rb', line 376

def scev_aa!
  add_pass('require<scev-aa>')
end

#scoped_noalias_aa!Object

Returns self.

Returns:

  • self



381
382
383
# File 'lib/llvm/transforms/pass_builder.rb', line 381

def scoped_noalias_aa!
  add_pass('require<scoped-noalias-aa>')
end

#simple_loop_unswitch!Object

Returns self.

Returns:

  • self



178
179
180
# File 'lib/llvm/transforms/pass_builder.rb', line 178

def simple_loop_unswitch!
  add_pass('simple-loop-unswitch')
end

#simplify_libcalls!Object



634
635
636
# File 'lib/llvm/transforms/pass_builder.rb', line 634

def simplify_libcalls!
  deprecated('simplify_libcalls! / LLVMAddSimplifyLibCallsPass was removed from LLVM')
end

#simplifycfg!Object

A pass to simplify and canonicalize the CFG of a function. This pass iteratively simplifies the entire CFG of a function. It may change or remove control flow to put the CFG into a canonical form expected by other passes of the mid-level optimizer. Depending on the specified options, it may further optimize control-flow to create non-canonical form llvm.org/doxygen/SimplifyCFG_8h_source.html TODO: takes params Options: simplifycfg<no-forward-switch-cond;forward-switch-cond;no-switch-range-to-icmp;switch-range-to-icmp;no-switch-to-lookup;switch-to-lookup;no-keep-loops;keep-loops;no-hoist-common-insts;hoist-common-insts;no-sink-common-insts;sink-common-insts;bonus-inst-threshold=N>

Returns:

  • self



88
89
90
# File 'lib/llvm/transforms/pass_builder.rb', line 88

def simplifycfg!
  add_pass('simplifycfg')
end

#slp_vectorize!Object

Returns self.

Returns:

  • self



339
340
341
# File 'lib/llvm/transforms/pass_builder.rb', line 339

def slp_vectorize!
  slp_vectorizer!
end

#slp_vectorizer!Object

Returns self.

Returns:

  • self



344
345
346
# File 'lib/llvm/transforms/pass_builder.rb', line 344

def slp_vectorizer!
  add_pass('slp-vectorizer')
end

#sroa!Object

Returns:

  • self



314
315
316
# File 'lib/llvm/transforms/pass_builder.rb', line 314

def sroa!
  add_pass('sroa')
end

#stack_safety!Object

Returns self.

Returns:

  • self



274
275
276
# File 'lib/llvm/transforms/pass_builder.rb', line 274

def stack_safety!
  add_pass('require<stack-safety>')
end

#strip!Object

Returns self.

Returns:

  • self



473
474
475
# File 'lib/llvm/transforms/pass_builder.rb', line 473

def strip!
  add_pass('strip')
end

#strip_dead_prototypes!Object Also known as: sdp!

Returns self.

Returns:

  • self



478
479
480
# File 'lib/llvm/transforms/pass_builder.rb', line 478

def strip_dead_prototypes!
  add_pass('strip-dead-prototypes')
end

#tailcallelim!Object

Returns self.

Returns:

  • self



234
235
236
# File 'lib/llvm/transforms/pass_builder.rb', line 234

def tailcallelim!
  add_pass('tailcallelim')
end

#tbaa!Object

Returns self.

Returns:

  • self



386
387
388
# File 'lib/llvm/transforms/pass_builder.rb', line 386

def tbaa!
  add_pass('require<tbaa>')
end

#tsan!Object

Returns:

  • self



546
547
548
# File 'lib/llvm/transforms/pass_builder.rb', line 546

def tsan!
  add_pass('tsan')
end

#tsan_module!Object

Thread Sanitiver - Module clang.llvm.org/docs/ThreadSanitizer.html

Returns:

  • self



553
554
555
# File 'lib/llvm/transforms/pass_builder.rb', line 553

def tsan_module!
  add_pass('tsan-module')
end

#verify!Object

Returns self.

Returns:

  • self



249
250
251
# File 'lib/llvm/transforms/pass_builder.rb', line 249

def verify!
  add_pass('verify')
end