他のコンパイラはどのようなコードを吐くのか教えて下さい。

void f();

int g(int a, int b)
{
 if ( (a -= b) > 0 ) f();
 return a;
}

これについて、Borland C++ 5.5.1 で bcc32 -S -O2 -6 test.cpp の場合
push ebp
mov ebp,esp
push ebx
mov ebx,dword ptr [ebp+8]
;
;{
; if ( (a -= b) > 0 ) f();
;
sub ebx,dword ptr [ebp+12]
test ebx,ebx
jle short @2
call @@f$qv
; return a;
@2:
mov eax,ebx
;}

sub の時点でのフラグを使えば test をするまでもないと
疑問に思ったのですが、どうなんでしょうか?