Cuándo honra Delphi `en línea 'y cuándo no?

Estaba tratando de optimizar una pieza de código que tiene esta construcción:

while (i > 0) do begin
  Dec(i);

Esto parece ineficiente, así que intenté hacer esto:

while (Dec(i) >= 0) do begin

Eso no funciona porque Dec es un procedimiento y no una función.

Así que lo reescribo a:

procedure Withloop;
var
  ....
  function Decr(var a: integer): integer; inline;
  begin
    Dec(a);
    Result:= a;
  end;

...
  while (Decr(i) >= 0) do begin

Pero esto se compila en:

SDIMAIN.pas.448: while (Decr(i) >= 0) do begin
00468EE5 8BC4             mov eax,esp
00468EE7 E8D0FEFFFF       call Decr          <<--- A call??
00468EEC 85C0             test eax,eax
00468EEE 0F8D12FFFFFF     jnl $00468e06
00468EF4 EB01             jmp $00468ef7

in embargo, en otra parte del programa, incorpora una función muy bien.
Qué regla de oro (o regla estricta) puedo usar para saber que Delphi honrará lainline directiva @