{"id":30829,"date":"2022-08-09T15:00:49","date_gmt":"2022-08-09T15:00:49","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/cppblog\/?p=30829"},"modified":"2024-09-10T07:55:44","modified_gmt":"2024-09-10T07:55:44","slug":"msvc-backend-updates-in-visual-studio-2022-version-17-3","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/msvc-backend-updates-in-visual-studio-2022-version-17-3\/","title":{"rendered":"MSVC Backend Updates in Visual Studio 2022 version 17.3"},"content":{"rendered":"<p>In <a href=\"https:\/\/visualstudio.microsoft.com\/vs\/\">Visual Studio 2022<\/a> version 17.3 we have continued to improve the C++ backend with new features, new and improved optimizations, build throughput improvements, and better security. Here is a list of improvements for you to review.<\/p>\n<ul>\n<li>Native Arm64 Visual Studio is now available for 17.3! See the <a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/arm64-visual-studio\/\">Visual Studio blog post<\/a> for details on how to install Arm64 Visual Studio, and what workloads are available for 17.3.<\/li>\n<li>The C++ ARM64EC target is available for production development. To learn more about the ARM64EC ABI, see <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/build\/arm64ec-windows-abi-conventions?view=msvc-170\">Overview of ARM64EC ABI conventions<\/a>, and <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/arm\/arm64ec-abi\">Understanding Arm64EC ABI and assembly code<\/a>. To learn more about using ARM64EC in Visual Studio, see <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/arm\/arm64ec\">Using Arm64EC to build apps for Windows 11 on Arm devices<\/a>.<\/li>\n<li>The ARM64EC toolchain now emits an error when vectorcall semantics, <code>__m256<\/code> types or <code>__m512<\/code> types are used when compiling for ARM64EC as these are unsupported scenarios. Full vectorcall support is planned for a future release.<\/li>\n<li>More progress has been made towards implementing OpenMP Standard 3.1 under the experimental <code>-openmp:llvm<\/code> switch, building on the <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/openmp-task-support-for-c-in-visual-studio\/\">previous release<\/a>:\n<ul>\n<li>Implemented atomics-related features from OpenMP 3.1.<\/li>\n<li>Enabled use of pointers as induction variables in OpenMP loops.<\/li>\n<\/ul>\n<\/li>\n<li>[Credit to our friends at AMD] Improved Superword-Level Parallelism (SLP) vectorizer, handling more types and vector widths. More details to come in a future blog post. Add the <code>\/Qvec-report:1<\/code> switch and look for <code>info C5003: block vectorized<\/code> for more SLP vectorization.<\/li>\n<li>Support for recognizing and building ARM64 NEON vector fused multiply-add (FMA) instructions after loop vectorization. Floating-point vector FMA instructions are only built under <code>\/fp:fast<\/code>, or <code>\/fp:contract<\/code> if <code>\/fp:precise<\/code> is also specified. More details about <code>\/fp<\/code> can be found in <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/the-fpcontract-flag-and-changes-to-fp-modes-in-vs2022\/\">The \/fp:contract flag and changes to FP modes in VS 2022<\/a>, and the <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/build\/reference\/fp-specify-floating-point-behavior?view=msvc-170\">MSVC compiler options reference for \/fp<\/a>.<\/li>\n<li>More peephole optimizations. Here are some cases that were improved:\n<ul>\n<li><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/Release-build-of-SSE-code-is-inserting-u\/1536674\">Release build of SSE code is inserting unnecessary shufps<\/a><\/li>\n<li><a href=\"https:\/\/developercommunity2.visualstudio.com\/t\/string-view:-suboptimal-forwarding-of-va\/1306660\">string-view: suboptimal forwarding of values through vector registers<\/a><\/li>\n<li><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/Suspicious-codegen-for-assignment-of-ret\/1695810\">Suspicious codegen for assignment of return value with __vectorcall and \/arch:AVX<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Do you want to experience the new improvements of the C++ backend? Please <a href=\"https:\/\/visualstudio.microsoft.com\/vs\/\">download the latest Visual Studio 2022<\/a> and give it a try! Any feedback is welcome. We can be reached via the comments below, <a href=\"https:\/\/developercommunity.visualstudio.com\/search?space=62\">Developer Community<\/a>, and Twitter (<a href=\"https:\/\/twitter.com\/visualc\">@VisualC<\/a>)<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Visual Studio 2022 version 17.3 we have continued to improve the C++ backend with new features, new and improved optimizations, build throughput improvements, and better security. Here is a list of improvements for you to review. Native Arm64 Visual Studio is now available for 17.3! See the Visual Studio blog post for details on [&hellip;]<\/p>\n","protected":false},"author":60165,"featured_media":35994,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[3946,1,3921],"tags":[],"class_list":["post-30829","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-backend","category-cplusplus","category-openmp"],"acf":[],"blog_post_summary":"<p>In Visual Studio 2022 version 17.3 we have continued to improve the C++ backend with new features, new and improved optimizations, build throughput improvements, and better security. Here is a list of improvements for you to review. Native Arm64 Visual Studio is now available for 17.3! See the Visual Studio blog post for details on [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/30829","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/60165"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=30829"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/30829\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/35994"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=30829"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=30829"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=30829"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}