On Tue, Mar 8, 2011 at 8:47 AM, Tom Gall tom.gall@linaro.org wrote:
To quote the GCC manual:
-Os Optimize for size. -Os enables all -O2 optimizations that do not typically increase code size. It also performs further optimizations designed to reduce code size. -Os disables the following optimization flags:
-falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks -freorder-blocks-and-partition -fprefetch-loop-arrays -ftree-vect-loop-version
That said (and unless there's other undocumented differences), it would seem to take some expertise to comment on the trade off between memory efforts (cache misses, TLB etc) vs instructional effects by having these optimizations off.
I am certainly not that expert but I suspect given the memory bus speeds that typical arm hardware has, we'd want -Os over -O2.
I don't know about the kernel, but here's the difference for some other programs: * pybench: -Os is 24 % slower than -O2 * skia: -Os is 18 % slower than -O2 * CoreMark is similar (I've lost the numbers)
...so you're going to need a large bandwidth saving to beat the core speed improvement of -O2.
-- Michael