Class: LLVM::PassBuilder

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

Overview

rubocop:disable Metrics/ClassLength

Constant Summary collapse

OPT_PASSES =

rubocop:disable Layout/LineLength

{
  # :nocov:
  '0' => 'function(ee-instrument<>),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>(ee-instrument<>,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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,sroa<modify-cfg>,early-cse<>),openmp-opt,ipsccp,called-value-propagation,globalopt,function<eager-inv>(mem2reg,instcombine<max-iterations=1;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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>),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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-verify-fixpoint>,loop(loop-idiom,indvars,loop-deletion,loop-unroll-full),sroa<modify-cfg>,memcpyopt,sccp,bdce,instcombine<max-iterations=1;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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-verify-fixpoint>),function-attrs,function(require<should-not-run-function-passes>),coro-split,coro-annotation-elide)),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-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,vector-combine,instcombine<max-iterations=1;no-verify-fixpoint>,loop-unroll<O1>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;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;hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;speculate-unpredictables>),globaldce,constmerge,cg-profile,rel-lookup-table-converter,function(annotation-remarks),verify',
  '2' => 'annotation2metadata,forceattrs,inferattrs,coro-early,function<eager-inv>(ee-instrument<>,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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,sroa<modify-cfg>,early-cse<>),openmp-opt,ipsccp,called-value-propagation,globalopt,function<eager-inv>(mem2reg,instcombine<max-iterations=1;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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>),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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-verify-fixpoint>,loop(loop-idiom,indvars,extra-simple-loop-unswitch-passes,loop-deletion,loop-unroll-full),sroa<modify-cfg>,vector-combine,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine<max-iterations=1;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;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-verify-fixpoint>),function-attrs,function(require<should-not-run-function-passes>),coro-split,coro-annotation-elide)),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-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,slp-vectorizer,vector-combine,instcombine<max-iterations=1;no-verify-fixpoint>,loop-unroll<O2>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;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;hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;speculate-unpredictables>),globaldce,constmerge,cg-profile,rel-lookup-table-converter,function(annotation-remarks),verify',
  '3' => 'annotation2metadata,forceattrs,inferattrs,coro-early,function<eager-inv>(ee-instrument<>,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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,sroa<modify-cfg>,early-cse<>,callsite-splitting),openmp-opt,ipsccp,called-value-propagation,globalopt,function<eager-inv>(mem2reg,instcombine<max-iterations=1;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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>),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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-verify-fixpoint>,loop(loop-idiom,indvars,extra-simple-loop-unswitch-passes,loop-deletion,loop-unroll-full),sroa<modify-cfg>,vector-combine,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine<max-iterations=1;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;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-verify-fixpoint>),function-attrs,function(require<should-not-run-function-passes>),coro-split,coro-annotation-elide)),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-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,slp-vectorizer,vector-combine,instcombine<max-iterations=1;no-verify-fixpoint>,loop-unroll<O3>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;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;hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;speculate-unpredictables>),globaldce,constmerge,cg-profile,rel-lookup-table-converter,function(annotation-remarks),verify',
  's' => 'annotation2metadata,forceattrs,inferattrs,coro-early,function<eager-inv>(ee-instrument<>,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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,sroa<modify-cfg>,early-cse<>),openmp-opt,ipsccp,called-value-propagation,globalopt,function<eager-inv>(mem2reg,instcombine<max-iterations=1;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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>),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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-verify-fixpoint>,loop(loop-idiom,indvars,extra-simple-loop-unswitch-passes,loop-deletion,loop-unroll-full),sroa<modify-cfg>,vector-combine,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine<max-iterations=1;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;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-verify-fixpoint>),function-attrs,function(require<should-not-run-function-passes>),coro-split,coro-annotation-elide)),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-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,slp-vectorizer,vector-combine,instcombine<max-iterations=1;no-verify-fixpoint>,loop-unroll<O2>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;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;hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;speculate-unpredictables>),globaldce,constmerge,cg-profile,rel-lookup-table-converter,function(annotation-remarks),verify',
  'z' => 'annotation2metadata,forceattrs,inferattrs,coro-early,function<eager-inv>(ee-instrument<>,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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,sroa<modify-cfg>,early-cse<>),openmp-opt,ipsccp,called-value-propagation,globalopt,function<eager-inv>(mem2reg,instcombine<max-iterations=1;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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>),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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,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-hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-verify-fixpoint>,loop(loop-idiom,indvars,extra-simple-loop-unswitch-passes,loop-deletion,loop-unroll-full),sroa<modify-cfg>,vector-combine,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine<max-iterations=1;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;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,instcombine<max-iterations=1;no-verify-fixpoint>),function-attrs,function(require<should-not-run-function-passes>),coro-split,coro-annotation-elide)),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-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,vector-combine,instcombine<max-iterations=1;no-verify-fixpoint>,loop-unroll<O2>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;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;hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;speculate-unpredictables>),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



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

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

Instance Attribute Details

#inliner_thresholdObject

Returns the value of attribute inliner_threshold.



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

def inliner_threshold
  @inliner_threshold
end

#merge_functionsObject

Returns the value of attribute merge_functions.



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

def merge_functions
  @merge_functions
end

#passesObject

Returns the value of attribute passes.



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

def passes
  @passes
end

Instance Method Details

#adce!Object

Aggressive Dead Code Elimination



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

def adce!
  add_pass('adce')
end

#add_discriminators!Object



352
353
354
# File 'lib/llvm/pass_builder.rb', line 352

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

#add_function_passObject



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

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

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

#add_pass(pass) ⇒ Object

: (String) -> self



66
67
68
69
# File 'lib/llvm/pass_builder.rb', line 66

def add_pass(pass)
  passes << pass
  self
end

#alignment_from_assumptions!Object



145
146
147
# File 'lib/llvm/pass_builder.rb', line 145

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

#always_inline!Object



409
410
411
# File 'lib/llvm/pass_builder.rb', line 409

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

#argpromotion!Object Also known as: arg_promote!



550
551
552
# File 'lib/llvm/pass_builder.rb', line 550

def argpromotion!
  add_pass('argpromotion')
end

#asan!(options = {}) ⇒ Object



594
595
596
597
# File 'lib/llvm/pass_builder.rb', line 594

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

#atomic_expand!Object



703
704
705
# File 'lib/llvm/pass_builder.rb', line 703

def atomic_expand!
  add_pass('atomic-expand')
end

#basic_aa!Object Also known as: basicaa!



367
368
369
# File 'lib/llvm/pass_builder.rb', line 367

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

#bb_vectorize!Object



678
679
680
681
# File 'lib/llvm/pass_builder.rb', line 678

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



537
538
539
# File 'lib/llvm/pass_builder.rb', line 537

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



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

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

#consthoist!Object

This optimization is only applied to integer constants in instructions and simple (this means not nested) constant cast expressions llvm.org/doxygen/ConstantHoisting_8cpp_source.html : -> self



764
765
766
# File 'lib/llvm/pass_builder.rb', line 764

def consthoist!
  add_pass('consthoist')
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



458
459
460
# File 'lib/llvm/pass_builder.rb', line 458

def constmerge!
  add_pass('constmerge')
end

#constprop!Object



683
684
685
# File 'lib/llvm/pass_builder.rb', line 683

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

#correlated_propagation!Object



332
333
334
# File 'lib/llvm/pass_builder.rb', line 332

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

#cvprop!Object



327
328
329
# File 'lib/llvm/pass_builder.rb', line 327

def cvprop!
  correlated_propagation!
end

#dce!Object



72
73
74
# File 'lib/llvm/pass_builder.rb', line 72

def dce!
  add_pass('dce')
end

#deadargelim!Object Also known as: dae!



448
449
450
# File 'lib/llvm/pass_builder.rb', line 448

def deadargelim!
  add_pass('deadargelim')
end

#dfsan!Object



614
615
616
# File 'lib/llvm/pass_builder.rb', line 614

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



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

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



291
292
293
# File 'lib/llvm/pass_builder.rb', line 291

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

#early_cse_memssa!Object



299
300
301
# File 'lib/llvm/pass_builder.rb', line 299

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

#expand_variadics!Object



687
688
689
# File 'lib/llvm/pass_builder.rb', line 687

def expand_variadics!
  add_pass('expand-variadics')
end

#function_attrs!Object Also known as: fun_attrs!



471
472
473
# File 'lib/llvm/pass_builder.rb', line 471

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

#global_opt!Object



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

def global_opt!
  add_pass('globalopt')
end

#globaldce!Object Also known as: gdce!

Global Dead Code Elimination TODO: takes params



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

def globaldce!
  add_pass('globaldce')
end

#gobals_aa!Object



394
395
396
# File 'lib/llvm/pass_builder.rb', line 394

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



109
110
111
# File 'lib/llvm/pass_builder.rb', line 109

def gvn!
  add_pass('gvn')
end

#gvn_hoist!Object

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



123
124
125
# File 'lib/llvm/pass_builder.rb', line 123

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

#gvn_sink!Object

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



130
131
132
# File 'lib/llvm/pass_builder.rb', line 130

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

#hwasan!(_options = {}) ⇒ Object



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

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

#indvars!Object



140
141
142
# File 'lib/llvm/pass_builder.rb', line 140

def indvars!
  add_pass('indvars')
end

#inline!Object



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

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



211
212
213
# File 'lib/llvm/pass_builder.rb', line 211

def instcombine!
  add_pass('instcombine')
end

#instsimplify!Object



216
217
218
# File 'lib/llvm/pass_builder.rb', line 216

def instsimplify!
  add_pass('instsimplify')
end

#internalize!(preserve_gv = []) ⇒ Object

preserve_gv - true / false to support previous option of all_but_main otherwise preserve_gv is assumed to be an array of global variable names internalize<preserve-gv=GV> tests showing usage: github.com/llvm/llvm-project/blob/a4b429f9e4175a06cc95f054c5dab3d4bc8fa690/llvm/test/Transforms/Internalize/lists.ll#L17



494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
# File 'lib/llvm/pass_builder.rb', line 494

def internalize!(preserve_gv = [])
  preserved = case preserve_gv
  when true
    ['main']
  when false
    []
  else
    preserve_gv
  end
  preserved_string = preserved.map { |gv| "preserve-gv=#{gv}" }.join(';')

  if preserved_string.empty?
    add_pass('internalize')
  else
    add_pass("internalize<#{preserved_string}>")
  end
end

#ipcp!Object



648
649
650
# File 'lib/llvm/pass_builder.rb', line 648

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



517
518
519
# File 'lib/llvm/pass_builder.rb', line 517

def ipsccp!
  add_pass('ipsccp')
end

#jump_table_to_switch!Object



707
708
709
# File 'lib/llvm/pass_builder.rb', line 707

def jump_table_to_switch!
  add_pass('jump-table-to-switch')
end

#jump_threading!Object



135
136
137
# File 'lib/llvm/pass_builder.rb', line 135

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

#lcssa!Object



304
305
306
# File 'lib/llvm/pass_builder.rb', line 304

def lcssa!
  add_pass('lcssa')
end

#licm!Object



77
78
79
# File 'lib/llvm/pass_builder.rb', line 77

def licm!
  add_pass('licm')
end

#loop_deletion!Object



150
151
152
# File 'lib/llvm/pass_builder.rb', line 150

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

#loop_idiom!Object



155
156
157
# File 'lib/llvm/pass_builder.rb', line 155

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

#loop_idiom_vectorize!Object



741
742
743
# File 'lib/llvm/pass_builder.rb', line 741

def loop_idiom_vectorize!
  add_pass('loop-idiom-vectorize')
end

#loop_reroll!Object



165
166
167
# File 'lib/llvm/pass_builder.rb', line 165

def loop_reroll!
  deprecated('loop-reroll pass was removed in LLVM 19')
end

#loop_rotate!Object



160
161
162
# File 'lib/llvm/pass_builder.rb', line 160

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

#loop_unroll!Object



170
171
172
# File 'lib/llvm/pass_builder.rb', line 170

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

#loop_unroll_and_jam!Object



175
176
177
# File 'lib/llvm/pass_builder.rb', line 175

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

#loop_unswitch!Object



185
186
187
# File 'lib/llvm/pass_builder.rb', line 185

def loop_unswitch!
  simple_loop_unswitch!
end

#loop_vectorize!Object

TODO: takes params



191
192
193
# File 'lib/llvm/pass_builder.rb', line 191

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

#lower_allow_check!Object



711
712
713
# File 'lib/llvm/pass_builder.rb', line 711

def lower_allow_check!
  add_pass('lower-allow-check')
end

#lower_atomic!Object Also known as: loweratomic!



221
222
223
# File 'lib/llvm/pass_builder.rb', line 221

def lower_atomic!
  add_pass('lower-atomic')
end

#lower_constant_intrinsics!Object



337
338
339
# File 'lib/llvm/pass_builder.rb', line 337

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

#lower_expect!Object



322
323
324
# File 'lib/llvm/pass_builder.rb', line 322

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

#lower_guard_intrinsic!Object



721
722
723
# File 'lib/llvm/pass_builder.rb', line 721

def lower_guard_intrinsic!
  add_pass('lower-guard-intrinsic')
end

#lower_invoke!Object Also known as: lowerinvoke!



715
716
717
# File 'lib/llvm/pass_builder.rb', line 715

def lower_invoke!
  add_pass('lower-invoke')
end

#lower_switch!Object Also known as: lowerswitch!



399
400
401
# File 'lib/llvm/pass_builder.rb', line 399

def lower_switch!
  add_pass('lower-switch')
end

#lower_widenable_condition!Object



725
726
727
# File 'lib/llvm/pass_builder.rb', line 725

def lower_widenable_condition!
  add_pass('lower-widenable-condition')
end

#mem2reg!Object



247
248
249
# File 'lib/llvm/pass_builder.rb', line 247

def mem2reg!
  add_pass('mem2reg')
end

#memcpyopt!Object



196
197
198
# File 'lib/llvm/pass_builder.rb', line 196

def memcpyopt!
  add_pass('memcpyopt')
end

#memoryssa!Object



309
310
311
# File 'lib/llvm/pass_builder.rb', line 309

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

#mergefunc!Object



429
430
431
# File 'lib/llvm/pass_builder.rb', line 429

def mergefunc!
  add_pass('mergefunc')
end

#mergeicmps!Object



362
363
364
# File 'lib/llvm/pass_builder.rb', line 362

def mergeicmps!
  add_pass('mergeicmps')
end

#mergereturn!Object



357
358
359
# File 'lib/llvm/pass_builder.rb', line 357

def mergereturn!
  add_pass('mergereturn')
end

#mldst_motion!Object

Merged Load Store Motion



101
102
103
# File 'lib/llvm/pass_builder.rb', line 101

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

#module_summary!Object



257
258
259
# File 'lib/llvm/pass_builder.rb', line 257

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.



606
607
608
609
# File 'lib/llvm/pass_builder.rb', line 606

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



116
117
118
# File 'lib/llvm/pass_builder.rb', line 116

def newgvn!
  add_pass('newgvn')
end

#no_op_cgscc!Object



267
268
269
# File 'lib/llvm/pass_builder.rb', line 267

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

#no_op_function!Object



272
273
274
# File 'lib/llvm/pass_builder.rb', line 272

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

#no_op_module!Object



262
263
264
# File 'lib/llvm/pass_builder.rb', line 262

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

#normalize!Object



745
746
747
# File 'lib/llvm/pass_builder.rb', line 745

def normalize!
  add_pass('normalize')
end

#nsan!Object



695
696
697
# File 'lib/llvm/pass_builder.rb', line 695

def nsan!
  add_pass('nsan')
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



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

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



374
375
376
# File 'lib/llvm/pass_builder.rb', line 374

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



420
421
422
# File 'lib/llvm/pass_builder.rb', line 420

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

#partially_inline_libcalls!Object



227
228
229
# File 'lib/llvm/pass_builder.rb', line 227

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

#pass_stringObject



644
645
646
# File 'lib/llvm/pass_builder.rb', line 644

def pass_string
  passes.join(',')
end

#pgo_force_function_attrs!Object



691
692
693
# File 'lib/llvm/pass_builder.rb', line 691

def pgo_force_function_attrs!
  add_pass('pgo-force-function-attrs')
end

#pre_isel_intrinsic_lowering!Object



699
700
701
# File 'lib/llvm/pass_builder.rb', line 699

def pre_isel_intrinsic_lowering!
  add_pass('pre-isel-intrinsic-lowering')
end

#prune_eh!Object



652
653
654
# File 'lib/llvm/pass_builder.rb', line 652

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

#reassociate!Object



232
233
234
# File 'lib/llvm/pass_builder.rb', line 232

def reassociate!
  add_pass('reassociate')
end

#reg2mem!Object



242
243
244
# File 'lib/llvm/pass_builder.rb', line 242

def reg2mem!
  add_pass('reg2mem')
end

#rtsan!Object



751
752
753
# File 'lib/llvm/pass_builder.rb', line 751

def rtsan!
  add_pass('rtsan')
end

#run(mod, target) ⇒ Object



630
631
632
633
634
635
636
637
638
639
640
641
642
# File 'lib/llvm/pass_builder.rb', line 630

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



620
621
622
# File 'lib/llvm/pass_builder.rb', line 620

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

#sanmd_module!Object



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

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

#scalarizer!Object



95
96
97
# File 'lib/llvm/pass_builder.rb', line 95

def scalarizer!
  add_pass('scalarizer')
end

#scalarrepl!Object



661
662
663
664
# File 'lib/llvm/pass_builder.rb', line 661

def scalarrepl!
  deprecated('scalarrepl was removed from LLVM in 2016 - use sroa')
  sroa!
end

#scalarrepl_ssa!Object



667
668
669
670
# File 'lib/llvm/pass_builder.rb', line 667

def scalarrepl_ssa!
  deprecated('scalarrepl_ssa was removed from LLVM in 2016 - use sroa')
  sroa!
end

#scalarrepl_threshold!(_threshold = 0) ⇒ Object



673
674
675
676
# File 'lib/llvm/pass_builder.rb', line 673

def scalarrepl_threshold!(_threshold = 0)
  deprecated('scalarrepl_threshold was removed from LLVM in 2016 - use sroa')
  sroa!
end

#sccp!Object



201
202
203
# File 'lib/llvm/pass_builder.rb', line 201

def sccp!
  add_pass('sccp')
end

#scev_aa!Object



379
380
381
# File 'lib/llvm/pass_builder.rb', line 379

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

#scoped_noalias_aa!Object



384
385
386
# File 'lib/llvm/pass_builder.rb', line 384

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

#simple_loop_unswitch!Object



180
181
182
# File 'lib/llvm/pass_builder.rb', line 180

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

#simplify_libcalls!Object



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

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>



90
91
92
# File 'lib/llvm/pass_builder.rb', line 90

def simplifycfg!
  add_pass('simplifycfg')
end

#slp_vectorize!Object



342
343
344
# File 'lib/llvm/pass_builder.rb', line 342

def slp_vectorize!
  slp_vectorizer!
end

#slp_vectorizer!Object



347
348
349
# File 'lib/llvm/pass_builder.rb', line 347

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

#sroa!Object



317
318
319
# File 'lib/llvm/pass_builder.rb', line 317

def sroa!
  add_pass('sroa')
end

#stack_safety!Object



277
278
279
# File 'lib/llvm/pass_builder.rb', line 277

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

#strip!Object



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

def strip!
  add_pass('strip')
end

#strip_dead_prototypes!Object Also known as: sdp!



483
484
485
# File 'lib/llvm/pass_builder.rb', line 483

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

#tailcallelim!Object



237
238
239
# File 'lib/llvm/pass_builder.rb', line 237

def tailcallelim!
  add_pass('tailcallelim')
end

#tbaa!Object



389
390
391
# File 'lib/llvm/pass_builder.rb', line 389

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

#transform_warning!Object



729
730
731
# File 'lib/llvm/pass_builder.rb', line 729

def transform_warning!
  add_pass('transform-warning')
end

#trigger_crash_function!Object



733
734
735
# File 'lib/llvm/pass_builder.rb', line 733

def trigger_crash_function!
  add_pass('trigger-crash-function')
end

#trigger_verifier_error!Object



737
738
739
# File 'lib/llvm/pass_builder.rb', line 737

def trigger_verifier_error!
  add_pass('trigger-verifier-error')
end

#tsan!Object



568
569
570
# File 'lib/llvm/pass_builder.rb', line 568

def tsan!
  add_pass('tsan')
end

#tsan_module!Object

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



575
576
577
# File 'lib/llvm/pass_builder.rb', line 575

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

#tysan!Object



756
757
758
# File 'lib/llvm/pass_builder.rb', line 756

def tysan!
  add_pass('tysan')
end

#verify!Object



252
253
254
# File 'lib/llvm/pass_builder.rb', line 252

def verify!
  add_pass('verify')
end