* gcc optimization options and lto (detailed info)
@ 2022-05-17 6:56 muzungu
2022-05-17 8:30 ` Jonathan Wakely
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: muzungu @ 2022-05-17 6:56 UTC (permalink / raw)
To: gcc-help
Hi
In order to attempt to get LTO implemented in Zephyr OS I need a better understanding of the GCC optimization options.
I do not yet have an understanding either where in the Zephyr OS build LTO is problematic and and how it could be solved.
I now start from the GCC side first, to understand the options I / we have.
From https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html I understand the following:
* -O<x> combines a collection of -f<xyz>
* There is a long list of single optimizations which probably could be set individually
What is not clear to me:
* does every -f<xyz> have a -fno-<xyz>?
* would I be able able to disable single optimizations activated via -O<x> using -fno-<xyz> after -O<x>?
* When LTO is enabled, are the optimizations only effective at link time and not during the compilation into IR (GIMPLE)?
* Or are the optimizations effective in different stages of the build process? Are there information which options is applied when?
* From armclang we have an experience, where a const parameter from a parameter block was optimized as const value embedded into the code rendering the flash parameter block useless.
We were able to solve that by declaring the const parameter pointer as volatile by good guessing and try and error methodology, but also leaves a good level of uncertainty.
Are there information available what the different optimizations do (which I know, is a long list) and how such unwanted optimization can be avoided respective the unwanted effects of the optimizations
* by writing the code accordingly (e.g. delcaring variables volatile or similar)
* by attributing the code section accordingly (suppressing certain optimizations for that code part)
* by simply disabling the optimization via compiler/linker cmd-line (-fno-<xyz>) for the different code files/modules (would that have an effect on modules/files for LTO at all or will it be treated as one big "module" rendering single file options useless?
* Since there is a rather long list of optimization options which would very likely exceed the command line length, what is the solution to activate a custom set of optimzations? I could not find a --configfile option or similar to replace the command line.
Creating a header file full of pragma GCC (which then is not generic but compiler specific) and the header being included in each compiler unit (C-File) seems very ugly to me.
I would appreciate any help also pointing to documentation which would clarify.
Best Roman
Get BlueMail for Android
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: gcc optimization options and lto (detailed info)
2022-05-17 6:56 gcc optimization options and lto (detailed info) muzungu
@ 2022-05-17 8:30 ` Jonathan Wakely
[not found] ` <trinity-1d53f520-c371-471b-b6c2-0446d6ba8184-1652865880524@3c-app-gmx-bap04>
2022-05-17 8:54 ` Stefan Ring
2022-05-17 23:05 ` Segher Boessenkool
2 siblings, 1 reply; 6+ messages in thread
From: Jonathan Wakely @ 2022-05-17 8:30 UTC (permalink / raw)
To: muzungu; +Cc: gcc-help
On Tue, 17 May 2022 at 07:57, muzungu--- via Gcc-help
<gcc-help@gcc.gnu.org> wrote:
> * does every -f<xyz> have a -fno-<xyz>?
Nearly all, yes:
"Many options have long names starting with -f or with -W --- for
example, -fmove-loop-invariants, -Wformat and so on. Most of these
have both positive and negative forms; the negative form of -ffoo is
-fno-foo. This manual documents only one of these two forms,
whichever one is not the default."
> * would I be able able to disable single optimizations activated via -O<x> using -fno-<xyz> after -O<x>?
Yes.
> * When LTO is enabled, are the optimizations only effective at link time and not during the compilation into IR (GIMPLE)?
Both.
> * Or are the optimizations effective in different stages of the build process? Are there information which options is applied when?
If a particular optimization is only effective before/during LTO I
think that will be mentioned in the manual. If it isn't mentioned,
assume it is effective at both times.
> Are there information available what the different optimizations do (which I know, is a long list) and how such unwanted optimization can be avoided respective the unwanted effects of the optimizations
No, it would be an entire book, and rapidly be outdated. All the
available documentation is already in the GCC manual. Of course the
source code is the ultimate guide, but it's not clear to follow unless
you already know how GCC works.
> * Since there is a rather long list of optimization options which would very likely exceed the command line length, what is the solution to activate a custom set of optimzations? I could not find a --configfile option or similar to replace the command line.
See the @file option.
But if you need so many options that you exceed the command-line
limits, maybe you're doing something wrong. That would be unusual.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: gcc optimization options and lto (detailed info)
2022-05-17 6:56 gcc optimization options and lto (detailed info) muzungu
2022-05-17 8:30 ` Jonathan Wakely
@ 2022-05-17 8:54 ` Stefan Ring
2022-05-17 23:05 ` Segher Boessenkool
2 siblings, 0 replies; 6+ messages in thread
From: Stefan Ring @ 2022-05-17 8:54 UTC (permalink / raw)
To: gcc-help
On Tue, May 17, 2022 at 8:56 AM muzungu--- via Gcc-help
<gcc-help@gcc.gnu.org> wrote:
>
> * does every -f<xyz> have a -fno-<xyz>?
I think that’s the idea.
> * would I be able able to disable single optimizations activated via -O<x> using -fno-<xyz> after -O<x>?
Yes.
> * When LTO is enabled, are the optimizations only effective at link time and not during the compilation into IR (GIMPLE)?
I would expect them to be recorded in the intermediate object file and
becoming effective during code generation, but I am not sure about
that.
> * Since there is a rather long list of optimization options which would very likely exceed the command line length, what is the solution to activate a custom set of optimzations? I could not find a --configfile option or similar to replace the command line.
What do you think is your maximum command line length? This should not
be a problem on any sane OS.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: gcc optimization options and lto (detailed info)
2022-05-17 6:56 gcc optimization options and lto (detailed info) muzungu
2022-05-17 8:30 ` Jonathan Wakely
2022-05-17 8:54 ` Stefan Ring
@ 2022-05-17 23:05 ` Segher Boessenkool
2 siblings, 0 replies; 6+ messages in thread
From: Segher Boessenkool @ 2022-05-17 23:05 UTC (permalink / raw)
To: muzungu; +Cc: gcc-help
On Tue, May 17, 2022 at 08:56:20AM +0200, muzungu--- via Gcc-help wrote:
> * -O<x> combines a collection of -f<xyz>
It does more than that. Each -O<x> enables many things that can be
separately enabled and disabled with -f<xxx> flags, but there are
hundreds if not thousands other things that are sirectly controlled by
optimisation level.
Segher
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-05-19 9:33 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-17 6:56 gcc optimization options and lto (detailed info) muzungu
2022-05-17 8:30 ` Jonathan Wakely
[not found] ` <trinity-1d53f520-c371-471b-b6c2-0446d6ba8184-1652865880524@3c-app-gmx-bap04>
2022-05-18 10:23 ` Jonathan Wakely
[not found] ` <trinity-dba8f838-b88d-491b-a582-c9be885cb09e-1652951565751@3c-app-gmx-bs42>
2022-05-19 9:33 ` Jonathan Wakely
2022-05-17 8:54 ` Stefan Ring
2022-05-17 23:05 ` Segher Boessenkool
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).