July 29th, 2024

MSVC Backend Updates in Visual Studio 2022 version 17.10

Sarthak Tamboli
Software Engineer II

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.
  • 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 feature FEAT_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 and sttr. Thanks to our friends at ARM.
    • Optimized Arm64 CRT functions to run faster and take less space
      • strstr/wcschr/wcsrchr/wcsstr
      • strchr, strrchr, and memchr, 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
  • Improvements to ARM64EC:
    • No longer generate mismatched thunks with different call signatures
    • Now considers x64 functions during long-branch optimizations /OPT:LBR
    • /map now contains Arm64 native symbols
  • 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

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.

Category
BackendC++

Author

Sarthak Tamboli
Software Engineer II

3 comments

Discussion is closed. Login to edit/delete existing comments.

  • Victor Derks

    Interesting to read to __declspec(guard(overflow)) has been improved. It seems however that this __declspec option has no public documentation.

  • Chris Kline

    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.

    • Sarthak TamboliMicrosoft employee Author

      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.

      Read more