[3.14] gh-148535: Don't use gcc -fprofile-update=atomic flag on i686 (GH-148554) (#148655)

gh-148535: Don't use gcc -fprofile-update=atomic flag on i686 (GH-148554)

The -fprofile-update=atomic flag was added to fix a random GCC
internal error on PGO build (gh-145801) caused by corruption of
profile data (.gcda files). The problem is that it makes the PGO
build way slower (up to 47x slower) on i686. Since the GCC internal
error was not seen on i686 so far, don't use -fprofile-update=atomic
on i686.
(cherry picked from commit 2faceeec5c)

Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
Miss Islington (bot)
2026-04-16 19:46:06 +02:00
committed by GitHub
parent 1c9de6bbaa
commit 2fdccb3f88
3 changed files with 88 additions and 7 deletions
@@ -0,0 +1,6 @@
No longer use the ``gcc -fprofile-update=atomic`` flag on i686. The flag has
been added to fix a random GCC internal error on PGO build (:gh:`145801`)
caused by corruption of profile data (.gcda files). The problem is that it
makes the PGO build way slower (up to 47x slower) on i686. Since the GCC
internal error was not seen on i686 so far, don't use
``-fprofile-update=atomic`` on i686 anymore. Patch by Victor Stinner.
Generated Vendored
+56 -3
View File
@@ -9050,7 +9050,57 @@ case "$ac_cv_cc_name" in
fi
;;
gcc)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fprofile-update=atomic" >&5
# Check for 32-bit x86 ISA
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for i686" >&5
printf %s "checking for i686... " >&6; }
if test ${ac_cv_i686+y}
then :
printf %s "(cached) " >&6
else case e in #(
e)
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#ifdef __i386__
# error "i386"
#endif
int
main (void)
{
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_i686=no
else case e in #(
e) ac_cv_i686=yes ;;
esac
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
;;
esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_i686" >&5
printf "%s\n" "$ac_cv_i686" >&6; }
PGO_PROF_GEN_FLAG="-fprofile-generate"
# Use -fprofile-update=atomic to fix a random GCC internal error on PGO
# build (gh-145801) caused by corruption of profile data (.gcda files).
#
# gh-148535: On i686, using -fprofile-update=atomic makes the PGO build
# way slower (up to 47x slower). So far, the GCC internal error on PGO
# build was not seen on i686, so don't use this flag on i686.
if test "x$ac_cv_i686" = xno
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fprofile-update=atomic" >&5
printf %s "checking whether C compiler accepts -fprofile-update=atomic... " >&6; }
if test ${ax_cv_check_cflags___fprofile_update_atomic+y}
then :
@@ -9085,10 +9135,13 @@ fi
printf "%s\n" "$ax_cv_check_cflags___fprofile_update_atomic" >&6; }
if test "x$ax_cv_check_cflags___fprofile_update_atomic" = xyes
then :
PGO_PROF_GEN_FLAG="-fprofile-generate -fprofile-update=atomic"
PGO_PROF_GEN_FLAG="$PGO_PROF_GEN_FLAG -fprofile-update=atomic"
else case e in #(
e) PGO_PROF_GEN_FLAG="-fprofile-generate" ;;
e) : ;;
esac
fi
fi
PGO_PROF_USE_FLAG="-fprofile-use -fprofile-correction"
+26 -4
View File
@@ -2072,10 +2072,32 @@ case "$ac_cv_cc_name" in
fi
;;
gcc)
AX_CHECK_COMPILE_FLAG(
[-fprofile-update=atomic],
[PGO_PROF_GEN_FLAG="-fprofile-generate -fprofile-update=atomic"],
[PGO_PROF_GEN_FLAG="-fprofile-generate"])
# Check for 32-bit x86 ISA
AC_CACHE_CHECK([for i686], [ac_cv_i686], [
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([
#ifdef __i386__
# error "i386"
#endif
], [])
],[ac_cv_i686=no],[ac_cv_i686=yes])
])
PGO_PROF_GEN_FLAG="-fprofile-generate"
# Use -fprofile-update=atomic to fix a random GCC internal error on PGO
# build (gh-145801) caused by corruption of profile data (.gcda files).
#
# gh-148535: On i686, using -fprofile-update=atomic makes the PGO build
# way slower (up to 47x slower). So far, the GCC internal error on PGO
# build was not seen on i686, so don't use this flag on i686.
AS_VAR_IF([ac_cv_i686], [no], [
AX_CHECK_COMPILE_FLAG(
[-fprofile-update=atomic],
[PGO_PROF_GEN_FLAG="$PGO_PROF_GEN_FLAG -fprofile-update=atomic"],
[])
])
PGO_PROF_USE_FLAG="-fprofile-use -fprofile-correction"
LLVM_PROF_MERGER="true"
LLVM_PROF_FILE=""