Visual Studio 2022 17.10 brings new optimizations, intrinsics, features, and improvements to the MSVC backend. Check out the highlights below:
- Performance improvements and additional functionality for all architectures:
- Improved SLP vectorizer. Now it runs on more functions, recognizes more operations, and may choose to use larger vector widths if allowed by the appropriate
/arch
flag. Add the/Qvec-report:1
switch and look for info C5003: block vectorized for more SLP vectorization. - Support
__declspec(guard(overflow))
with signed operations for add/mul. - Improvements in Variable Visibility when Debugging.
- Enabled code coverage of managed C++ binaries targeting .NET Core.
- Increase debug information for symbol removal during
/LTCG
. - Significant improvements to ASAN code generation, fixing codegen bugs, and reducing false negatives. ASAN now emits more checks in the presence of inlining.
- Made security improvements to the PDB handling code.
- Improved SLP vectorizer. Now it runs on more functions, recognizes more operations, and may choose to use larger vector widths if allowed by the appropriate
- New functionality and performance improvements on ARM64:
- The new
/feature
(ARM64) flag allows you to enable one or more optional Arm A-Profile architecture features for a specified ARM64 extension. You can also enable ARM64 features by specifying them in the updated/arch
 ARM64 option. For example, if you’d like to enable featureFEAT_LSE
(Large System Extensions), you can use both/feature:lse
and/arch:armv8.0
or only use/arch:armv8.0+lse
. Note that only certain ARM64 features are currently supported by MSVC. Along with adding the option to enable Arm A-Profile architecture features, the/arch
ARM64 option now has the additional arguments for Armv8-A architecture extension version armv8.9 and Armv9-A architecture extensions armv9.0, armv9.1, armv9.2, armv9.3, and armv9.4. For more information about both options, please refer to our documentation for/feature
(ARM64) and/arch
(ARM64). - Added Arm64 intrinsics, and variants, for exclusive load/store and load/store for unprivileged registers,
ldtr
andsttr
. Thanks to our friends at ARM. - Optimized Arm64 CRT functions to run faster and take less space
strstr
/wcschr
/wcsrchr
/wcsstr
strchr
,strrchr
, andmemchr
, thanks to our friends at ARM.
- Speed up intrinsic expansion by reducing intermediate steps
- Support SVE2 instructions in the assembler and disassembler, thanks to our friends at ARM.
- bit permutation
- element move and broadcasting
- constructive multiplication
- polynomial and complex integer arithmetic/dot product/matrix multiplication/comparison
- uniform/widening/narrowing/unary DSP operations
- cryptography support
- extended table lookup
- non-temporal gather/scatter
- floating-point extra conversion and floating-point widening multiply-accumulate
- The new
- Improvements to ARM64EC:
- Performance improvements and additional functionality for x86 and x64:
- Vectorizer optimized to run in additional scenarios, thanks to our friends at AMD.
- Optimize FMA generation with
/favor:ATOM
, thanks to our friends at Intel. - New functionality on x64:
- Support the vectorization of the multiplication of 8-bit types for AVX512, thanks to our friends at Intel.
- Support AVX2 and AVX512 variable bit shift instructions, thanks to our friends at AMD.
- Our friends at Intel added intrinsics for Intel Lion Cove to enable:
- AVX-VNNI-INT16
VPDPW[SU,US,UU]D[,S]
- TSE
PBNDKB
- SHA512
VSHA512MSG1
,VSHA512MSG2
,VSHA512RNDS2
- SM3
VSM3MSG1
,VMS3MSG2
,VSM3RNDS2
- SM4
VSM4KEY4
,VSM4RNDS4
- AVX-VNNI-INT16
Do you want to experience the new improvements in the C++ backend? Please download the latest Visual Studio 2022 and give it a try! Any feedback is welcome. We can be reached via the comments below, Developer Community, X (@VisualC), or email at visualcpp@microsoft.com.
Stay tuned for more information on updates to the latest Visual Studio.
Interesting to read to __declspec(guard(overflow)) has been improved. It seems however that this __declspec option has no public documentation.
Thank you for the update. Question: are these backend updates tied to a specific MSVC toolchain version (e.g. 14.40.xxx), or are they independent of the toolchain? If toolchain-dependent, it would helpful to list the associated version.
Great question, Chris! Generally, updates correlate with cl/link.exe versions. However, there are instances where versions remain unchanged across different releases, meaning the same cl/link.exe versions might appear in several updates. For the most recent updates, it's best to download the latest version of Visual Studio 2022, which you can find here. This ensures you have access to all the latest features and improvements.