Quando Delphi honra `inline` e quando nã

Eu estava tentando otimizar um pedaço de código que tem essa construção:

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

Isso parece ineficiente, então tentei fazer o seguinte:

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

Isso não funciona porque Dec é um procedimento e não uma funçã

Então reescrevi para:

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

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

Mas isso é compilado em:

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

o entanto, em outra parte do programa, ele alinha uma função muito be
Que regra geral (ou regra rígida) posso usar para saber que a Delphi honrará oinline directiva?

questionAnswers(2)

yourAnswerToTheQuestion