For me, in a (good) modern language this sort of thing should always be left to the compiler or the jitter. Write good, clean code and rely on the quality of the compiler/jitter. Otherwise you may find that your optimisations themselves cause problems when a new version of the compiler (or jitter) is released.

In .Net, inlining takes place in the JIT.