diff options
Diffstat (limited to 'src/llvm_backend.cpp')
| -rw-r--r-- | src/llvm_backend.cpp | 807 |
1 files changed, 10 insertions, 797 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index fefab6e67..c3afac115 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1591,797 +1591,7 @@ gb_internal WORKER_TASK_PROC(lb_llvm_module_pass_worker_proc) { LLVMPassBuilderOptionsRef pb_options = LLVMCreatePassBuilderOptions(); defer (LLVMDisposePassBuilderOptions(pb_options)); - switch (build_context.optimization_level) { - case -1: - array_add(&passes, "function(annotation-remarks)"); - break; - case 0: - array_add(&passes, "always-inline"); - array_add(&passes, "function(annotation-remarks)"); - break; - case 1: -// default<Os> -// Passes removed: coro, openmp, sroa -#if LLVM_VERSION_MAJOR == 17 - array_add(&passes, u8R"( -annotation2metadata, -forceattrs, -inferattrs, -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>, - early-cse<> -), -ipsccp, -called-value-propagation, -globalopt, -function<eager-inv>( - mem2reg, - instcombine<max-iterations=1000;no-use-loop-info>, - 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> -), -require<globals-aa>, -function( - invalidate<aa> -), -require<profile-summary>, -cgscc( - devirt<4>( - inline<only-mandatory>, - inline, - function-attrs<skip-non-recursive>, - function<eager-inv;no-rerun>( - early-cse<memssa>, - speculative-execution, - 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=1000;no-use-loop-info>, - aggressive-instcombine, - constraint-elimination, - 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, - 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=1000;no-use-loop-info>, - loop( - loop-idiom, - indvars, - loop-deletion, - loop-unroll-full - ), - vector-combine, - mldst-motion<no-split-footer-bb>, - gvn<>, - sccp, - bdce, - instcombine<max-iterations=1000;no-use-loop-info>, - jump-threading, - correlated-propagation, - adce, - memcpyopt, - dse, - move-auto-init, - loop-mssa( - licm<allowspeculation> - ), - 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=1000;no-use-loop-info> - ), - function-attrs, - function( - require<should-not-run-function-passes> - ) - ) -), -deadargelim, -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;>, - loop-load-elim, - instcombine<max-iterations=1000;no-use-loop-info>, - 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=1000;no-use-loop-info>, - loop-unroll<O2>, - transform-warning, - instcombine<max-iterations=1000;no-use-loop-info>, - 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 -)"); -#else - array_add(&passes, u8R"( -annotation2metadata, -forceattrs, -inferattrs, -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<> -), -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> - ), - 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> - ) - ) -), -deadargelim, -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 -)"); -#endif - break; -// default<O2> -// Passes removed: coro, openmp, sroa - case 2: -#if LLVM_VERSION_MAJOR == 17 - array_add(&passes, u8R"( -annotation2metadata, -forceattrs, -inferattrs, -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>, - early-cse<> -), -ipsccp, -called-value-propagation, -globalopt, -function<eager-inv>( - mem2reg, - instcombine<max-iterations=1000;no-use-loop-info>, - 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> -), -require<globals-aa>, -function( - invalidate<aa> -), -require<profile-summary>, -cgscc( - devirt<4>( - inline<only-mandatory>, - inline, - function-attrs<skip-non-recursive>, - function<eager-inv;no-rerun>( - early-cse<memssa>, - speculative-execution, - 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=1000;no-use-loop-info>, - aggressive-instcombine, - constraint-elimination, - 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, - 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=1000;no-use-loop-info>, - loop( - loop-idiom, - indvars, - loop-deletion, - loop-unroll-full - ), - vector-combine, - mldst-motion<no-split-footer-bb>, - gvn<>, - sccp, - bdce, - instcombine<max-iterations=1000;no-use-loop-info>, - jump-threading, - correlated-propagation, - adce, - memcpyopt, - dse, - move-auto-init, - loop-mssa( - licm<allowspeculation> - ), - 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=1000;no-use-loop-info> - ), - function-attrs, - function( - require<should-not-run-function-passes> - ) - ) -), -deadargelim, -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;>, - loop-load-elim, - instcombine<max-iterations=1000;no-use-loop-info>, - 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=1000;no-use-loop-info>, - loop-unroll<O2>, - transform-warning, - instcombine<max-iterations=1000;no-use-loop-info>, - 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 -)"); -#else - array_add(&passes, u8R"( -annotation2metadata, -forceattrs, -inferattrs, -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<> -), -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, - 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> - ), - 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> - ) - ) -), -deadargelim, -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<modify-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 -)"); -#endif - break; - - case 3: -// default<O3> -// Passes removed: coro, openmp, sroa -#if LLVM_VERSION_MAJOR == 17 - array_add(&passes, u8R"( -annotation2metadata, -forceattrs, -inferattrs, -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>, - early-cse<>, - callsite-splitting -), -ipsccp, -called-value-propagation, -globalopt, -function<eager-inv>( - mem2reg, - instcombine<max-iterations=1000;no-use-loop-info>, - 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> -), -require<globals-aa>, -function( - invalidate<aa> -), -require<profile-summary>, -cgscc( - devirt<4>( - inline<only-mandatory>, - inline, - function-attrs<skip-non-recursive>, - argpromotion, - function<eager-inv;no-rerun>( - early-cse<memssa>, - speculative-execution, - 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=1000;no-use-loop-info>, - aggressive-instcombine, - constraint-elimination, - 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, - 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=1000;no-use-loop-info>, - loop( - loop-idiom, - indvars, - loop-deletion, - loop-unroll-full - ), - vector-combine, - mldst-motion<no-split-footer-bb>, - gvn<>, - sccp, - bdce, - instcombine<max-iterations=1000;no-use-loop-info>, - jump-threading, - correlated-propagation, - adce, - memcpyopt, - dse, - move-auto-init, - loop-mssa( - licm<allowspeculation> - ), - 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=1000;no-use-loop-info> - ), - function-attrs, - function( - require<should-not-run-function-passes> - ) - ) -), -deadargelim, -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;>, - loop-load-elim, - instcombine<max-iterations=1000;no-use-loop-info>, - 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=1000;no-use-loop-info>, - loop-unroll<O3>, - transform-warning, - instcombine<max-iterations=1000;no-use-loop-info>, - 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 -)"); -#else - array_add(&passes, u8R"( -annotation2metadata, -forceattrs, -inferattrs, -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 -), -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, - 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>), - 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> - ) - ) -), -deadargelim, -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 -)"); -#endif - break; - } + #include "llvm_backend_passes.cpp" // asan - Linux, Darwin, Windows // msan - linux @@ -2958,13 +2168,16 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { LLVMInitializeWebAssemblyAsmParser(); LLVMInitializeWebAssemblyDisassembler(); break; + case TargetArch_riscv64: + LLVMInitializeRISCVTargetInfo(); + LLVMInitializeRISCVTarget(); + LLVMInitializeRISCVTargetMC(); + LLVMInitializeRISCVAsmPrinter(); + LLVMInitializeRISCVAsmParser(); + LLVMInitializeRISCVDisassembler(); + break; default: - LLVMInitializeAllTargetInfos(); - LLVMInitializeAllTargets(); - LLVMInitializeAllTargetMCs(); - LLVMInitializeAllAsmPrinters(); - LLVMInitializeAllAsmParsers(); - LLVMInitializeAllDisassemblers(); + GB_PANIC("Unimplemented LLVM target initialization"); break; } |