Skip to content

Commit

Permalink
Merge pull request #8149 from hjyamauchi/msvc-slow-arm64
Browse files Browse the repository at this point in the history
Workaround for MSVC ARM64 build performance regression
  • Loading branch information
compnerd authored Feb 8, 2024
2 parents 87ace14 + 139cf3d commit 50bdb94
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
20 changes: 20 additions & 0 deletions clang/lib/CodeGen/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
20 changes: 20 additions & 0 deletions clang/lib/Tooling/Inclusions/Stdlib/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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

Expand Down

0 comments on commit 50bdb94

Please sign in to comment.