mirror of
https://github.com/python/cpython
synced 2024-09-15 23:46:26 +00:00
gh-89536: Use ThinLTO policy if possible (gh-96766)
This commit is contained in:
parent
16c33a9676
commit
e47b96c44f
|
@ -232,6 +232,9 @@ also be used to improve performance.
|
||||||
.. versionadded:: 3.11
|
.. versionadded:: 3.11
|
||||||
To use ThinLTO feature, use ``--with-lto=thin`` on Clang.
|
To use ThinLTO feature, use ``--with-lto=thin`` on Clang.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.12
|
||||||
|
Use ThinLTO as the default optimization policy on Clang if the compiler accepts the flag.
|
||||||
|
|
||||||
.. cmdoption:: --enable-bolt
|
.. cmdoption:: --enable-bolt
|
||||||
|
|
||||||
Enable usage of the `BOLT post-link binary optimizer
|
Enable usage of the `BOLT post-link binary optimizer
|
||||||
|
|
|
@ -453,6 +453,10 @@ Build Changes
|
||||||
``va_start()`` is no longer called with a single parameter.
|
``va_start()`` is no longer called with a single parameter.
|
||||||
(Contributed by Kumar Aditya in :gh:`93207`.)
|
(Contributed by Kumar Aditya in :gh:`93207`.)
|
||||||
|
|
||||||
|
* CPython now uses the ThinLTO option as the default link time optimization policy
|
||||||
|
if the Clang compiler accepts the flag.
|
||||||
|
(Contributed by Dong-hee Na in :gh:`89536`.)
|
||||||
|
|
||||||
|
|
||||||
C API Changes
|
C API Changes
|
||||||
=============
|
=============
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
CPython now uses the ThinLTO option as the default policy if the Clang
|
||||||
|
compiler accepts the flag. Patch by Dong-hee Na.
|
82
configure
generated
vendored
82
configure
generated
vendored
|
@ -7837,8 +7837,49 @@ $as_echo "$as_me: llvm-ar found via xcrun: ${LLVM_AR}" >&6;}
|
||||||
# Any changes made here should be reflected in the GCC+Darwin case below
|
# Any changes made here should be reflected in the GCC+Darwin case below
|
||||||
if test $Py_LTO_POLICY = default
|
if test $Py_LTO_POLICY = default
|
||||||
then
|
then
|
||||||
LTOFLAGS="-flto -Wl,-export_dynamic -Wl,-object_path_lto,\"\$@\".lto"
|
# Check that ThinLTO is accepted.
|
||||||
LTOCFLAGS="-flto"
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -flto=thin" >&5
|
||||||
|
$as_echo_n "checking whether C compiler accepts -flto=thin... " >&6; }
|
||||||
|
if ${ax_cv_check_cflags___flto_thin+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
|
||||||
|
ax_check_save_flags=$CFLAGS
|
||||||
|
CFLAGS="$CFLAGS -flto=thin"
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_c_try_compile "$LINENO"; then :
|
||||||
|
ax_cv_check_cflags___flto_thin=yes
|
||||||
|
else
|
||||||
|
ax_cv_check_cflags___flto_thin=no
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
CFLAGS=$ax_check_save_flags
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___flto_thin" >&5
|
||||||
|
$as_echo "$ax_cv_check_cflags___flto_thin" >&6; }
|
||||||
|
if test "x$ax_cv_check_cflags___flto_thin" = xyes; then :
|
||||||
|
|
||||||
|
LTOFLAGS="-flto=thin -Wl,-export_dynamic -Wl,-object_path_lto,\"\$@\".lto"
|
||||||
|
LTOCFLAGS="-flto=thin"
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
LTOFLAGS="-flto -Wl,-export_dynamic -Wl,-object_path_lto,\"\$@\".lto"
|
||||||
|
LTOCFLAGS="-flto"
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
LTOFLAGS="-flto=${Py_LTO_POLICY} -Wl,-export_dynamic -Wl,-object_path_lto,\"\$@\".lto"
|
LTOFLAGS="-flto=${Py_LTO_POLICY} -Wl,-export_dynamic -Wl,-object_path_lto,\"\$@\".lto"
|
||||||
LTOCFLAGS="-flto=${Py_LTO_POLICY}"
|
LTOCFLAGS="-flto=${Py_LTO_POLICY}"
|
||||||
|
@ -7847,7 +7888,42 @@ $as_echo "$as_me: llvm-ar found via xcrun: ${LLVM_AR}" >&6;}
|
||||||
*)
|
*)
|
||||||
if test $Py_LTO_POLICY = default
|
if test $Py_LTO_POLICY = default
|
||||||
then
|
then
|
||||||
LTOFLAGS="-flto"
|
# Check that ThinLTO is accepted
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -flto=thin" >&5
|
||||||
|
$as_echo_n "checking whether C compiler accepts -flto=thin... " >&6; }
|
||||||
|
if ${ax_cv_check_cflags___flto_thin+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
|
||||||
|
ax_check_save_flags=$CFLAGS
|
||||||
|
CFLAGS="$CFLAGS -flto=thin"
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_c_try_compile "$LINENO"; then :
|
||||||
|
ax_cv_check_cflags___flto_thin=yes
|
||||||
|
else
|
||||||
|
ax_cv_check_cflags___flto_thin=no
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
CFLAGS=$ax_check_save_flags
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___flto_thin" >&5
|
||||||
|
$as_echo "$ax_cv_check_cflags___flto_thin" >&6; }
|
||||||
|
if test "x$ax_cv_check_cflags___flto_thin" = xyes; then :
|
||||||
|
LTOFLAGS="-flto=thin"
|
||||||
|
else
|
||||||
|
LTOFLAGS="-flto"
|
||||||
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
LTOFLAGS="-flto=${Py_LTO_POLICY}"
|
LTOFLAGS="-flto=${Py_LTO_POLICY}"
|
||||||
fi
|
fi
|
||||||
|
|
14
configure.ac
14
configure.ac
|
@ -1863,8 +1863,15 @@ if test "$Py_LTO" = 'true' ; then
|
||||||
# Any changes made here should be reflected in the GCC+Darwin case below
|
# Any changes made here should be reflected in the GCC+Darwin case below
|
||||||
if test $Py_LTO_POLICY = default
|
if test $Py_LTO_POLICY = default
|
||||||
then
|
then
|
||||||
LTOFLAGS="-flto -Wl,-export_dynamic -Wl,-object_path_lto,\"\$@\".lto"
|
# Check that ThinLTO is accepted.
|
||||||
LTOCFLAGS="-flto"
|
AX_CHECK_COMPILE_FLAG([-flto=thin],[
|
||||||
|
LTOFLAGS="-flto=thin -Wl,-export_dynamic -Wl,-object_path_lto,\"\$@\".lto"
|
||||||
|
LTOCFLAGS="-flto=thin"
|
||||||
|
],[
|
||||||
|
LTOFLAGS="-flto -Wl,-export_dynamic -Wl,-object_path_lto,\"\$@\".lto"
|
||||||
|
LTOCFLAGS="-flto"
|
||||||
|
]
|
||||||
|
)
|
||||||
else
|
else
|
||||||
LTOFLAGS="-flto=${Py_LTO_POLICY} -Wl,-export_dynamic -Wl,-object_path_lto,\"\$@\".lto"
|
LTOFLAGS="-flto=${Py_LTO_POLICY} -Wl,-export_dynamic -Wl,-object_path_lto,\"\$@\".lto"
|
||||||
LTOCFLAGS="-flto=${Py_LTO_POLICY}"
|
LTOCFLAGS="-flto=${Py_LTO_POLICY}"
|
||||||
|
@ -1873,7 +1880,8 @@ if test "$Py_LTO" = 'true' ; then
|
||||||
*)
|
*)
|
||||||
if test $Py_LTO_POLICY = default
|
if test $Py_LTO_POLICY = default
|
||||||
then
|
then
|
||||||
LTOFLAGS="-flto"
|
# Check that ThinLTO is accepted
|
||||||
|
AX_CHECK_COMPILE_FLAG([-flto=thin],[LTOFLAGS="-flto=thin"],[LTOFLAGS="-flto"])
|
||||||
else
|
else
|
||||||
LTOFLAGS="-flto=${Py_LTO_POLICY}"
|
LTOFLAGS="-flto=${Py_LTO_POLICY}"
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Reference in a new issue