BayLibre’s Contributions to GCC 16

BayLibre’s Contributions to GCC 16

The GNU Compiler Collection project released GCC version 16.1 on April 30, 2026. Once again, BayLibre’s Compiler Services team were among top contributors to the annual release; with 363 total commits, BayLibre ranks 6th this release cycle when counting commits tagged with corporate or institutional e-mail addresses (behind Red Hat, Qualcomm/Ventana Micro, AdaCore, SUSE, and Arm). Every member of BayLibre’s GCC team was responsible for at least one commit for the GCC 16 release.

The team’s work in GCC 16 encompassed the following broad areas.

Support for OpenMP, OpenACC, and GPU Offloading

BayLibre’s team of compiler engineers has continued its work to support high-performance computing in GCC in collaboration with Oak Ridge National Laboratory. All members of the team contributed patches in this area, including several new OpenMP and OpenACC features, as well as bug fixes, performance improvements, and improvements to the test suite.

New OpenMP features and improvements implemented in GCC 16 include:

  • Memory allocation improvements, including using the CUDA API on Nvidia GPUs for pinned memory support with the ompx_gnu_pinned_mem_alloc predefined allocator, and managed memory support with the omp_gnu_managed_mem_alloc allocator, which allocates device-accessible memory on the host Both of these allocators and their associated predefined memory spaces are GNU extensions (Andrew Stubbs, Kwok Cheung Yeung, Thomas Schwinge)
  • OpenMP 5.0 declare mapper support for C and C++ (Tobias Burnus, based on patches from Julian Brown)
  • OpenMP 5.0 uses_allocators clause for C and C++ (Chung-Lin Tang)
  • OpenMP 5.1 support for the iterator modifier map clauses and the target update construct, in C and C++ only so far (Kwok Cheung Yeung)
  • OpenMP 5.2 begin declare variant construct (Sandra Loosemore, co-authored by Waffl3x and based on patches from Julian Brown)
  • TR14 omp_default_device constant (Tobias Burnus)
  • New warnings for deprecated directives and clauses that have been deprecated in OpenMP 5.0, 5.1, or 5.2, controlled by -Wdeprecated-openmp and -Wdeprecated-declarations (Supers1ngular)
  • Several improvements and bug fixes for the metadirective directive (Tobias Burnus, Paul-Antoine Arras, Sandra Loosemore)
  • Numerous test suite improvements, bug fixes, and improvements to diagnostics (Thomas Schwinge, Kwok Cheung Yeung, Waffl3x, Tobias Burnus, Andrew Stubbs, SuperS1ngular)

These improvements were made to GCC’s OpenACC support:

  • OpenACC 3.0: Support for the if clause has been added to the wait directive. (Tobias Burnus)
  • OpenACC 3.3: The acc_attach and acc_detach API routines are now supported in Fortran in addition to C and C++. (Tobias Burnus)
  • OpenACC 3.4: In Fortran, named PARAMETER constants are now permitted as var in clauses. These named constants are generally ignored or optimized away during compilation, but in most instances a -Wsurprising warning is generated in place of previous errors. (Tobias Burnus)
  • The acc_memcpy_device and acc_memcpy_device_async API routines have been added for C, C++ and Fortran. (Tobias Burnus)

Improvements to backend offload compiler support and target-specific libgomp library improvements to support offloading include:

  • Support for C++ global destructors offload targets (per the Itanium C++ ABI specification) on both AMD and Nvidia (Thomas Schwinge)
  • For AMD GCN, the launch overhead time for offloaded OpenMP and OpenACC regions has been significantly reduced (Arsen Arsenović)
  • Experimental support has been added for AMD Instinct MI300 (gfx942) devices, including the generic gfx9-4-generic and mostly-compatible gfx950 (Tobias Burnus)
  • Various changes to AMD GCN multilib and configuration options to better reflect current processors (Tobias Burnus)
  • Improvements to AMD GCN vector instruction code generation (Andrew Stubbs, Sandra Loosemore)
  • For Nvidia PTX offload targets, new support for -march=sm_50, -march=sm_61, -mptx=4.0, and -mptx=5.0, and updates to -march-map= for newer processors (Thomas Schwinge)

In addition to their own patch contributions, BayLibre’s three GCC maintainers in this area — Tobias Burnus, Thomas Schwinge, and Andrew Stubbs — also contributed through patch review, advising other team members and contributors in the broader GCC community, monitoring test results, and general maintenance of the code in their areas of expertise. Tobias and Thomas additionally both acted as mentors for the 2025 Google Summer of Code, with Tobias’s student Yuao Ma contributing numerous patches to implement new intrinsics from the Fortran 2023 standard.

RISC-V Back End

As a continuation of previous work sponsored by the RISE Project, Paul-Antoine Arras contributed a lengthy series of patches to improve performance of vector-scalar floating-point operations in the RISC-V back end by adding new patterns for these machine instructions.

Documentation

In her role as GCC documentation maintainer, Sandra Loosemore reviewed and corrected documentation of all of GCC’s command-line options, along with fixing some bugs in the option implementation. She also reorganized the discussion of GNU attributes in the manual to reduce duplication, put more emphasis on presenting the new standard C and C++ attribute syntax versus the legacy GNU syntax, and create a new attribute index; moved some rarely-used material from the GCC user manual to the internals documentation; and fixed a number of long-standing bugs. Because of the large number of documentation patches this release cycle, Sandra was the team’s top contributor to GCC 16 with 130 total commits.

Several other team members also contributed documentation patches for GCC 16. Tobias Burnus and Andrew Stubbs, in particular, each committed multiple patches to the libgomp manual, and Tobias also to the GCC installation manual and the GNU Fortran manual.

GCC 16 and Beyond

The GCC 16 release notes detail many other changes and improvements. A few of the more notable updates include making C++20 the default dialect and adding support for numerous C++23 and C++26 features; the addition of an Algol 68 front end; support for Fortran coarrays; and the usual improvements to optimizations and target back ends to support new processors.

Looking forward, BayLibre’s GCC team already has a number of projects planned for GCC 17. We expect to have support for the OpenMP declare mapper directive and the iterator modifier completed early in the release cycle, and are working on performance improvements and implementing the runtime trace interface OMPT.