--- /dev/null
+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.
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 :
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"
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=""