Hacker News new | past | comments | ask | show | jobs | submit login

This is possible if the call site can see the implementation, but you can't count on it for separate translation units or larger functions.

My goal was to not rely on site-specific optimization and instead have one separately compiled function body that can be improved for common cases. Certainly, once the compiler has a full view of everything it can take advantage of information as it pleases but this is less controllable. If I were really picky about optimizing for each use I would make it a template.

>Doesn't even need the `inline` keyword for this at `-O2`

The inline keyword means little in terms of actually causing inlining to happen. I would expect the majority of inlining compilers do happens automatically on functions that lack the "inline" keyword. Conversely, programmers probably add "inline" as an incantation all over the place not knowing that compilers often ignore it.




>Conversely, programmers probably add "inline" as an incantation all over the place not knowing that compilers often ignore it.

Funnily, the inline keyword actually has a use, but that use isn't to tell the compiler to inline a function. The use is to allow a function (or variable) to be defined in multiple translations units without being an ODR violation.


MSVC treats inline as a hint [0] , GCC is ambiguous [1] but I read it as utilising the hint. My understanding of clang [2] is that it tries to match GCC, which would imply that it applies.

[0] https://learn.microsoft.com/en-us/cpp/build/reference/ob-inl...

[1] https://gcc.gnu.org/onlinedocs/gcc/Inline.html

[2] https://clang.llvm.org/compatibility.html


What the OP is saying is that it has a use to satisfy (https://en.cppreference.com/w/cpp/language/definition) and in that case it is not optional and not ignored by the compiler. Whether it will "actually" inline it is another matter, that is optional.


would it have made a difference if the function was static? The compiler would then be able to deduce that it isn't used anywhere else, and thus could do this inline optimization.


Gcc actually totally does that. Even doing it while not static by copy/pasting the function and enabling further optims.

to me modern compilers are like voodoo magic




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: