Conversation
ned-deily
left a comment
There was a problem hiding this comment.
Thanks for the PR. Without commenting on the desirability of the feature, be aware thatconfigure is a derived file produced from configure.ac by the autoconf tool. The PR needs to change configure.ac and then run autoconf and commit the resulting changes to configure too. See the devguide for more info.
|
A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated. Once you have made the requested changes, please leave a comment on this pull request containing the phrase |
corona10
left a comment
There was a problem hiding this comment.
Please add the NEWS.d with blurb tool
|
@holmanb |
|
Let's run the https://github.com/python/pyperformance benchmark and compare it with full LTO |
| (default is no) | ||
| --with-assertions build with C assertions enabled (default is no) | ||
| --with-lto enable Link-Time-Optimization in any build (default | ||
| --with-lto[=no|thin] enable Link-Time-Optimization in any build (default |
There was a problem hiding this comment.
What about
--with-lto[=full|thin] enable Link-Time-Optimization in any build (default is full)
| --with-assertions build with C assertions enabled (default is no) | ||
| --with-lto enable Link-Time-Optimization in any build (default | ||
| --with-lto[=no|thin] enable Link-Time-Optimization in any build (default | ||
| is no) |
There was a problem hiding this comment.
the current no means that whether we apply LTO or not.
So the configure should be updated if we also provide the thin LTO option.
Following options should be available.
A. no LTO (by default) ./configure
B. with LTO (default=full) ./configure --with-lto
C. with LTO (full LTO designated) ./configure --with-lto=full
D. with LTO (thin LTO designated) ./configure --with-lto=thin
| LTOFLAGS="-flto$LTO_ARG -Wl,-export_dynamic" | ||
| LTOCFLAGS="-flto$LTO_ARG" | ||
| ;; | ||
| *) | ||
| LTOFLAGS="-flto" | ||
| LTOFLAGS="-flto$LTO_ARG" |
There was a problem hiding this comment.
Are the flags (thing or otherwise) supported by all compilers that support LTO?
There was a problem hiding this comment.
No. Thinlto is a more recent implementation than the default that is specific to clang.
There was a problem hiding this comment.
Here's something I think about supporting the LTO options.
There was a problem hiding this comment.
Then we should probably need show an error if the compiler doesn't support it or/and document the limitation, because otherwise, it seems that is a general option that we are exposing regardless of the compiler.
There was a problem hiding this comment.
@corona10 - I like it. That's more readable and provides a warning as @pablogsal suggested.
There was a problem hiding this comment.
@corona10 Nitpick: gcc doesn't have a concept of full, and if --with-lto=full is configured with gcc, no warnings are thrown and -flto is assumed. Is this assumption sensible? Or would throwing an error on a nonsense input be better than assuming intent?
There was a problem hiding this comment.
I think given that these options are only available on clang we should just fail if the compiler is not clang. Adding checks to other compilers one by one is going to be suboptimal because CPython can be compiled with almost any C compiler: xcl, icc...
There was a problem hiding this comment.
Let's discuss the supporting option with the attached PR.
- We may check clang version
- We may check other compiler support (clang, gcc supports LTO itself, others not)

This adds support for building cpython with clang's
--flto=thinoption. Existing--with-ltobehavior remains unchanged (default to no, with--with-ltocurrently using the default compiler lto option).The tests (
make test) currently pass for clang 11.1.0 for each of--with-ltoand--with-lto=thin.https://bugs.python.org/issue44340