Da steht der Übergabeparameter an foo(3) drin. Das optimiert der Compiler so (ist so auch der kleinste Code). Ansonsten wäre das ja
Code:
ldi r24, lo(3) 
push r24; das kann wegoptimiert werden
GCC nutzt aber einige Register stets zur Parameterübergabe (bei eingeschalteter Optimierung).