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 // Passes removed: coro, openmp, sroa #if LLVM_VERSION_MAJOR == 17 array_add(&passes, u8R"( annotation2metadata, forceattrs, inferattrs, function( lower-expect, simplifycfg, early-cse<> ), ipsccp, called-value-propagation, globalopt, function( mem2reg, instcombine, simplifycfg ), require, function( invalidate ), require, cgscc( devirt<4>( inline, inline, function-attrs, function( early-cse, speculative-execution, jump-threading, correlated-propagation, simplifycfg, instcombine, aggressive-instcombine, constraint-elimination, tailcallelim, simplifycfg, reassociate, loop-mssa( loop-instsimplify, loop-simplifycfg, licm, loop-rotate, licm, simple-loop-unswitch ), simplifycfg, instcombine, loop( loop-idiom, indvars, loop-deletion, loop-unroll-full ), vector-combine, mldst-motion, gvn<>, sccp, bdce, instcombine, jump-threading, correlated-propagation, adce, memcpyopt, dse, move-auto-init, loop-mssa( licm ), simplifycfg, instcombine ), function-attrs, function( require ) ) ), deadargelim, globalopt, globaldce, elim-avail-extern, rpo-function-attrs, recompute-globalsaa, function( float2int, lower-constant-intrinsics, loop( loop-rotate, loop-deletion ), loop-distribute, inject-tli-mappings, loop-vectorize, loop-load-elim, instcombine, simplifycfg, slp-vectorizer, vector-combine, instcombine, loop-unroll, transform-warning, instcombine, loop-mssa( licm ), alignment-from-assumptions, loop-sink, instsimplify, div-rem-pairs, tailcallelim, simplifycfg ), globaldce, constmerge, cg-profile, rel-lookup-table-converter, function( annotation-remarks ), verify )"); #elif LLVM_VERSION_MAJOR < 20 array_add(&passes, u8R"( annotation2metadata, forceattrs, inferattrs, function( lower-expect, simplifycfg, sroa, early-cse<> ), ipsccp, called-value-propagation, globalopt, function( mem2reg, instcombine, simplifycfg ), always-inline, require, function( invalidate ), require, cgscc( devirt<4>( inline, function-attrs, function( sroa, early-cse, speculative-execution, jump-threading, correlated-propagation, simplifycfg, instcombine, aggressive-instcombine, tailcallelim, simplifycfg, reassociate, constraint-elimination, loop-mssa( loop-instsimplify, loop-simplifycfg, licm, loop-rotate, licm, simple-loop-unswitch ), simplifycfg, instcombine, loop( loop-idiom, indvars, loop-deletion, loop-unroll-full ), sroa, vector-combine, mldst-motion, gvn<>, sccp, bdce, instcombine, jump-threading, correlated-propagation, adce, memcpyopt, dse, move-auto-init, loop-mssa( licm ), simplifycfg, instcombine ), function-attrs, function( require ) ) ), deadargelim, globalopt, globaldce, elim-avail-extern, rpo-function-attrs, recompute-globalsaa, function( float2int, lower-constant-intrinsics, loop( loop-rotate, loop-deletion ), loop-distribute, inject-tli-mappings, loop-vectorize, infer-alignment, loop-load-elim, instcombine, simplifycfg, slp-vectorizer, vector-combine, instcombine, loop-unroll, transform-warning, sroa, infer-alignment, instcombine, loop-mssa( licm ), alignment-from-assumptions, loop-sink, instsimplify, div-rem-pairs, tailcallelim, simplifycfg ), globaldce, constmerge, cg-profile, rel-lookup-table-converter, function( annotation-remarks ), verify )"); #else array_add(&passes, u8R"( annotation2metadata, forceattrs, inferattrs, function( ee-instrument<>, lower-expect, simplifycfg, sroa, early-cse<> ), ipsccp, called-value-propagation, globalopt, function( mem2reg, instcombine, simplifycfg ), always-inline, require, function( invalidate ), require, cgscc( devirt<4>( inline, function-attrs, function( sroa, early-cse, speculative-execution, jump-threading, correlated-propagation, simplifycfg, instcombine, aggressive-instcombine, tailcallelim, simplifycfg, reassociate, constraint-elimination, loop-mssa( loop-instsimplify, loop-simplifycfg, licm, loop-rotate, licm, simple-loop-unswitch ), simplifycfg, instcombine, loop( loop-idiom, indvars, extra-simple-loop-unswitch-passes, loop-deletion,loop-unroll-full ), sroa, vector-combine, mldst-motion, gvn<>, sccp, bdce, instcombine, jump-threading, correlated-propagation, adce, memcpyopt, dse, move-auto-init, loop-mssa( licm ), simplifycfg, instcombine ), function-attrs, function( require ) ) ), deadargelim, globalopt, globaldce, elim-avail-extern, rpo-function-attrs, recompute-globalsaa, function( float2int, lower-constant-intrinsics, loop( loop-rotate, loop-deletion ), loop-distribute, inject-tli-mappings, loop-vectorize, infer-alignment, loop-load-elim, instcombine, simplifycfg, slp-vectorizer, vector-combine, instcombine, loop-unroll, transform-warning, sroa, infer-alignment, instcombine, loop-mssa( licm ), alignment-from-assumptions, loop-sink, instsimplify, div-rem-pairs, tailcallelim, simplifycfg ), globaldce, constmerge, cg-profile, rel-lookup-table-converter, function( annotation-remarks ), verify )"); #endif break; // default // Passes removed: coro, openmp, sroa case 2: #if LLVM_VERSION_MAJOR == 17 array_add(&passes, u8R"( annotation2metadata, forceattrs, inferattrs, function( lower-expect, simplifycfg, early-cse<> ), ipsccp, called-value-propagation, globalopt, function( mem2reg, instcombine, simplifycfg ), require, function( invalidate ), require, cgscc( devirt<4>( inline, inline, function-attrs, function( early-cse, speculative-execution, jump-threading, correlated-propagation, simplifycfg, instcombine, aggressive-instcombine, constraint-elimination, libcalls-shrinkwrap, tailcallelim, simplifycfg, reassociate, loop-mssa( loop-instsimplify, loop-simplifycfg, licm, loop-rotate, licm, simple-loop-unswitch ), simplifycfg, instcombine, loop( loop-idiom, indvars, loop-deletion, loop-unroll-full ), vector-combine, mldst-motion, gvn<>, sccp, bdce, instcombine, jump-threading, correlated-propagation, adce, memcpyopt, dse, move-auto-init, loop-mssa( licm ), simplifycfg, instcombine ), function-attrs, function( require ) ) ), deadargelim, globalopt, globaldce, elim-avail-extern, rpo-function-attrs, recompute-globalsaa, function( float2int, lower-constant-intrinsics, loop( loop-rotate, loop-deletion ), loop-distribute, inject-tli-mappings, loop-vectorize, loop-load-elim, instcombine, simplifycfg, slp-vectorizer, vector-combine, instcombine, loop-unroll, transform-warning, instcombine, loop-mssa( licm ), alignment-from-assumptions, loop-sink, instsimplify, div-rem-pairs, tailcallelim, simplifycfg ), globaldce, constmerge, cg-profile, rel-lookup-table-converter, function( annotation-remarks ), verify )"); #elif LLVM_VERSION_MAJOR < 20 array_add(&passes, u8R"( annotation2metadata, forceattrs, inferattrs, function( lower-expect, simplifycfg, sroa, early-cse<> ), ipsccp, called-value-propagation, globalopt, function( mem2reg, instcombine, simplifycfg ), always-inline, require, function( invalidate ), require, cgscc( devirt<4>( inline, function-attrs, function( sroa, early-cse, speculative-execution, jump-threading, correlated-propagation, simplifycfg, instcombine, aggressive-instcombine, libcalls-shrinkwrap, tailcallelim, simplifycfg, reassociate, constraint-elimination, loop-mssa( loop-instsimplify, loop-simplifycfg, licm, loop-rotate, licm, simple-loop-unswitch ), simplifycfg, instcombine, loop( loop-idiom, indvars, loop-deletion, loop-unroll-full ), sroa, vector-combine, mldst-motion, gvn<>, sccp, bdce, instcombine, jump-threading, correlated-propagation, adce, memcpyopt, dse, move-auto-init, loop-mssa( licm ), simplifycfg, instcombine ), function-attrs, function( require ) ) ), deadargelim, globalopt, globaldce, elim-avail-extern, rpo-function-attrs, recompute-globalsaa, function( float2int, lower-constant-intrinsics, loop( loop-rotate, loop-deletion ), loop-distribute, inject-tli-mappings, loop-vectorize, infer-alignment, loop-load-elim, instcombine, simplifycfg, slp-vectorizer, vector-combine, instcombine, loop-unroll, transform-warning, sroa, infer-alignment, instcombine, loop-mssa( licm ), alignment-from-assumptions, loop-sink, instsimplify, div-rem-pairs, tailcallelim, simplifycfg ), globaldce, constmerge, cg-profile, rel-lookup-table-converter, function( annotation-remarks ), verify )"); #else array_add(&passes, u8R"( annotation2metadata, forceattrs, inferattrs, function( ee-instrument<>, lower-expect, simplifycfg, sroa, early-cse<> ), ipsccp, called-value-propagation, globalopt, function( mem2reg, instcombine, simplifycfg ), always-inline, require, function( invalidate ), require, cgscc( devirt<4>( inline, function-attrs, function( sroa, early-cse, speculative-execution, jump-threading, correlated-propagation, simplifycfg, instcombine, aggressive-instcombine, libcalls-shrinkwrap, tailcallelim, simplifycfg, reassociate, constraint-elimination, loop-mssa( loop-instsimplify, loop-simplifycfg, licm, loop-rotate, licm, simple-loop-unswitch ), simplifycfg, instcombine, loop( loop-idiom, indvars, extra-simple-loop-unswitch-passes, loop-deletion, loop-unroll-full ), sroa, vector-combine, mldst-motion, gvn<>, sccp, bdce, instcombine, jump-threading, correlated-propagation, adce, memcpyopt, dse, move-auto-init, loop-mssa( licm ), simplifycfg, instcombine ), function-attrs, function( require ) ) ), deadargelim, globalopt, globaldce, elim-avail-extern, rpo-function-attrs, recompute-globalsaa, function( float2int, lower-constant-intrinsics, loop( loop-rotate, loop-deletion ), loop-distribute, inject-tli-mappings, loop-vectorize, infer-alignment, loop-load-elim, instcombine, simplifycfg, slp-vectorizer, vector-combine, instcombine, loop-unroll, transform-warning, sroa, infer-alignment, instcombine, loop-mssa( licm ), alignment-from-assumptions, loop-sink, instsimplify, div-rem-pairs, tailcallelim, simplifycfg ), globaldce, constmerge, cg-profile, rel-lookup-table-converter, function( annotation-remarks ), verify )"); #endif break; case 3: // default // Passes removed: coro, openmp, sroa #if LLVM_VERSION_MAJOR == 17 array_add(&passes, u8R"( annotation2metadata, forceattrs, inferattrs, function( lower-expect, simplifycfg, early-cse<>, callsite-splitting ), ipsccp, called-value-propagation, globalopt, function( mem2reg, instcombine, simplifycfg ), require, function( invalidate ), require, cgscc( devirt<4>( inline, inline, function-attrs, argpromotion, function( early-cse, speculative-execution, jump-threading, correlated-propagation, simplifycfg, instcombine, aggressive-instcombine, constraint-elimination, libcalls-shrinkwrap, tailcallelim, simplifycfg, reassociate, loop-mssa( loop-instsimplify, loop-simplifycfg, licm, loop-rotate, licm, simple-loop-unswitch ), simplifycfg, instcombine, loop( loop-idiom, indvars, loop-deletion, loop-unroll-full ), vector-combine, mldst-motion, gvn<>, sccp, bdce, instcombine, jump-threading, correlated-propagation, adce, memcpyopt, dse, move-auto-init, loop-mssa( licm ), simplifycfg, instcombine ), function-attrs, function( require ) ) ), deadargelim, globalopt, globaldce, elim-avail-extern, rpo-function-attrs, recompute-globalsaa, function( float2int, lower-constant-intrinsics, chr, loop( loop-rotate, loop-deletion ), loop-distribute, inject-tli-mappings, loop-vectorize, loop-load-elim, instcombine, simplifycfg, slp-vectorizer, vector-combine, instcombine, loop-unroll, transform-warning, instcombine, loop-mssa( licm ), alignment-from-assumptions, loop-sink, instsimplify, div-rem-pairs, tailcallelim, simplifycfg ), globaldce, constmerge, cg-profile, rel-lookup-table-converter, function( annotation-remarks ), verify )"); #elif LLVM_VERSION_MAJOR < 20 array_add(&passes, u8R"( annotation2metadata, forceattrs, inferattrs, function( lower-expect, simplifycfg, sroa, early-cse<>, callsite-splitting ), ipsccp, called-value-propagation, globalopt, function( mem2reg, instcombine, simplifycfg ), always-inline, require, function(invalidate), require, cgscc( devirt<4>( inline, function-attrs, argpromotion, function( sroa, early-cse, speculative-execution, jump-threading, correlated-propagation, simplifycfg, instcombine, aggressive-instcombine, libcalls-shrinkwrap, tailcallelim, simplifycfg, reassociate, constraint-elimination, loop-mssa( loop-instsimplify, loop-simplifycfg, licm, loop-rotate, licm, simple-loop-unswitch ), simplifycfg, instcombine, loop( loop-idiom, indvars, loop-deletion, loop-unroll-full ), sroa, vector-combine, mldst-motion, gvn<>, sccp, bdce, instcombine, jump-threading, correlated-propagation, adce, memcpyopt, dse, move-auto-init, loop-mssa(licm), simplifycfg, instcombine ), function-attrs, function( require ) ) ), deadargelim, globalopt, globaldce, elim-avail-extern, rpo-function-attrs, recompute-globalsaa, function( float2int, lower-constant-intrinsics, chr, loop( loop-rotate, loop-deletion ), loop-distribute, inject-tli-mappings, loop-vectorize, infer-alignment, loop-load-elim, instcombine, simplifycfg, slp-vectorizer, vector-combine, instcombine, loop-unroll, transform-warning, sroa, infer-alignment, instcombine, loop-mssa(licm), alignment-from-assumptions, loop-sink, instsimplify, div-rem-pairs, tailcallelim, simplifycfg ), globaldce, constmerge, cg-profile, rel-lookup-table-converter, function( annotation-remarks ), verify )"); #else array_add(&passes, u8R"( annotation2metadata, forceattrs, inferattrs, function( ee-instrument<>, lower-expect, simplifycfg, sroa, early-cse<>, callsite-splitting ), ipsccp, called-value-propagation, globalopt, function( mem2reg, instcombine, simplifycfg ), always-inline, require, function( invalidate ), require, cgscc( devirt<4>( inline, function-attrs, argpromotion, function( sroa, early-cse, speculative-execution, jump-threading, correlated-propagation, simplifycfg, instcombine, aggressive-instcombine, libcalls-shrinkwrap, tailcallelim, simplifycfg, reassociate, constraint-elimination, loop-mssa( loop-instsimplify, loop-simplifycfg, licm, loop-rotate, licm, simple-loop-unswitch ), simplifycfg, instcombine, loop( loop-idiom, indvars, extra-simple-loop-unswitch-passes, loop-deletion, loop-unroll-full ), sroa, vector-combine, mldst-motion, gvn<>, sccp, bdce, instcombine, jump-threading, correlated-propagation, adce, memcpyopt, dse, move-auto-init, loop-mssa( licm ), simplifycfg, instcombine ), function-attrs, function( require ) ) ), deadargelim, globalopt, globaldce, elim-avail-extern, rpo-function-attrs, recompute-globalsaa, function( float2int, lower-constant-intrinsics, chr, loop( loop-rotate, loop-deletion ), loop-distribute, inject-tli-mappings, loop-vectorize, infer-alignment, loop-load-elim, instcombine, simplifycfg, slp-vectorizer, vector-combine, instcombine, loop-unroll, transform-warning, sroa, infer-alignment, instcombine, loop-mssa( licm ), alignment-from-assumptions, loop-sink, instsimplify, div-rem-pairs, tailcallelim, simplifycfg ), globaldce, constmerge, cg-profile, rel-lookup-table-converter, function( annotation-remarks ), verify )"); #endif break; }