https://github.com/lxbndr updated https://github.com/llvm/llvm-project/pull/65215
>From c97d9a28ef8cdb232670a960a46bc30b269983f7 Mon Sep 17 00:00:00 2001 From: Alexander Smarus <ben...@readdle.com> Date: Tue, 19 Sep 2023 00:34:54 +0300 Subject: [PATCH] Workaround for MSVC ARM64 build performance regression --- clang/lib/CodeGen/CMakeLists.txt | 20 +++++++++++++++++++ .../Tooling/Inclusions/Stdlib/CMakeLists.txt | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/clang/lib/CodeGen/CMakeLists.txt b/clang/lib/CodeGen/CMakeLists.txt index 1debeb6d9cce9e0..2dd93a57f4e22d2 100644 --- a/clang/lib/CodeGen/CMakeLists.txt +++ b/clang/lib/CodeGen/CMakeLists.txt @@ -30,6 +30,26 @@ set(LLVM_LINK_COMPONENTS TransformUtils ) +# Workaround for MSVC ARM64 performance regression: +# https://developercommunity.visualstudio.com/t/Compiling-a-specific-code-for-ARM64-with/10444970 +# Since /O1 and /O2 represent a set of optimizations, +# our goal is to disable the /Og flag while retaining the other optimizations from the /O1|/O2 set +if(MSVC AND NOT CMAKE_CXX_COMPILER_ID MATCHES Clang + AND MSVC_VERSION VERSION_GREATER_EQUAL 1932 + AND CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64") + + string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE) + string(REGEX MATCHALL "/[Oo][12]" opt_flags "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}}") + if (opt_flags) + if(opt_flags MATCHES "1$") + set(opt_flags "/Od;/Os;/Oy;/Ob2;/GF;/Gy") + elseif (opt_flags MATCHES "2$") + set(opt_flags "/Od;/Oi;/Ot;/Oy;/Ob2;/GF;/Gy") + endif() + set_source_files_properties(CGBuiltin.cpp PROPERTIES COMPILE_OPTIONS "${opt_flags}") + endif() +endif() + add_clang_library(clangCodeGen ABIInfo.cpp ABIInfoImpl.cpp diff --git a/clang/lib/Tooling/Inclusions/Stdlib/CMakeLists.txt b/clang/lib/Tooling/Inclusions/Stdlib/CMakeLists.txt index 0f52c3590ac9af1..ed323ab3528b104 100644 --- a/clang/lib/Tooling/Inclusions/Stdlib/CMakeLists.txt +++ b/clang/lib/Tooling/Inclusions/Stdlib/CMakeLists.txt @@ -1,3 +1,23 @@ +# Workaround for MSVC ARM64 performance regression: +# https://developercommunity.visualstudio.com/t/Compiling-a-specific-code-for-ARM64-with/10444970 +# Since /O1 and /O2 represent a set of optimizations, +# our goal is to disable the /Og flag while retaining the other optimizations from the /O1|/O2 set +if(MSVC AND NOT CMAKE_CXX_COMPILER_ID MATCHES Clang + AND MSVC_VERSION VERSION_GREATER_EQUAL 1932 + AND CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64") + + string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE) + string(REGEX MATCHALL "/[Oo][12]" opt_flags "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}}") + if (opt_flags) + if(opt_flags MATCHES "1$") + set(opt_flags "/Od;/Os;/Oy;/Ob2;/GF;/Gy") + elseif (opt_flags MATCHES "2$") + set(opt_flags "/Od;/Oi;/Ot;/Oy;/Ob2;/GF;/Gy") + endif() + set_source_files_properties(StandardLibrary.cpp PROPERTIES COMPILE_OPTIONS "${opt_flags}") + endif() +endif() + add_clang_library(clangToolingInclusionsStdlib StandardLibrary.cpp _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits