Skip to content

Commit dbfaba0

Browse files
authored
Merge pull request #8154 from hjyamauchi/msvc-slow-arm64-5.10
2 parents 7c34b90 + c317c53 commit dbfaba0

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
@@ -27,6 +27,26 @@ set(LLVM_LINK_COMPONENTS
2727
TransformUtils
2828
)
2929

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