It is not guaranteed that every function will be inlined when you declare it inline (it is just a suggestion to the compiler). Hence for any architecture the functions that aren't inlined will be treated as normal functions, and hence the push & pop from the stack when you call them (like any normal non-inlined function)
And it is pretty much dependent upon how your compiler is configured. For eg, GCC has flags like:
-finline-functions
Consider all functions for inlining, even if they are not declared inline. The compiler heuristically decides which functions are worth integrating in this way.
-finline-limit=n
By default, GCC limits the size of functions that can be inlined. This flag allows coarse control of this limit. n is the size of functions that can be inlined in number of pseudo instructions.
--param name=value
In some places, GCC uses various constants to control the amount of optimization that is done. For example, GCC does not inline functions that contain more than a certain number of instructions. You can control some of these constants on the command line using the --param option.