From e97f73e4aaa2f77123439b0e20dca4098b743b0e Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Sat, 11 Apr 2026 11:14:28 +0200 Subject: [PATCH 1/6] lightweight simplification and optimization passes in -o:minimal --- src/build_settings.cpp | 2 +- src/llvm_backend_passes.cpp | 10 +++++++--- src/main.cpp | 8 ++++---- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 006b0ea0a..c327230f3 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -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; diff --git a/src/llvm_backend_passes.cpp b/src/llvm_backend_passes.cpp index 5001e29b0..6d343e85a 100644 --- a/src/llvm_backend_passes.cpp +++ b/src/llvm_backend_passes.cpp @@ -3,9 +3,13 @@ array_add(&passes, "function(annotation-remarks)"); break; case 0: - array_add(&passes, "always-inline"); - if (build_context.internal_llvm_mem2reg) { - array_add(&passes, "function(mem2reg)"); + if (build_context.internal_llvm_no_sroa) { + // Old -o:minimal behavior + array_add(&passes, "always-inline"); + } else { + array_add(&passes, "function(sroa,early-cse)"); + array_add(&passes, "always-inline"); + array_add(&passes, "function(sroa,instcombine,simplifycfg)"); } array_add(&passes, "function(annotation-remarks)"); break; diff --git a/src/main.cpp b/src/main.cpp index b4ad8168b..53735704d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -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 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 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; From 7882123158d28dbe91e800d0875f83c8587fb563 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Sat, 11 Apr 2026 11:14:41 +0200 Subject: [PATCH 2/6] WINDOWS_LEAN_AND_MEAN --- src/common.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/common.cpp b/src/common.cpp index 86ebb0fa8..1fb3afa57 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -9,7 +9,9 @@ #if defined(GB_SYSTEM_WINDOWS) -#define NOMINMAX 1 +#define NOMINMAX +#define WINDOWS_LEAN_AND_MEAN 1 +#define VC_EXTRALEAN 1 #include #undef NOMINMAX #endif From fd34e4b2ede2e7fda2c6d72275f6f96b5d796859 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Sat, 11 Apr 2026 11:48:09 +0200 Subject: [PATCH 3/6] Use sroa explicitly --- src/llvm_backend_passes.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/llvm_backend_passes.cpp b/src/llvm_backend_passes.cpp index 6d343e85a..3aa971e22 100644 --- a/src/llvm_backend_passes.cpp +++ b/src/llvm_backend_passes.cpp @@ -7,9 +7,9 @@ // Old -o:minimal behavior array_add(&passes, "always-inline"); } else { - array_add(&passes, "function(sroa,early-cse)"); + array_add(&passes, "function(sroa,early-cse)"); array_add(&passes, "always-inline"); - array_add(&passes, "function(sroa,instcombine,simplifycfg)"); + array_add(&passes, "function(sroa,instcombine,simplifycfg)"); } array_add(&passes, "function(annotation-remarks)"); break; From 65ca5f02cdf3d3b65eeef020bb44d6a9a733169d Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Sat, 11 Apr 2026 11:49:48 +0200 Subject: [PATCH 4/6] fix typo --- src/common.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common.cpp b/src/common.cpp index 1fb3afa57..89964309b 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -9,7 +9,7 @@ #if defined(GB_SYSTEM_WINDOWS) -#define NOMINMAX +#define NOMINMAX 1 #define WINDOWS_LEAN_AND_MEAN 1 #define VC_EXTRALEAN 1 #include From eb01ff554b6141db77ae19567412044ec40f4377 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Sat, 11 Apr 2026 12:42:34 +0200 Subject: [PATCH 5/6] attributes, use instsimplify instead of instcombine --- src/llvm_backend_passes.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/llvm_backend_passes.cpp b/src/llvm_backend_passes.cpp index 3aa971e22..134d296d2 100644 --- a/src/llvm_backend_passes.cpp +++ b/src/llvm_backend_passes.cpp @@ -7,9 +7,13 @@ // Old -o:minimal behavior array_add(&passes, "always-inline"); } else { - array_add(&passes, "function(sroa,early-cse)"); + array_add(&passes, "annotation2metadata"); + array_add(&passes, "inferattrs"); + array_add(&passes, "forceattrs"); + array_add(&passes, "function(sroa,early-cse<>)"); array_add(&passes, "always-inline"); - array_add(&passes, "function(sroa,instcombine,simplifycfg)"); + array_add(&passes, "function(sroa,instsimplify)"); + // array_add(&passes, "verify"); } array_add(&passes, "function(annotation-remarks)"); break; From d5baafb16cb4ce9674bf925749a896cde7383ce6 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Sat, 11 Apr 2026 12:51:22 +0200 Subject: [PATCH 6/6] bring back simplifycfg --- src/llvm_backend_passes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/llvm_backend_passes.cpp b/src/llvm_backend_passes.cpp index 134d296d2..50d450c52 100644 --- a/src/llvm_backend_passes.cpp +++ b/src/llvm_backend_passes.cpp @@ -12,7 +12,7 @@ array_add(&passes, "forceattrs"); array_add(&passes, "function(sroa,early-cse<>)"); array_add(&passes, "always-inline"); - array_add(&passes, "function(sroa,instsimplify)"); + array_add(&passes, "function(sroa,instsimplify,simplifycfg)"); // array_add(&passes, "verify"); } array_add(&passes, "function(annotation-remarks)");