Ok... stimmt... jetzt wo man's liest, wirds klar. Der Compiler darf natürlich Funktionen als "inline" an die Stelle einfügen, wenn es Sinn macht und die eigentliche Funktion nicht verändert. Ein "volatile" ändert daran nichts.
Beim GCC gibts aber z.B. das Attribut "noinline" für Funktionen, dann wird dem Compiler hier diese Art der Optimierung verboten.

In diesem Fall war's anscheinend insgesamt schneller, den Funktionsinhalt direkt aufzurufen, als erst mal in die Funktion und danach wieder zurück zu springen.

Mit Optimierung Debuggen haut eh nur selten hin; also wenn Breakpoints nicht da oder ganz woanders sind, ist das "normal".