Does GCC, when compiling C++ code, ever try to optimize for speed by choosing to inline functions that are not marked with the inline keyword?
Yes, it does, although it will also generate a non-inlined function body for non-static non-inline functions as this is needed for calls from other translation units.
For inline functions, it is an error to fail to provide a function body if the function is used in any particular translation unit so this isn't a problem.