mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-13 18:15:49 +00:00
add LLVM 22 support to optimisation pass pipelines
This commit is contained in:
@@ -266,7 +266,7 @@ function(
|
||||
),
|
||||
verify
|
||||
)");
|
||||
#else // LLVM 20 & 21 (same config)
|
||||
#elif LLVM_VERSION_MAJOR < 22 // LLVM 20 & 21 (same config)
|
||||
array_add(&passes, u8R"(
|
||||
annotation2metadata,
|
||||
forceattrs,
|
||||
@@ -398,6 +398,144 @@ function(
|
||||
verify
|
||||
)");
|
||||
|
||||
#else // LLVM 22
|
||||
// Passes removed: coro, openmp
|
||||
array_add(&passes, u8R"(
|
||||
memprof-remove-attributes,
|
||||
annotation2metadata,
|
||||
forceattrs,
|
||||
inferattrs,
|
||||
function<eager-inv>(
|
||||
ee-instrument<>,
|
||||
lower-expect,
|
||||
simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;no-switch-range-to-icmp;no-switch-to-arithmetic;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<>
|
||||
),
|
||||
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-arithmetic;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-arithmetic;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-arithmetic;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-arithmetic;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>
|
||||
),
|
||||
simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;switch-to-arithmetic;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>
|
||||
)
|
||||
)
|
||||
),
|
||||
deadargelim,
|
||||
globalopt,
|
||||
globaldce,
|
||||
elim-avail-extern,
|
||||
rpo-function-attrs,
|
||||
recompute-globalsaa,
|
||||
function<eager-inv>(
|
||||
drop-unnecessary-assumes,
|
||||
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;>,
|
||||
drop-unnecessary-assumes,
|
||||
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-arithmetic;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;switch-to-arithmetic;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>
|
||||
),
|
||||
alloc-token,
|
||||
globaldce,
|
||||
constmerge,
|
||||
cg-profile,
|
||||
rel-lookup-table-converter,
|
||||
function(
|
||||
annotation-remarks
|
||||
),
|
||||
verify
|
||||
)");
|
||||
|
||||
#endif
|
||||
break;
|
||||
// default<O2>
|
||||
@@ -659,7 +797,7 @@ function(
|
||||
),
|
||||
verify
|
||||
)");
|
||||
#else // LLVM 20 & 21 (same config)
|
||||
#elif LLVM_VERSION_MAJOR < 22 // LLVM 20 & 21 (same config)
|
||||
array_add(&passes, u8R"(
|
||||
annotation2metadata,
|
||||
forceattrs,
|
||||
@@ -792,6 +930,145 @@ function(
|
||||
),
|
||||
verify
|
||||
)");
|
||||
|
||||
#else // LLVM 22
|
||||
// Passes removed: coro, openmp
|
||||
array_add(&passes, u8R"(
|
||||
memprof-remove-attributes,
|
||||
annotation2metadata,
|
||||
forceattrs,
|
||||
inferattrs,
|
||||
function<eager-inv>(
|
||||
ee-instrument<>,
|
||||
lower-expect,
|
||||
simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;no-switch-range-to-icmp;no-switch-to-arithmetic;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<>
|
||||
),
|
||||
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-arithmetic;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-arithmetic;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-arithmetic;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-arithmetic;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>
|
||||
),
|
||||
simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;switch-to-arithmetic;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>
|
||||
)
|
||||
)
|
||||
),
|
||||
deadargelim,
|
||||
globalopt,
|
||||
globaldce,
|
||||
elim-avail-extern,
|
||||
rpo-function-attrs,
|
||||
recompute-globalsaa,
|
||||
function<eager-inv>(
|
||||
drop-unnecessary-assumes,
|
||||
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;>,
|
||||
drop-unnecessary-assumes,
|
||||
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-arithmetic;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;switch-to-arithmetic;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>
|
||||
),
|
||||
alloc-token,
|
||||
globaldce,
|
||||
constmerge,
|
||||
cg-profile,
|
||||
rel-lookup-table-converter,
|
||||
function(
|
||||
annotation-remarks
|
||||
),
|
||||
verify
|
||||
)");
|
||||
#endif
|
||||
break;
|
||||
|
||||
@@ -1055,7 +1332,7 @@ function(
|
||||
),
|
||||
verify
|
||||
)");
|
||||
#else // LLVM 20 & 21 (same config)
|
||||
#elif LLVM_VERSION_MAJOR < 22 // LLVM 20 & 21 (same config)
|
||||
array_add(&passes, u8R"(
|
||||
annotation2metadata,
|
||||
forceattrs,
|
||||
@@ -1193,6 +1470,148 @@ verify
|
||||
|
||||
)");
|
||||
|
||||
#else // LLVM 22
|
||||
// Passes removed: coro, openmp
|
||||
array_add(&passes, u8R"(
|
||||
memprof-remove-attributes,
|
||||
annotation2metadata,
|
||||
forceattrs,
|
||||
inferattrs,
|
||||
function<eager-inv>(
|
||||
ee-instrument<>,
|
||||
lower-expect,
|
||||
simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;no-switch-range-to-icmp;no-switch-to-arithmetic;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
|
||||
),
|
||||
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-arithmetic;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,
|
||||
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-arithmetic;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-arithmetic;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-arithmetic;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>
|
||||
),
|
||||
simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;switch-to-arithmetic;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>
|
||||
)
|
||||
)
|
||||
),
|
||||
deadargelim,
|
||||
globalopt,
|
||||
globaldce,
|
||||
elim-avail-extern,
|
||||
rpo-function-attrs,
|
||||
recompute-globalsaa,
|
||||
function<eager-inv>(
|
||||
drop-unnecessary-assumes,
|
||||
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;>,
|
||||
drop-unnecessary-assumes,
|
||||
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-arithmetic;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;switch-to-arithmetic;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>
|
||||
),
|
||||
alloc-token,
|
||||
globaldce,
|
||||
constmerge,
|
||||
cg-profile,
|
||||
rel-lookup-table-converter,
|
||||
function(
|
||||
annotation-remarks
|
||||
),
|
||||
verify
|
||||
)");
|
||||
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user