Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Workaround for MSVC ARM64 build performance regression #8149

Merged
merged 1 commit into from
Feb 8, 2024

Conversation

hjyamauchi
Copy link

MSVC has a major performance regression observed when targeting ARM64 since v19.32 (VS 17.2.0). cl.exe spends a lot of time on compiling StandardLibrary.cpp and CGBuiltin.cpp, and total build duration rises extremely. This makes builds stagnate even on a real hardware, but VM-based builds (like building on cloud agents from GitHub Actions and Azure Pipelines) are experiencing most damage as they also performance- and time-limited.

The issue appears to be related to some optimizations applied in /O2 mode. It is reported on Developer
Community
. While the investigation is in progress, we could apply a workaround to improve build time. /O2 actually enables a set of optimizations, and only one of them does all slowdown. The idea is to disable optimizations, and then apply all but one back, effectively excluding the problematic option from the set.

This patch alters the CMake configuration for aforementioned files. Changes are limited to:

  • non-debug builds
  • MSVC of the specific version
  • target arch (ARM64).

This cherrypicks upstream commit llvm@c6f0f88

MSVC has a major performance regression observed when targeting ARM64
since v19.32 (VS 17.2.0). `cl.exe` spends a lot of time on compiling
`StandardLibrary.cpp` and `CGBuiltin.cpp`, and total build duration
rises extremely. This makes builds stagnate even on a real hardware, but
VM-based builds (like building on cloud agents from GitHub Actions and
Azure Pipelines) are experiencing most damage as they also performance-
and time-limited.

The issue appears to be related to some optimizations applied in `/O2`
mode. It is reported on [Developer
Community](https://developercommunity.visualstudio.com/t/Compiling-a-specific-code-for-ARM64-with/10444970).
While the investigation is in progress, we could apply a workaround to
improve build time. `/O2` actually enables a set of optimizations, and
only one of them does all slowdown. The idea is to disable
optimizations, and then apply all but one back, effectively excluding
the problematic option from the set.

This patch alters the CMake configuration for aforementioned files.
Changes are limited to:
- non-debug builds
- MSVC of the specific version
- target arch (ARM64).

This cherrypicks upstream commit llvm@c6f0f88
@hjyamauchi
Copy link
Author

@swift-ci Please test

@hjyamauchi
Copy link
Author

CC @compnerd

@compnerd
Copy link
Member

compnerd commented Feb 8, 2024

@swift-ci please test Windows platform

@compnerd compnerd merged commit 50bdb94 into swiftlang:stable/20230725 Feb 8, 2024
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants