aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-10-29 20:13:03 +0000
committergingerBill <bill@gingerbill.org>2023-10-29 20:13:03 +0000
commited7c9ec61929cbb7e4a112176c12a0c3fbeeb782 (patch)
tree3ebe7d939c96c0d3fed24e12b183ea9c6bcb880b /src
parent1d9f6346d47957d762887cceca37851f84eabeeb (diff)
Test: use custom passes for -o:speed
Diffstat (limited to 'src')
-rw-r--r--src/llvm_backend.cpp123
1 files changed, 122 insertions, 1 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index 716c50837..d65a28e23 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -1494,7 +1494,115 @@ gb_internal WORKER_TASK_PROC(lb_llvm_module_pass_worker_proc) {
array_add(&passes, "default<Os>");
break;
case 2:
- array_add(&passes, "default<O2>");
+ // array_add(&passes, "default<O2>");
+ 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<>
+),
+
+called-value-propagation,
+globalopt,
+function<eager-inv>(
+ mem2reg,
+ 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>(
+ sroa<modify-cfg>,
+ early-cse<memssa>,
+ speculative-execution,
+ jump-threading,
+ 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>,
+ 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>,
+ 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>,
+ sroa<modify-cfg>,
+ vector-combine,
+ mldst-motion<no-split-footer-bb>,
+ gvn<>,
+ bdce,
+ jump-threading,
+ adce,
+ memcpyopt,
+ dse,
+ move-auto-init,
+ 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>
+ ),
+ 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-load-elim,
+ slp-vectorizer,
+ vector-combine,
+ transform-warning,
+ sroa<preserve-cfg>,
+ 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
+
+
+)");
break;
case 3:
array_add(&passes, "default<O3>");
@@ -1528,6 +1636,19 @@ gb_internal WORKER_TASK_PROC(lb_llvm_module_pass_worker_proc) {
}
passes_str = gb_string_appendc(passes_str, passes[i]);
}
+ for (isize i = 0; i < gb_string_length(passes_str); /**/) {
+ switch (passes_str[i]) {
+ case ' ':
+ case '\n':
+ case '\t':
+ gb_memmove(&passes_str[i], &passes_str[i+1], gb_string_length(passes_str)-i);
+ GB_STRING_HEADER(passes_str)->length -= 1;
+ continue;
+ default:
+ i += 1;
+ break;
+ }
+ }
LLVMErrorRef llvm_err = LLVMRunPasses(wd->m->mod, passes_str, wd->target_machine, pb_options);