MSVC Backend Updates in Visual Studio 2019 Version 16.5

Avatar

Mei

In Visual Studio 2019 version 16.5 we have continued to improve the C++ backend with new features, new and improved optimizations, build throughput improvements, and better security. Here is a brief list of improvements for you to review.

  • Compiler switch mitigation for the Intel JCC erratum.
  • AMD Zen3 architecture instruction support.
  • AVX2 floating point improvements: vector instructions optimized to a single constant with known initial arguments.
  • ARM64 NEON intrinsics improvements:
    • Implementation of all remaining ARM64 NEON intrinsics.
    • Performance improvement of some existing NEON intrinsics.
    • Error reporting improvement for NEON intrinsics that take compile time constant arguments.
  • Speculative memcpy optimization to speed up memcpy operations by 2x-18x when the source and destination don’t overlap, in addition to speculative memset optimization.
  • More Spectre Mitigations in MSVC: /Qspectre-load and /Qspectre-load-cf flags added to mitigate against speculative execution side-channel attacks based on loads.
  • Added a powerful new optimization known as jump-threading, which simplifies control-flow. It eliminates unneeded intermediate jumps and branches on program paths that can be evaluated at compile time, based on the values of variables and other compile-time information.

Do you want to experience the new improvements of the C++ backend? Please download the latest Visual Studio 2019 and give it a try! Any feedback is welcome. We can be reached via the comments below, Developer Community, email (visualcpp@microsoft.com), and Twitter (@VisualC).

1 comment

Leave a comment

  • deadpin
    deadpin

    Are you able to provide more information about the JCC erratum? Like the results of all of the benchmarks; especially the ones that showed >3% regressions? Why hide that? Will any core windows 10 binaries be recompiled with that and, if so, when? What is the recommendation for large software projects? Is the recommendation to rebuild with that option if possible? What about all other dependencies used (static and dynamic), should those be recompiled as well?