On 11 August 2017 at 18:09, Will Hawkins <whh8b@xxxxxxxxxxxx> wrote: > Hello everyone! > > First, thank you all for your participation in the gcc community -- I > firmly believe that one of the great strengths of free software is the > community of people that participate in its development, maintenance > and support. So, thank you! > > I have a simple C program and I am attempting to determine which of > the optimizations at O1 cause a particular transformation. In order to > isolate the optimizations enabled at O1 vs O0, I followed an idea set > out in the gcc man page and ran the following command: > > $ diff <(gcc -Q -O1 --help=optimizers) <(gcc -Q --help=optimizers) | > grep enabled | awk '{print $2;}' > optimizations > > Then I compiled with the following command: > > gcc -o scfi.poptim `cat optimizations | tr '\n' ' '` scfi.c > > I compared simple.poptim with simple.optim that came from running this command: > > gcc -o simple.optim -O1 simple.c > > I expected that simple.optim and simple.poptim would be (largely) > identical. That is not the case, however. It does not look like the > scfi.poptim program has been optimized at all. Because you didn't specify any -O optimization option, which means there is no optimization done at all. See https://gcc.gnu.org/wiki/FAQ#optimization-options Options to enable/disable individual optimizations have no effect if the optimizers aren't run at all. > I was wondering if anyone could shed some light on why this is not the > case. I ask only because the gcc man page seems to imply that this is > the "right" way to isolate the different optimizations performed at > different levels. No, you need to use -O1 -fno-xxx -fno-yyy -fno-zzz i.e. turn on optimization, then disable individual passes. You can't start from nothing and enable individual ones, that gives you nothing.