https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124948
--- Comment #7 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Jakub Jelinek <[email protected]>: https://gcc.gnu.org/g:deb5f74feeaf3a43f6d4008a1e01fc4d23c1efdf commit r17-2390-gdeb5f74feeaf3a43f6d4008a1e01fc4d23c1efdf Author: Jakub Jelinek <[email protected]> Date: Tue Jul 14 10:41:08 2026 +0200 c-family: Use CAS loop instead of RMW atomics on small _BitInt with padding on targets which need to extend [PR124948] Some atomic/sync builtins don't sign or zero extend _BitInt values with padding in it. IMNSHO this is solely about some of the type-generic atomic/sync builtins (those documented to take TYPE * arguments) and needs to be handled in the FE, likely in gcc/c-family/c-common.cc (resolve_overloaded_builtin). There already is code to transform various type-generic builtins into a CAS loop for say unsigned _BitInt(253), so I think it should be used also for the case where the type is BITINT_TYPE with any padding bits in the extend other than bitint_ext_undef mode. 2026-07-14 Jakub Jelinek <[email protected]> PR target/124948 * c-common.cc (sync_resolve_size): Return -1 for fetch ops on _BitInt types with padding bits where the target requires extension into the padding bits. (atomic_bitint_fetch_using_cas_loop): Handle also __sync_* fetch builtins. * gcc.dg/torture/bitint-100.c: New test. Reviewed-by: Richard Biener <[email protected]>
