Hi, What if you try looking at the output of '-S -fverbose-asm'? Doesn't that include all of the -f<thing> optimizery flags that are actually passed to cc1? Maybe one of those will suggest something helpful? Do the -O<x> flags only select sets of -f<thing>(s)? Or do they also enable some things on their own? In other words if I did -O1 and then did -fno-<thing> for everything that -O1 turned on would I effectively disable -O1? kevin On Wed, Feb 2, 2011 at 12:39 PM, Stefan Schulze Frielinghaus <stefan@xxxxxxxxxxxx> wrote: > On Mi, 2011-02-02 at 19:05 +0100, Drasko DRASKOVIC wrote: >> On Wed, Feb 2, 2011 at 6:55 PM, Stefan Schulze Frielinghaus >> <stefan@xxxxxxxxxxxx> wrote: >> >> But have you tried comparing the outputs of what -O0 outputs to say -O2 ? >> > >> > The problem with using anything else then -O0 is that it enables other >> > optimization techniques, e.g. constant propagation (the example of the >> > first mail would be scaled down to a simple "return 0;") which I do not >> > want. Therefore, I would like to compile my code without any >> > optimizations except register allocation. >> >> Hi Stefan, >> keep in mind that "register" keyword is only a **hint** given to >> compiler to do register optimization. Compiler is not obliged to >> listen to your hints, and it probably does not do so without >> optimization turned on (I am not sure if it can be forced). > > Yes that's true. I only used it in my examples to demonstrate what > result I actually wanted. > >> BTW, you should also keep in mind that ANSI C does not allow for >> taking the address of a register object; this restriction does not >> apply to C++. However, if the address-of operator (&) is used on an >> object, the compiler must put the object in a location for which an >> address can be represented. In practice, this means in memory instead >> of in a register. Because of this restriction GCC will ignore the >> register keyword on variables whos address is taken at any point in >> the program. So, ensure that somewhere in your code you are not using >> the addresses operator on these variables. > > This wouldn't be a problem for me because in ANSI C, as you already > mentioned, the address-of operator is not allowed for variables which > reside in a register, ergo the variable cannot stay in a register and > needs to be spilled on the stack. That is perfectly fine for me. I'm > more interested in all other variables. > > Kind regards, > Stefan > >