Skip to content

Commit 50bdb94

Browse files
authored
Merge pull request #8149 from hjyamauchi/msvc-slow-arm64
Workaround for MSVC ARM64 build performance regression
2 parents 87ace14 + 139cf3d commit 50bdb94

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

clang/lib/CodeGen/CMakeLists.txt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,26 @@ set(LLVM_LINK_COMPONENTS
3030
TransformUtils
3131
)
3232

33+
# Workaround for MSVC ARM64 performance regression:
34+
# https://developercommunity.visualstudio.com/t/Compiling-a-specific-code-for-ARM64-with/10444970
35+
# Since /O1 and /O2 represent a set of optimizations,
36+
# our goal is to disable the /Og flag while retaining the other optimizations from the /O1|/O2 set
37+
if(MSVC AND NOT CMAKE_CXX_COMPILER_ID MATCHES Clang
38+
AND MSVC_VERSION VERSION_GREATER_EQUAL 1932
39+
AND CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64")
40+
41+
string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
42+
string(REGEX MATCHALL "/[Oo][12]" opt_flags "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}}")
43+
if (opt_flags)
44+
if(opt_flags MATCHES "1$")
45+
set(opt_flags "/Od;/Os;/Oy;/Ob2;/GF;/Gy")
46+
elseif (opt_flags MATCHES "2$")
47+
set(opt_flags "/Od;/Oi;/Ot;/Oy;/Ob2;/GF;/Gy")
48+
endif()
49+
set_source_files_properties(CGBuiltin.cpp PROPERTIES COMPILE_OPTIONS "${opt_flags}")
50+
endif()
51+
endif()
52+
3353
add_clang_library(clangCodeGen
3454
ABIInfo.cpp
3555
ABIInfoImpl.cpp

clang/lib/Tooling/Inclusions/Stdlib/CMakeLists.txt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1+
# Workaround for MSVC ARM64 performance regression:
2+
# https://developercommunity.visualstudio.com/t/Compiling-a-specific-code-for-ARM64-with/10444970
3+
# Since /O1 and /O2 represent a set of optimizations,
4+
# our goal is to disable the /Og flag while retaining the other optimizations from the /O1|/O2 set
5+
if(MSVC AND NOT CMAKE_CXX_COMPILER_ID MATCHES Clang
6+
AND MSVC_VERSION VERSION_GREATER_EQUAL 1932
7+
AND CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64")
8+
9+
string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
10+
string(REGEX MATCHALL "/[Oo][12]" opt_flags "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}}")
11+
if (opt_flags)
12+
if(opt_flags MATCHES "1$")
13+
set(opt_flags "/Od;/Os;/Oy;/Ob2;/GF;/Gy")
14+
elseif (opt_flags MATCHES "2$")
15+
set(opt_flags "/Od;/Oi;/Ot;/Oy;/Ob2;/GF;/Gy")
16+
endif()
17+
set_source_files_properties(StandardLibrary.cpp PROPERTIES COMPILE_OPTIONS "${opt_flags}")
18+
endif()
19+
endif()
20+
121
add_clang_library(clangToolingInclusionsStdlib
222
StandardLibrary.cpp
323

0 commit comments

Comments
 (0)