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/common.cpp b/src/common.cpp index 86ebb0fa8..89964309b 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -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 #undef NOMINMAX #endif diff --git a/src/llvm_backend_passes.cpp b/src/llvm_backend_passes.cpp index 5001e29b0..50d450c52 100644 --- a/src/llvm_backend_passes.cpp +++ b/src/llvm_backend_passes.cpp @@ -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(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(sroa,early-cse<>)"); + array_add(&passes, "always-inline"); + array_add(&passes, "function(sroa,instsimplify,simplifycfg)"); + // array_add(&passes, "verify"); } 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;