Merge pull request #6553 from jakubtomsu/minimal-sroa

`-o:minimal` SROA and simplification passes
This commit is contained in:
gingerBill
2026-04-15 10:25:21 +01:00
committed by GitHub
4 changed files with 19 additions and 9 deletions

View File

@@ -578,7 +578,7 @@ struct BuildContext {
bool internal_by_value;
bool internal_weak_monomorphization;
bool internal_ignore_llvm_verification;
bool internal_llvm_mem2reg;
bool internal_llvm_no_sroa;
bool enable_rvo;

View File

@@ -9,7 +9,9 @@
#if defined(GB_SYSTEM_WINDOWS)
#define NOMINMAX 1
#define NOMINMAX 1
#define WINDOWS_LEAN_AND_MEAN 1
#define VC_EXTRALEAN 1
#include <windows.h>
#undef NOMINMAX
#endif

View File

@@ -3,9 +3,17 @@
array_add(&passes, "function(annotation-remarks)");
break;
case 0:
array_add(&passes, "always-inline");
if (build_context.internal_llvm_mem2reg) {
array_add(&passes, "function<eager-inv>(mem2reg)");
if (build_context.internal_llvm_no_sroa) {
// Old -o:minimal behavior
array_add(&passes, "always-inline");
} else {
array_add(&passes, "annotation2metadata");
array_add(&passes, "inferattrs");
array_add(&passes, "forceattrs");
array_add(&passes, "function<eager-inv>(sroa<modify-cfg>,early-cse<>)");
array_add(&passes, "always-inline");
array_add(&passes, "function<eager-inv>(sroa<modify-cfg>,instsimplify,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>)");
// array_add(&passes, "verify");
}
array_add(&passes, "function(annotation-remarks)");
break;

View File

@@ -402,7 +402,7 @@ enum BuildFlagKind {
BuildFlag_InternalByValue,
BuildFlag_InternalWeakMonomorphization,
BuildFlag_InternalLLVMVerification,
BuildFlag_InternalLLVMMem2Reg,
BuildFlag_InternalLLVMNoSROA,
BuildFlag_InternalEnableRVO,
BuildFlag_Sanitize,
@@ -634,7 +634,7 @@ gb_internal bool parse_build_flags(Array<String> args) {
add_flag(&build_flags, BuildFlag_InternalByValue, str_lit("internal-by-value"), BuildFlagParam_None, Command_all);
add_flag(&build_flags, BuildFlag_InternalWeakMonomorphization, str_lit("internal-weak-monomorphization"), BuildFlagParam_None, Command_all);
add_flag(&build_flags, BuildFlag_InternalLLVMVerification, str_lit("internal-ignore-llvm-verification"), BuildFlagParam_None, Command_all);
add_flag(&build_flags, BuildFlag_InternalLLVMMem2Reg, str_lit("internal-llvm-mem2reg"), BuildFlagParam_None, Command_all);
add_flag(&build_flags, BuildFlag_InternalLLVMNoSROA, str_lit("internal-llvm-no-sroa"), BuildFlagParam_None, Command_all);
add_flag(&build_flags, BuildFlag_InternalEnableRVO, str_lit("internal-enable-rvo"), BuildFlagParam_None, Command_all);
@@ -1628,8 +1628,8 @@ gb_internal bool parse_build_flags(Array<String> args) {
case BuildFlag_InternalLLVMVerification:
build_context.internal_ignore_llvm_verification = true;
break;
case BuildFlag_InternalLLVMMem2Reg:
build_context.internal_llvm_mem2reg = true;
case BuildFlag_InternalLLVMNoSROA:
build_context.internal_llvm_no_sroa = true;
break;
case BuildFlag_InternalEnableRVO:
build_context.enable_rvo = true;