Branch prediction hint for SvREFCNT_dec
authorSteffen Mueller <smueller@cpan.org>
Tue, 11 Jun 2013 16:59:18 +0000 (18:59 +0200)
committerSteffen Mueller <smueller@cpan.org>
Tue, 11 Jun 2013 18:05:53 +0000 (20:05 +0200)
When decrementing the refcount on an SV, we have to branch on whether or
not we've reached a refcount of 0. But a quick instrumentation shows
that in virtually any program small or large, the number of decrements
without freeing greatly outweighs the number of decrements that cause a
free. Therefore, it's a net win to suggest to the compiler to emit a
branch prediction hint to go into the just-decrement branch.

inline.h

index 953bb33..29a15ac 100644 (file)
--- a/inline.h
+++ b/inline.h
@@ -67,7 +67,7 @@ S_SvREFCNT_dec(pTHX_ SV *sv)
 {
     if (LIKELY(sv != NULL)) {
        U32 rc = SvREFCNT(sv);
-       if (rc > 1)
+       if (LIKELY(rc > 1))
            SvREFCNT(sv) = rc - 1;
        else
            Perl_sv_free2(aTHX_ sv, rc);
@@ -78,7 +78,7 @@ PERL_STATIC_INLINE void
 S_SvREFCNT_dec_NN(pTHX_ SV *sv)
 {
     U32 rc = SvREFCNT(sv);
-    if (rc > 1)
+    if (LIKELY(rc > 1))
        SvREFCNT(sv) = rc - 1;
     else
        Perl_sv_free2(aTHX_ sv, rc);