Hi all,
        This patch supersedes yesterday's; it impements autoconf-based
detection of compiler builtins.

The purpose of this feature is to give explicit hints to compilers
supporting them about the likely outcome of an if() clause; thus
allowing the compiler to do explicit optimizations (CPU predictor
hinting, code layout optimizations) based on the predicted outcome.
The obvious case is the singleton pattern, where the existence check
will always be true except for the first time.

This work is not correlated to Alex's SMP-inspired cachemgr work.

        Kinkie
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: kin...@squid-cache.org-20101013160855-lmi2vbrokh7e64yl
# target_branch: file:///home/kinkie/squid/workspace/squid-trunk-co/
# testament_sha1: 4c48469579bcf0502e4769dd550e3fea76e1e29a
# timestamp: 2010-10-13 18:09:02 +0200
# base_revision_id: amosjeffr...@squid-cache.org-20101006130311-\
#   xnwwkgwnuhy5oj0r
# 
# Begin patch
=== modified file 'acinclude/os-deps.m4'
--- acinclude/os-deps.m4	2010-08-29 14:07:18 +0000
+++ acinclude/os-deps.m4	2010-10-13 16:08:55 +0000
@@ -814,3 +814,17 @@
     squid_cv_resuid_works="no" ],[:])
   )
 ])
+
+
+dnl check compiler support for gcc-style conditional branch hinting
+dnl set squid_cv_branch_hints to either "no" or "yes"
+AC_DEFUN([SQUID_CHECK_GCC_COMPILER_BRANCH_HINTS],[
+  AC_CACHE_CHECK(if the compiler supports branch hints, squid_cv_branch_hints,
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[[
+  int foo=1;
+  if (__builtin_expect(!!(foo==1), 1)) {
+    foo=2;
+  }
+  ]])],[squid_cv_branch_hints=yes],[squid_cv_branch_hints=no])
+  )
+])

=== modified file 'configure.in'
--- configure.in	2010-10-06 13:03:11 +0000
+++ configure.in	2010-10-13 16:08:55 +0000
@@ -79,6 +79,10 @@
 	AC_USE_SYSTEM_EXTENSIONS
 fi
 
+SQUID_CHECK_GCC_COMPILER_BRANCH_HINTS
+SQUID_DEFINE_BOOL(HAVE_GCC_BRANCH_HINTS,$squid_cv_branch_hints,
+  [Defined if the compiler supports gcc-style conditional branch hinting])
+
 AC_ARG_ENABLE(strict-error-checking,
   AS_HELP_STRING([--disable-strict-error-checking],[By default squid is compiled
                  with all possible static compiler error-checks enabled.

=== added file 'include/branch-hints.h'
--- include/branch-hints.h	1970-01-01 00:00:00 +0000
+++ include/branch-hints.h	2010-10-13 16:08:55 +0000
@@ -0,0 +1,45 @@
+/*
+ * branch-hints.h (C) 2009 Francesco Chemolli <kin...@squid-cache.org>
+ *
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ */
+
+#ifndef BRANCHHINTS_H_
+#define BRANCHHINTS_H_
+
+#include "config.h"
+
+#if HAVE_GCC_BRANCH_HINTS
+#define likely(x) __builtin_expect(!!(x), 1)
+#define unlikely(x) __builtin_expect(!!(x), 0)
+#else
+#define likely(x) (x)
+#define unlikely(x) (x)
+#endif /* __GNUC__ */
+
+#endif /* BRANCHHINTS_H_ */

=== modified file 'src/cache_manager.cc'
--- src/cache_manager.cc	2010-08-16 11:35:40 +0000
+++ src/cache_manager.cc	2010-10-12 15:42:26 +0000
@@ -33,6 +33,7 @@
  *
  */
 
+#include "branch-hints.h"
 #include "CacheManager.h"
 #include "errorpage.h"
 #include "HttpReply.h"
@@ -478,7 +479,7 @@
 CacheManager*
 CacheManager::GetInstance()
 {
-    if (instance == 0) {
+    if (unlikely(instance == 0)) {
         debugs(16, 6, "CacheManager::GetInstance: starting cachemanager up");
         instance = new CacheManager;
     }

# Begin bundle
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

Reply via email to