public inbox for
 help / color / mirror / Atom feed
From: "" <>
Subject: gcc optimization options and lto (detailed info)
Date: Tue, 17 May 2022 08:56:20 +0200	[thread overview]
Message-ID: <> (raw)


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 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 ​

             reply	other threads:[~2022-05-17  6:56 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-17  6:56 muzungu [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \ \ \ \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).