Oooh, as I'm working with AVR right now I'm a little curious how that would evaluate.
Specifically, with -O0 it should be awful, more or less literal. GCC is notoriously verbose on -O0.
Well, -O0 more or less disables all optimizations, as it allows for exact debugging.
With -O0, every C line should translate to some object code to allow stepping through the whole code while debugging. So this is expected.
Starting with -O1, this kind of trivial-to-optimize code is reasonably optimized. Higher level of optimizations may make use of specific target instructions, but on very simple targets, that may not make a difference (again for trivial code such as this, more complex code may benefit from many kinds of additional optimizations). Function parameters may also be passed as registers instead of using the stack.