" Raison pour laquelle j'essaie de limiter les appels de fonction ou de les coller en inline quand elles sont simples
"
C'est aussi l'une des raisons pour lesquelles les fonctions inline sont supposées être courtes, autrement on risque de se retrouver avec une fonction énorme (vu que le code est carrément recopié) et des cache miss aussi.
On ne sait pas trop comment le compilateur va générer le code de toute façon mais on sait au moins que le code d'un unique fichier cpp sera contigu en mémoire, donc appeler deux fonctions pas très grandes écrites côte à côte dans le fichier peut éviter un cache miss également.
Après les compilateurs d'aujourd'hui se chargent d'optimiser le code eux-même comme tu le dis, notamment sous Visual Studio, même si tu marque une fonction comme inline, il va pas forcément le faire, il va juger si ça vaut le coup et seulement si il pense que ça vaut le coup, il le fera, autrement on peut utiliser __forceinline (spécifique à Visual Studio) pour le forcer à le faire.
Les compilos font d'autre optimisation à la con, genre si tu divise un nombre pas une puissance de deux, il le remarquera et utilisera automatiquement une instruction de décalage de bits plutôt que l'instruction div ou idiv de l'assembleur.