2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-22 10:10:06 +00:00

Stop providing branch prediction information

The __builtin_expect() can be used to provide the compiler with branch
prediction information.  The Gcc manual says[1] on the subject:

    In general, you should prefer to use actual profile feedback for
    this (-fprofile-arcs), as programmers are notoriously bad at
    predicting how their programs actually perform.

Stop using __builtin_expect() and ISC_LIKELY() and ISC_UNLIKELY() macros
to provide the branch prediction information as the performance testing
shows that named performs better when the __builtin_expect() is not
being used.

1. https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fexpect
This commit is contained in:
Ondřej Surý 2021-10-14 10:33:24 +02:00
parent 80fedf9231
commit e603983ec9
25 changed files with 114 additions and 180 deletions

View File

@ -66,15 +66,6 @@ expression V;
dns_message_create(...);
- CHECK(..., V);
@@
expression V;
statement S;
@@
- V =
dns_message_create(...);
- if (ISC_UNLIKELY(V != ISC_R_SUCCESS)) S
@@
expression V;
@@

View File

@ -66,15 +66,6 @@ expression V;
isc_buffer_allocate(...);
- CHECK(..., V);
@@
expression V;
statement S;
@@
- V =
isc_buffer_allocate(...);
- if (ISC_UNLIKELY(V != ISC_R_SUCCESS)) S
@@
expression V;
@@

View File

@ -227,7 +227,7 @@ dns_compress_findglobal(dns_compress_t *cctx, const dns_name_t *name,
REQUIRE(dns_name_isabsolute(name));
REQUIRE(offset != NULL);
if (ISC_UNLIKELY((cctx->allowed & DNS_COMPRESS_ENABLED) == 0)) {
if ((cctx->allowed & DNS_COMPRESS_ENABLED) == 0) {
return (false);
}
@ -256,16 +256,14 @@ dns_compress_findglobal(dns_compress_t *cctx, const dns_name_t *name,
*/
ch = p[1];
i = tableindex[ch];
if (ISC_LIKELY((cctx->allowed & DNS_COMPRESS_CASESENSITIVE) !=
0)) {
if ((cctx->allowed & DNS_COMPRESS_CASESENSITIVE) != 0) {
for (node = cctx->table[i]; node != NULL;
node = node->next) {
if (ISC_UNLIKELY(node->name.length != length)) {
if (node->name.length != length) {
continue;
}
if (ISC_LIKELY(memcmp(node->name.ndata, p,
length) == 0)) {
if (memcmp(node->name.ndata, p, length) == 0) {
goto found;
}
}
@ -276,18 +274,18 @@ dns_compress_findglobal(dns_compress_t *cctx, const dns_name_t *name,
unsigned char c;
unsigned char *label1, *label2;
if (ISC_UNLIKELY(node->name.length != length)) {
if (node->name.length != length) {
continue;
}
l = labels - n;
if (ISC_UNLIKELY(node->name.labels != l)) {
if (node->name.labels != l) {
continue;
}
label1 = node->name.ndata;
label2 = p;
while (ISC_LIKELY(l-- > 0)) {
while (l-- > 0) {
count = *label1++;
if (count != *label2++) {
goto cont1;
@ -297,7 +295,7 @@ dns_compress_findglobal(dns_compress_t *cctx, const dns_name_t *name,
INSIST(count <= 63);
/* Loop unrolled for performance */
while (ISC_LIKELY(count > 3)) {
while (count > 3) {
c = maptolower[label1[0]];
if (c != maptolower[label2[0]])
{
@ -322,7 +320,7 @@ dns_compress_findglobal(dns_compress_t *cctx, const dns_name_t *name,
label1 += 4;
label2 += 4;
}
while (ISC_LIKELY(count-- > 0)) {
while (count-- > 0) {
c = maptolower[*label1++];
if (c != maptolower[*label2++])
{
@ -388,7 +386,7 @@ dns_compress_add(dns_compress_t *cctx, const dns_name_t *name,
REQUIRE(VALID_CCTX(cctx));
REQUIRE(dns_name_isabsolute(name));
if (ISC_UNLIKELY((cctx->allowed & DNS_COMPRESS_ENABLED) == 0)) {
if ((cctx->allowed & DNS_COMPRESS_ENABLED) == 0) {
return;
}
@ -489,7 +487,7 @@ dns_compress_rollback(dns_compress_t *cctx, uint16_t offset) {
REQUIRE(VALID_CCTX(cctx));
if (ISC_UNLIKELY((cctx->allowed & DNS_COMPRESS_ENABLED) == 0)) {
if ((cctx->allowed & DNS_COMPRESS_ENABLED) == 0) {
return;
}

View File

@ -835,7 +835,7 @@ dns_message_findtype(const dns_name_t *name, dns_rdatatype_t type,
curr = ISC_LIST_PREV(curr, link))
{
if (curr->type == type && curr->covers == covers) {
if (ISC_UNLIKELY(rdataset != NULL)) {
if (rdataset != NULL) {
*rdataset = curr;
}
return (ISC_R_SUCCESS);
@ -2450,7 +2450,7 @@ dns_message_findname(dns_message_t *msg, dns_section_t section,
/*
* And now look for the type.
*/
if (ISC_UNLIKELY(type == dns_rdatatype_any)) {
if (type == dns_rdatatype_any) {
return (ISC_R_SUCCESS);
}

View File

@ -514,7 +514,7 @@ dns_name_fullcompare(const dns_name_t *name1, const dns_name_t *name2,
REQUIRE((name1->attributes & DNS_NAMEATTR_ABSOLUTE) ==
(name2->attributes & DNS_NAMEATTR_ABSOLUTE));
if (ISC_UNLIKELY(name1 == name2)) {
if (name1 == name2) {
*orderp = 0;
*nlabelsp = name1->labels;
return (dns_namereln_equal);
@ -537,7 +537,7 @@ dns_name_fullcompare(const dns_name_t *name1, const dns_name_t *name2,
offsets1 += l1;
offsets2 += l2;
while (ISC_LIKELY(l > 0)) {
while (l > 0) {
l--;
offsets1--;
offsets2--;
@ -560,7 +560,7 @@ dns_name_fullcompare(const dns_name_t *name1, const dns_name_t *name2,
}
/* Loop unrolled for performance */
while (ISC_LIKELY(count > 3)) {
while (count > 3) {
chdiff = (int)maptolower[label1[0]] -
(int)maptolower[label2[0]];
if (chdiff != 0) {
@ -589,7 +589,7 @@ dns_name_fullcompare(const dns_name_t *name1, const dns_name_t *name2,
label1 += 4;
label2 += 4;
}
while (ISC_LIKELY(count-- > 0)) {
while (count-- > 0) {
chdiff = (int)maptolower[*label1++] -
(int)maptolower[*label2++];
if (chdiff != 0) {
@ -667,7 +667,7 @@ dns_name_equal(const dns_name_t *name1, const dns_name_t *name2) {
REQUIRE((name1->attributes & DNS_NAMEATTR_ABSOLUTE) ==
(name2->attributes & DNS_NAMEATTR_ABSOLUTE));
if (ISC_UNLIKELY(name1 == name2)) {
if (name1 == name2) {
return (true);
}
@ -683,7 +683,7 @@ dns_name_equal(const dns_name_t *name1, const dns_name_t *name2) {
label1 = name1->ndata;
label2 = name2->ndata;
while (ISC_LIKELY(l-- > 0)) {
while (l-- > 0) {
count = *label1++;
if (count != *label2++) {
return (false);
@ -692,7 +692,7 @@ dns_name_equal(const dns_name_t *name1, const dns_name_t *name2) {
INSIST(count <= 63); /* no bitstring support */
/* Loop unrolled for performance */
while (ISC_LIKELY(count > 3)) {
while (count > 3) {
c = maptolower[label1[0]];
if (c != maptolower[label2[0]]) {
return (false);
@ -713,7 +713,7 @@ dns_name_equal(const dns_name_t *name1, const dns_name_t *name2) {
label1 += 4;
label2 += 4;
}
while (ISC_LIKELY(count-- > 0)) {
while (count-- > 0) {
c = maptolower[*label1++];
if (c != maptolower[*label2++]) {
return (false);
@ -923,7 +923,7 @@ dns_name_getlabelsequence(const dns_name_t *source, unsigned int first,
REQUIRE(BINDABLE(target));
p = source->ndata;
if (ISC_UNLIKELY(first == source->labels)) {
if (first == source->labels) {
firstoffset = source->length;
} else {
for (i = 0; i < first; i++) {
@ -933,7 +933,7 @@ dns_name_getlabelsequence(const dns_name_t *source, unsigned int first,
firstoffset = (unsigned int)(p - source->ndata);
}
if (ISC_LIKELY(first + n == source->labels)) {
if (first + n == source->labels) {
endoffset = source->length;
} else {
for (i = 0; i < n; i++) {
@ -1714,7 +1714,7 @@ set_offsets(const dns_name_t *name, unsigned char *offsets,
offset = 0;
nlabels = 0;
absolute = false;
while (ISC_LIKELY(offset != length)) {
while (offset != length) {
INSIST(nlabels < 128);
offsets[nlabels++] = offset;
count = *ndata;
@ -1722,7 +1722,7 @@ set_offsets(const dns_name_t *name, unsigned char *offsets,
offset += count + 1;
ndata += count + 1;
INSIST(offset <= length);
if (ISC_UNLIKELY(count == 0)) {
if (count == 0) {
absolute = true;
break;
}
@ -1961,7 +1961,7 @@ dns_name_towire2(const dns_name_t *name, dns_compress_t *cctx,
(name->attributes & DNS_NAMEATTR_NOCOMPRESS) == 0 &&
(methods & DNS_COMPRESS_GLOBAL14) != 0)
{
if (ISC_UNLIKELY(target->length - target->used < 2)) {
if (target->length - target->used < 2) {
return (ISC_R_NOSPACE);
}
offset = *comp_offsetp;
@ -2001,7 +2001,7 @@ dns_name_towire2(const dns_name_t *name, dns_compress_t *cctx,
* If the offset is too high for 14 bit global compression, we're
* out of luck.
*/
if (gf && ISC_UNLIKELY(go >= 0x4000)) {
if (gf && go >= 0x4000) {
gf = false;
}
@ -2013,7 +2013,7 @@ dns_name_towire2(const dns_name_t *name, dns_compress_t *cctx,
}
if (gf) {
if (ISC_UNLIKELY(target->length - target->used < gp.length)) {
if (target->length - target->used < gp.length) {
return (ISC_R_NOSPACE);
}
if (gp.length != 0) {
@ -2022,7 +2022,7 @@ dns_name_towire2(const dns_name_t *name, dns_compress_t *cctx,
(size_t)gp.length);
}
isc_buffer_add(target, gp.length);
if (ISC_UNLIKELY(target->length - target->used < 2)) {
if (target->length - target->used < 2) {
return (ISC_R_NOSPACE);
}
isc_buffer_putuint16(target, go | 0xc000);
@ -2035,8 +2035,7 @@ dns_name_towire2(const dns_name_t *name, dns_compress_t *cctx,
*comp_offsetp = go;
}
} else {
if (ISC_UNLIKELY(target->length - target->used < name->length))
{
if (target->length - target->used < name->length) {
return (ISC_R_NOSPACE);
}
if (name->length != 0) {

View File

@ -258,9 +258,8 @@ maybe_rehash(dns_rbt_t *rbt, size_t size);
static inline bool
rehashing_in_progress(dns_rbt_t *rbt);
#define TRY_NEXTTABLE(hindex, rbt) \
(ISC_LIKELY(hindex == rbt->hindex) && \
ISC_UNLIKELY(rehashing_in_progress(rbt)))
#define TRY_NEXTTABLE(hindex, rbt) \
(hindex == rbt->hindex && rehashing_in_progress(rbt))
static inline void
rotate_left(dns_rbtnode_t *node, dns_rbtnode_t **rootp);
@ -507,7 +506,7 @@ dns_rbt_addnode(dns_rbt_t *rbt, const dns_name_t *name, dns_rbtnode_t **nodep) {
INSIST(add_name != NULL);
dns_name_clone(name, add_name);
if (ISC_UNLIKELY(rbt->root == NULL)) {
if (rbt->root == NULL) {
result = create_node(rbt->mctx, add_name, &new_current);
if (result == ISC_R_SUCCESS) {
rbt->nodecount++;
@ -738,13 +737,13 @@ dns_rbt_addnode(dns_rbt_t *rbt, const dns_name_t *name, dns_rbtnode_t **nodep) {
}
}
}
} while (ISC_LIKELY(child != NULL));
} while (child != NULL);
if (ISC_LIKELY(result == ISC_R_SUCCESS)) {
if (result == ISC_R_SUCCESS) {
result = create_node(rbt->mctx, add_name, &new_current);
}
if (ISC_LIKELY(result == ISC_R_SUCCESS)) {
if (result == ISC_R_SUCCESS) {
if (*root == NULL) {
UPPERNODE(new_current) = current;
} else {
@ -828,7 +827,7 @@ dns_rbt_findnode(dns_rbt_t *rbt, const dns_name_t *name, dns_name_t *foundname,
dns_rbtnodechain_reset(chain);
}
if (ISC_UNLIKELY(rbt->root == NULL)) {
if (rbt->root == NULL) {
return (ISC_R_NOTFOUND);
}
@ -858,7 +857,7 @@ dns_rbt_findnode(dns_rbt_t *rbt, const dns_name_t *name, dns_name_t *foundname,
saved_result = ISC_R_SUCCESS;
current = rbt->root;
while (ISC_LIKELY(current != NULL)) {
while (current != NULL) {
NODENAME(current, &current_name);
compared = dns_name_fullcompare(search_name, &current_name,
&order, &common_labels);
@ -945,7 +944,7 @@ dns_rbt_findnode(dns_rbt_t *rbt, const dns_name_t *name, dns_name_t *foundname,
{
dns_name_t hnode_name;
if (ISC_LIKELY(hashval != HASHVAL(hnode))) {
if (hashval != HASHVAL(hnode)) {
continue;
}
/*
@ -954,15 +953,13 @@ dns_rbt_findnode(dns_rbt_t *rbt, const dns_name_t *name, dns_name_t *foundname,
* that we don't match a labelsequence from some
* other subdomain.
*/
if (ISC_LIKELY(get_upper_node(hnode) !=
up_current)) {
if (get_upper_node(hnode) != up_current) {
continue;
}
dns_name_init(&hnode_name, NULL);
NODENAME(hnode, &hnode_name);
if (ISC_LIKELY(dns_name_equal(&hnode_name,
&hash_name))) {
if (dns_name_equal(&hnode_name, &hash_name)) {
break;
}
}
@ -1760,10 +1757,10 @@ static inline void
hash_node(dns_rbt_t *rbt, dns_rbtnode_t *node, const dns_name_t *name) {
REQUIRE(DNS_RBTNODE_VALID(node));
if (ISC_UNLIKELY(rehashing_in_progress(rbt))) {
if (rehashing_in_progress(rbt)) {
/* Rehash in progress */
hashtable_rehash_one(rbt);
} else if (ISC_UNLIKELY(hashtable_is_overcommited(rbt))) {
} else if (hashtable_is_overcommited(rbt)) {
/* Rehash requested */
maybe_rehash(rbt, rbt->nodecount);
}

View File

@ -9360,7 +9360,7 @@ setownercase(rdatasetheader_t *header, const dns_name_t *name) {
}
}
RDATASET_ATTR_SET(header, RDATASET_ATTR_CASESET);
if (ISC_LIKELY(fully_lower)) {
if (fully_lower) {
RDATASET_ATTR_SET(header, RDATASET_ATTR_CASEFULLYLOWER);
}
}
@ -9399,7 +9399,7 @@ rdataset_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name) {
goto unlock;
}
if (ISC_LIKELY(CASEFULLYLOWER(header))) {
if (CASEFULLYLOWER(header)) {
for (size_t i = 0; i < name->length; i++) {
name->ndata[i] = tolower(name->ndata[i]);
}
@ -9568,7 +9568,7 @@ static void
maybe_rehash_gluetable(rbtdb_version_t *version) {
size_t overcommit = HASHSIZE(version->glue_table_bits) *
RBTDB_GLUE_TABLE_OVERCOMMIT;
if (ISC_LIKELY(version->glue_table_nodecount < overcommit)) {
if (version->glue_table_nodecount < overcommit) {
return;
}
@ -9775,7 +9775,7 @@ restart:
dns_name_t *gluename = dns_fixedname_name(&ge->fixedname);
result = dns_message_gettempname(msg, &name);
if (ISC_UNLIKELY(result != ISC_R_SUCCESS)) {
if (result != ISC_R_SUCCESS) {
goto no_glue;
}
@ -9783,7 +9783,7 @@ restart:
if (dns_rdataset_isassociated(&ge->rdataset_a)) {
result = dns_message_gettemprdataset(msg, &rdataset_a);
if (ISC_UNLIKELY(result != ISC_R_SUCCESS)) {
if (result != ISC_R_SUCCESS) {
dns_message_puttempname(msg, &name);
goto no_glue;
}
@ -9792,7 +9792,7 @@ restart:
if (dns_rdataset_isassociated(&ge->sigrdataset_a)) {
result = dns_message_gettemprdataset(msg,
&sigrdataset_a);
if (ISC_UNLIKELY(result != ISC_R_SUCCESS)) {
if (result != ISC_R_SUCCESS) {
if (rdataset_a != NULL) {
dns_message_puttemprdataset(
msg, &rdataset_a);
@ -9805,7 +9805,7 @@ restart:
if (dns_rdataset_isassociated(&ge->rdataset_aaaa)) {
result = dns_message_gettemprdataset(msg,
&rdataset_aaaa);
if (ISC_UNLIKELY(result != ISC_R_SUCCESS)) {
if (result != ISC_R_SUCCESS) {
dns_message_puttempname(msg, &name);
if (rdataset_a != NULL) {
dns_message_puttemprdataset(
@ -9822,7 +9822,7 @@ restart:
if (dns_rdataset_isassociated(&ge->sigrdataset_aaaa)) {
result = dns_message_gettemprdataset(msg,
&sigrdataset_aaaa);
if (ISC_UNLIKELY(result != ISC_R_SUCCESS)) {
if (result != ISC_R_SUCCESS) {
dns_message_puttempname(msg, &name);
if (rdataset_a != NULL) {
dns_message_puttemprdataset(
@ -9840,7 +9840,7 @@ restart:
}
}
if (ISC_LIKELY(rdataset_a != NULL)) {
if (rdataset_a != NULL) {
dns_rdataset_clone(&ge->rdataset_a, rdataset_a);
ISC_LIST_APPEND(name->list, rdataset_a, link);
}

View File

@ -406,18 +406,17 @@ towiresorted(dns_rdataset_t *rdataset, const dns_name_t *owner_name,
}
INSIST(i == count);
if (ISC_LIKELY(want_random)) {
if (want_random) {
seed = isc_random32();
}
if (ISC_UNLIKELY(want_cyclic) &&
(rdataset->count != DNS_RDATASET_COUNT_UNDEFINED))
{
if (want_cyclic &&
(rdataset->count != DNS_RDATASET_COUNT_UNDEFINED)) {
j = rdataset->count % count;
}
for (i = 0; i < count; i++) {
if (ISC_LIKELY(want_random)) {
if (want_random) {
swap_rdata(in, j, j + seed % (count - j));
}

View File

@ -4963,7 +4963,7 @@ same_question(fetchctx_t *fctx, dns_message_t *message) {
/*
* XXXRTH Currently we support only one question.
*/
if (ISC_UNLIKELY(message->counts[DNS_SECTION_QUESTION] == 0)) {
if (message->counts[DNS_SECTION_QUESTION] == 0) {
if ((message->flags & DNS_MESSAGEFLAG_TC) != 0) {
/*
* If TC=1 and the question section is empty, we
@ -4987,7 +4987,7 @@ same_question(fetchctx_t *fctx, dns_message_t *message) {
log_formerr(fctx, "empty question section");
return (DNS_R_FORMERR);
}
} else if (ISC_UNLIKELY(message->counts[DNS_SECTION_QUESTION] > 1)) {
} else if (message->counts[DNS_SECTION_QUESTION] > 1) {
log_formerr(fctx, "too many questions");
return (DNS_R_FORMERR);
}

View File

@ -1087,7 +1087,7 @@ diff_keys(const dns_rpz_cidr_key_t *key1, dns_rpz_prefix_t prefix1,
*/
for (i = 0; bit < maxbit; i++, bit += DNS_RPZ_CIDR_WORD_BITS) {
delta = key1->w[i] ^ key2->w[i];
if (ISC_UNLIKELY(delta != 0)) {
if (delta != 0) {
#ifdef HAVE_BUILTIN_CLZ
bit += __builtin_clz(delta);
#else /* ifdef HAVE_BUILTIN_CLZ */

View File

@ -45,7 +45,6 @@ libisc_la_HEADERS = \
include/isc/iterated_hash.h \
include/isc/lang.h \
include/isc/lex.h \
include/isc/likely.h \
include/isc/list.h \
include/isc/log.h \
include/isc/magic.h \

View File

@ -292,7 +292,7 @@ void
isc__buffer_putuint8(isc_buffer_t *b, uint8_t val) {
isc_result_t result;
REQUIRE(ISC_BUFFER_VALID(b));
if (ISC_UNLIKELY(b->autore)) {
if (b->autore) {
result = isc_buffer_reserve(&b, 1);
REQUIRE(result == ISC_R_SUCCESS);
}
@ -326,7 +326,7 @@ void
isc__buffer_putuint16(isc_buffer_t *b, uint16_t val) {
isc_result_t result;
REQUIRE(ISC_BUFFER_VALID(b));
if (ISC_UNLIKELY(b->autore)) {
if (b->autore) {
result = isc_buffer_reserve(&b, 2);
REQUIRE(result == ISC_R_SUCCESS);
}
@ -339,7 +339,7 @@ void
isc__buffer_putuint24(isc_buffer_t *b, uint32_t val) {
isc_result_t result;
REQUIRE(ISC_BUFFER_VALID(b));
if (ISC_UNLIKELY(b->autore)) {
if (b->autore) {
result = isc_buffer_reserve(&b, 3);
REQUIRE(result == ISC_R_SUCCESS);
}
@ -375,7 +375,7 @@ void
isc__buffer_putuint32(isc_buffer_t *b, uint32_t val) {
isc_result_t result;
REQUIRE(ISC_BUFFER_VALID(b));
if (ISC_UNLIKELY(b->autore)) {
if (b->autore) {
result = isc_buffer_reserve(&b, 4);
REQUIRE(result == ISC_R_SUCCESS);
}
@ -416,7 +416,7 @@ isc__buffer_putuint48(isc_buffer_t *b, uint64_t val) {
uint32_t vallo;
REQUIRE(ISC_BUFFER_VALID(b));
if (ISC_UNLIKELY(b->autore)) {
if (b->autore) {
result = isc_buffer_reserve(&b, 6);
REQUIRE(result == ISC_R_SUCCESS);
}
@ -433,7 +433,7 @@ isc__buffer_putmem(isc_buffer_t *b, const unsigned char *base,
unsigned int length) {
isc_result_t result;
REQUIRE(ISC_BUFFER_VALID(b));
if (ISC_UNLIKELY(b->autore)) {
if (b->autore) {
result = isc_buffer_reserve(&b, length);
REQUIRE(result == ISC_R_SUCCESS);
}
@ -455,7 +455,7 @@ isc__buffer_putstr(isc_buffer_t *b, const char *source) {
* Do not use ISC__BUFFER_PUTSTR(), so strlen is only done once.
*/
l = strlen(source);
if (ISC_UNLIKELY(b->autore)) {
if (b->autore) {
result = isc_buffer_reserve(&b, l);
REQUIRE(result == ISC_R_SUCCESS);
}
@ -478,7 +478,7 @@ isc_buffer_putdecint(isc_buffer_t *b, int64_t v) {
/* xxxwpk do it more low-level way ? */
l = snprintf(buf, 21, "%" PRId64, v);
RUNTIME_CHECK(l <= 21);
if (ISC_UNLIKELY(b->autore)) {
if (b->autore) {
result = isc_buffer_reserve(&b, l);
REQUIRE(result == ISC_R_SUCCESS);
}
@ -515,7 +515,7 @@ isc_buffer_copyregion(isc_buffer_t *b, const isc_region_t *r) {
REQUIRE(ISC_BUFFER_VALID(b));
REQUIRE(r != NULL);
if (ISC_UNLIKELY(b->autore)) {
if (b->autore) {
result = isc_buffer_reserve(&b, r->length);
if (result != ISC_R_SUCCESS) {
return (result);
@ -623,7 +623,7 @@ isc_buffer_printf(isc_buffer_t *b, const char *format, ...) {
return (ISC_R_FAILURE);
}
if (ISC_UNLIKELY(b->autore)) {
if (b->autore) {
result = isc_buffer_reserve(&b, n + 1);
if (result != ISC_R_SUCCESS) {
return (result);

View File

@ -15,7 +15,6 @@
#include "entropy_private.h"
#include "isc/hash.h" /* IWYU pragma: keep */
#include "isc/likely.h"
#include "isc/once.h"
#include "isc/random.h"
#include "isc/result.h"
@ -74,7 +73,7 @@ static uint8_t maptolower[] = {
const void *
isc_hash_get_initializer(void) {
if (ISC_UNLIKELY(!hash_initialized)) {
if (!hash_initialized) {
RUNTIME_CHECK(
isc_once_do(&isc_hash_once, isc_hash_initialize) ==
ISC_R_SUCCESS);
@ -91,7 +90,7 @@ isc_hash_set_initializer(const void *initializer) {
* Ensure that isc_hash_initialize() is not called after
* isc_hash_set_initializer() is called.
*/
if (ISC_UNLIKELY(!hash_initialized)) {
if (!hash_initialized) {
RUNTIME_CHECK(
isc_once_do(&isc_hash_once, isc_hash_initialize) ==
ISC_R_SUCCESS);

View File

@ -31,7 +31,7 @@ isc_hmac_new(void) {
void
isc_hmac_free(isc_hmac_t *hmac) {
if (ISC_UNLIKELY(hmac == NULL)) {
if (hmac == NULL) {
return;
}
@ -70,7 +70,7 @@ isc_result_t
isc_hmac_update(isc_hmac_t *hmac, const unsigned char *buf, const size_t len) {
REQUIRE(hmac != NULL);
if (ISC_UNLIKELY(buf == NULL || len == 0)) {
if (buf == NULL || len == 0) {
return (ISC_R_SUCCESS);
}

View File

@ -16,7 +16,6 @@
#include <isc/attributes.h>
#include <isc/lang.h>
#include <isc/likely.h>
ISC_LANG_BEGINDECLS
@ -42,25 +41,25 @@ const char *
isc_assertion_typetotext(isc_assertiontype_t type);
#define ISC_REQUIRE(cond) \
((void)(ISC_LIKELY(cond) || \
((void)((cond) || \
((isc_assertion_failed)(__FILE__, __LINE__, \
isc_assertiontype_require, #cond), \
0)))
#define ISC_ENSURE(cond) \
((void)(ISC_LIKELY(cond) || \
((void)((cond) || \
((isc_assertion_failed)(__FILE__, __LINE__, \
isc_assertiontype_ensure, #cond), \
0)))
#define ISC_INSIST(cond) \
((void)(ISC_LIKELY(cond) || \
((void)((cond) || \
((isc_assertion_failed)(__FILE__, __LINE__, \
isc_assertiontype_insist, #cond), \
0)))
#define ISC_INVARIANT(cond) \
((void)(ISC_LIKELY(cond) || \
((void)((cond) || \
((isc_assertion_failed)(__FILE__, __LINE__, \
isc_assertiontype_invariant, #cond), \
0)))

View File

@ -104,7 +104,6 @@
#include <isc/assertions.h>
#include <isc/formatcheck.h>
#include <isc/lang.h>
#include <isc/likely.h>
#include <isc/magic.h>
#include <isc/types.h>
@ -899,7 +898,7 @@ ISC_LANG_ENDDECLS
#define ISC__BUFFER_PUTMEM(_b, _base, _length) \
do { \
if (ISC_UNLIKELY((_b)->autore)) { \
if ((_b)->autore) { \
isc_buffer_t *_tmp = _b; \
ISC_REQUIRE(isc_buffer_reserve(&_tmp, _length) == \
ISC_R_SUCCESS); \
@ -917,7 +916,7 @@ ISC_LANG_ENDDECLS
unsigned int _length; \
unsigned char *_cp; \
_length = (unsigned int)strlen(_source); \
if (ISC_UNLIKELY((_b)->autore)) { \
if ((_b)->autore) { \
isc_buffer_t *_tmp = _b; \
ISC_REQUIRE(isc_buffer_reserve(&_tmp, _length) == \
ISC_R_SUCCESS); \
@ -933,7 +932,7 @@ ISC_LANG_ENDDECLS
unsigned char *_cp; \
/* evaluate (_val) only once */ \
uint8_t _val2 = (_val); \
if (ISC_UNLIKELY((_b)->autore)) { \
if ((_b)->autore) { \
isc_buffer_t *_tmp = _b; \
ISC_REQUIRE(isc_buffer_reserve(&_tmp, 1) == \
ISC_R_SUCCESS); \
@ -949,7 +948,7 @@ ISC_LANG_ENDDECLS
unsigned char *_cp; \
/* evaluate (_val) only once */ \
uint16_t _val2 = (_val); \
if (ISC_UNLIKELY((_b)->autore)) { \
if ((_b)->autore) { \
isc_buffer_t *_tmp = _b; \
ISC_REQUIRE(isc_buffer_reserve(&_tmp, 2) == \
ISC_R_SUCCESS); \
@ -966,7 +965,7 @@ ISC_LANG_ENDDECLS
unsigned char *_cp; \
/* evaluate (_val) only once */ \
uint32_t _val2 = (_val); \
if (ISC_UNLIKELY((_b)->autore)) { \
if ((_b)->autore) { \
isc_buffer_t *_tmp = _b; \
ISC_REQUIRE(isc_buffer_reserve(&_tmp, 3) == \
ISC_R_SUCCESS); \
@ -984,7 +983,7 @@ ISC_LANG_ENDDECLS
unsigned char *_cp; \
/* evaluate (_val) only once */ \
uint32_t _val2 = (_val); \
if (ISC_UNLIKELY((_b)->autore)) { \
if ((_b)->autore) { \
isc_buffer_t *_tmp = _b; \
ISC_REQUIRE(isc_buffer_reserve(&_tmp, 4) == \
ISC_R_SUCCESS); \

View File

@ -18,7 +18,6 @@
#include <isc/attributes.h>
#include <isc/formatcheck.h>
#include <isc/lang.h>
#include <isc/likely.h>
ISC_LANG_BEGINDECLS
@ -44,7 +43,7 @@ ISC_NORETURN void
isc_error_runtimecheck(const char *, int, const char *);
#define ISC_ERROR_RUNTIMECHECK(cond) \
((void)(ISC_LIKELY(cond) || \
((void)((cond) || \
((isc_error_runtimecheck)(__FILE__, __LINE__, #cond), 0)))
ISC_LANG_ENDDECLS

View File

@ -1,28 +0,0 @@
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#pragma once
/*%
* Performance
*/
#ifdef CPPCHECK
#define ISC_LIKELY(x) (x)
#define ISC_UNLIKELY(x) (x)
#else /* ifdef CPPCHECK */
#ifdef HAVE_BUILTIN_EXPECT
#define ISC_LIKELY(x) __builtin_expect(!!(x), 1)
#define ISC_UNLIKELY(x) __builtin_expect(!!(x), 0)
#else /* ifdef HAVE_BUILTIN_EXPECT */
#define ISC_LIKELY(x) (x)
#define ISC_UNLIKELY(x) (x)
#endif /* ifdef HAVE_BUILTIN_EXPECT */
#endif /* ifdef CPPCHECK */

View File

@ -11,8 +11,6 @@
#pragma once
#include <isc/likely.h>
/*! \file isc/magic.h */
typedef struct {
@ -25,8 +23,7 @@ typedef struct {
* The intent of this is to allow magic numbers to be checked even though
* the object is otherwise opaque.
*/
#define ISC_MAGIC_VALID(a, b) \
(ISC_LIKELY((a) != NULL) && \
ISC_LIKELY(((const isc__magic_t *)(a))->magic == (b)))
#define ISC_MAGIC_VALID(a, b) \
((a) != NULL && ((const isc__magic_t *)(a))->magic == (b))
#define ISC_MAGIC(a, b, c, d) ((a) << 24 | (b) << 16 | (c) << 8 | (d))

View File

@ -195,7 +195,6 @@
/*%
* Performance
*/
#include <isc/likely.h>
#ifdef HAVE_BUILTIN_UNREACHABLE
#define ISC_UNREACHABLE() __builtin_unreachable();

View File

@ -29,7 +29,7 @@ isc_md_new(void) {
void
isc_md_free(isc_md_t *md) {
if (ISC_UNLIKELY(md == NULL)) {
if (md == NULL) {
return;
}
@ -66,7 +66,7 @@ isc_result_t
isc_md_update(isc_md_t *md, const unsigned char *buf, const size_t len) {
REQUIRE(md != NULL);
if (ISC_UNLIKELY(buf == NULL || len == 0)) {
if (buf == NULL || len == 0) {
return (ISC_R_SUCCESS);
}

View File

@ -187,9 +187,8 @@ struct isc_mempool {
#else /* if !ISC_MEM_TRACKLINES */
#define TRACE_OR_RECORD (ISC_MEM_DEBUGTRACE | ISC_MEM_DEBUGRECORD)
#define SHOULD_TRACE_OR_RECORD(ptr) \
(ISC_UNLIKELY((isc_mem_debugging & TRACE_OR_RECORD) != 0) && \
ptr != NULL)
#define SHOULD_TRACE_OR_RECORD(ptr) \
((isc_mem_debugging & TRACE_OR_RECORD) != 0 && ptr != NULL)
#define ADD_TRACE(a, b, c, d, e) \
if (SHOULD_TRACE_OR_RECORD(b)) { \
@ -303,8 +302,8 @@ delete_trace_entry(isc_mem_t *mctx, const void *ptr, size_t size,
idx = hash % DEBUG_TABLE_COUNT;
dl = ISC_LIST_HEAD(mctx->debuglist[idx]);
while (ISC_LIKELY(dl != NULL)) {
if (ISC_UNLIKELY(dl->ptr == ptr)) {
while (dl != NULL) {
if (dl->ptr == ptr) {
ISC_LIST_UNLINK(mctx->debuglist[idx], dl, link);
decrement_malloced(mctx, sizeof(*dl));
sdallocx(dl, sizeof(*dl), 0);
@ -325,7 +324,7 @@ unlock:
#endif /* ISC_MEM_TRACKLINES */
#define ADJUST_ZERO_ALLOCATION_SIZE(s) \
if (ISC_UNLIKELY(s == 0)) { \
if (s == 0) { \
s = ZERO_ALLOCATION_SIZE; \
}
@ -341,7 +340,7 @@ mem_get(isc_mem_t *ctx, size_t size) {
ret = mallocx(size, 0);
INSIST(ret != NULL);
if (ISC_UNLIKELY((ctx->flags & ISC_MEMFLAG_FILL) != 0)) {
if ((ctx->flags & ISC_MEMFLAG_FILL) != 0) {
memset(ret, 0xbe, size); /* Mnemonic for "beef". */
}
@ -356,7 +355,7 @@ static inline void
mem_put(isc_mem_t *ctx, void *mem, size_t size) {
ADJUST_ZERO_ALLOCATION_SIZE(size);
if (ISC_UNLIKELY((ctx->flags & ISC_MEMFLAG_FILL) != 0)) {
if ((ctx->flags & ISC_MEMFLAG_FILL) != 0) {
memset(mem, 0xde, size); /* Mnemonic for "dead". */
}
sdallocx(mem, size, 0);
@ -371,7 +370,7 @@ mem_realloc(isc_mem_t *ctx, void *old_ptr, size_t old_size, size_t new_size) {
new_ptr = rallocx(old_ptr, new_size, 0);
INSIST(new_ptr != NULL);
if (ISC_UNLIKELY((ctx->flags & ISC_MEMFLAG_FILL) != 0)) {
if ((ctx->flags & ISC_MEMFLAG_FILL) != 0) {
ssize_t diff_size = new_size - old_size;
void *diff_ptr = (uint8_t *)new_ptr + old_size;
if (diff_size > 0) {
@ -483,7 +482,7 @@ mem_create(isc_mem_t **ctxp, unsigned int flags) {
ISC_LIST_INIT(ctx->pools);
#if ISC_MEM_TRACKLINES
if (ISC_UNLIKELY((isc_mem_debugging & ISC_MEM_DEBUGRECORD) != 0)) {
if ((isc_mem_debugging & ISC_MEM_DEBUGRECORD) != 0) {
unsigned int i;
ctx->debuglist =
@ -524,7 +523,7 @@ destroy(isc_mem_t *ctx) {
INSIST(ISC_LIST_EMPTY(ctx->pools));
#if ISC_MEM_TRACKLINES
if (ISC_UNLIKELY(ctx->debuglist != NULL)) {
if (ctx->debuglist != NULL) {
debuglink_t *dl;
for (i = 0; i < DEBUG_TABLE_COUNT; i++) {
for (dl = ISC_LIST_HEAD(ctx->debuglist[i]); dl != NULL;
@ -903,10 +902,10 @@ isc__mem_reget(isc_mem_t *ctx, void *old_ptr, size_t old_size,
size_t new_size FLARG) {
void *new_ptr = NULL;
if (ISC_UNLIKELY(old_ptr == NULL)) {
if (old_ptr == NULL) {
REQUIRE(old_size == 0);
new_ptr = isc__mem_get(ctx, new_size FLARG_PASS);
} else if (ISC_UNLIKELY(new_size == 0)) {
} else if (new_size == 0) {
isc__mem_put(ctx, old_ptr, old_size FLARG_PASS);
} else {
DELETE_TRACE(ctx, old_ptr, old_size, file, line);
@ -935,9 +934,9 @@ isc__mem_reallocate(isc_mem_t *ctx, void *old_ptr, size_t new_size FLARG) {
REQUIRE(VALID_CONTEXT(ctx));
if (ISC_UNLIKELY(old_ptr == NULL)) {
if (old_ptr == NULL) {
new_ptr = isc__mem_allocate(ctx, new_size FLARG_PASS);
} else if (ISC_UNLIKELY(new_size == 0)) {
} else if (new_size == 0) {
isc__mem_free(ctx, old_ptr FLARG_PASS);
} else {
size_t old_size = sallocx(old_ptr, 0);
@ -1289,7 +1288,7 @@ isc__mempool_get(isc_mempool_t *restrict mpctx FLARG) {
mpctx->allocated++;
if (ISC_UNLIKELY(mpctx->items == NULL)) {
if (mpctx->items == NULL) {
isc_mem_t *mctx = mpctx->mctx;
const size_t fillcount = mpctx->fillcount;
/*
@ -1442,7 +1441,7 @@ isc__mem_checkdestroyed(void) {
LOCK(&contextslock);
if (!ISC_LIST_EMPTY(contexts)) {
#if ISC_MEM_TRACKLINES
if (ISC_UNLIKELY((isc_mem_debugging & TRACE_OR_RECORD) != 0)) {
if ((isc_mem_debugging & TRACE_OR_RECORD) != 0) {
print_contexts(file);
}
#endif /* if ISC_MEM_TRACKLINES */

View File

@ -126,7 +126,7 @@ tls_senddone(isc_nmhandle_t *handle, isc_result_t eresult, void *cbarg) {
/* We are tying to avoid a memory allocation for small write
* requests. See the mirroring code in the tls_send_outgoing()
* function. */
if (ISC_UNLIKELY(send_req->data.length > sizeof(send_req->smallbuf))) {
if (send_req->data.length > sizeof(send_req->smallbuf)) {
isc_mem_put(handle->sock->mgr->mctx, send_req->data.base,
send_req->data.length);
} else {
@ -247,7 +247,7 @@ tls_send_outgoing(isc_nmsocket_t *sock, bool finish, isc_nmhandle_t *tlshandle,
.data.length = pending };
/* Let's try to avoid a memory allocation for small write requests */
if (ISC_UNLIKELY((size_t)pending > sizeof(send_req->smallbuf))) {
if ((size_t)pending > sizeof(send_req->smallbuf)) {
send_req->data.base = isc_mem_get(sock->mgr->mctx, pending);
} else {
send_req->data.base = &send_req->smallbuf[0];

View File

@ -1369,9 +1369,8 @@ query_getdb(ns_client_t *client, dns_name_t *name, dns_rdatatype_t qtype,
* If # zone labels < # name labels, try to find an even better match
* Only try if DLZ drivers are loaded for this view
*/
if (ISC_UNLIKELY(zonelabels < namelabels &&
!ISC_LIST_EMPTY(client->view->dlz_searched)))
{
if (zonelabels < namelabels &&
!ISC_LIST_EMPTY(client->view->dlz_searched)) {
dns_clientinfomethods_t cm;
dns_clientinfo_t ci;
dns_db_t *tdbp;
@ -5497,10 +5496,9 @@ ns__query_start(query_ctx_t *qctx) {
result = query_getdb(qctx->client, qctx->client->query.qname,
qctx->qtype, qctx->options, &qctx->zone, &qctx->db,
&qctx->version, &qctx->is_zone);
if (ISC_UNLIKELY((result != ISC_R_SUCCESS || !qctx->is_zone) &&
qctx->qtype == dns_rdatatype_ds &&
!RECURSIONOK(qctx->client) &&
(qctx->options & DNS_GETDB_NOEXACT) != 0))
if ((result != ISC_R_SUCCESS || !qctx->is_zone) &&
qctx->qtype == dns_rdatatype_ds && !RECURSIONOK(qctx->client) &&
(qctx->options & DNS_GETDB_NOEXACT) != 0)
{
/*
* This is a non-recursive QTYPE=DS query with QNAME whose
@ -5655,7 +5653,7 @@ qctx_prepare_buffers(query_ctx_t *qctx, isc_buffer_t *buffer) {
REQUIRE(buffer != NULL);
qctx->dbuf = ns_client_getnamebuf(qctx->client);
if (ISC_UNLIKELY(qctx->dbuf == NULL)) {
if (qctx->dbuf == NULL) {
CCTRACE(ISC_LOG_ERROR,
"qctx_prepare_buffers: ns_client_getnamebuf "
"failed");
@ -5663,7 +5661,7 @@ qctx_prepare_buffers(query_ctx_t *qctx, isc_buffer_t *buffer) {
}
qctx->fname = ns_client_newname(qctx->client, qctx->dbuf, buffer);
if (ISC_UNLIKELY(qctx->fname == NULL)) {
if (qctx->fname == NULL) {
CCTRACE(ISC_LOG_ERROR,
"qctx_prepare_buffers: ns_client_newname failed");
@ -5671,7 +5669,7 @@ qctx_prepare_buffers(query_ctx_t *qctx, isc_buffer_t *buffer) {
}
qctx->rdataset = ns_client_newrdataset(qctx->client);
if (ISC_UNLIKELY(qctx->rdataset == NULL)) {
if (qctx->rdataset == NULL) {
CCTRACE(ISC_LOG_ERROR,
"qctx_prepare_buffers: ns_client_newrdataset failed");
goto error;

View File

@ -1654,7 +1654,6 @@
./lib/isc/include/isc/iterated_hash.h C 2008,2014,2016,2018,2019,2020,2021
./lib/isc/include/isc/lang.h C 1999,2000,2001,2004,2005,2006,2007,2016,2018,2019,2020,2021
./lib/isc/include/isc/lex.h C 1998,1999,2000,2001,2002,2004,2005,2007,2008,2015,2016,2017,2018,2019,2020,2021
./lib/isc/include/isc/likely.h C 2017,2018,2019,2020,2021
./lib/isc/include/isc/list.h C 1997,1998,1999,2000,2001,2002,2004,2006,2007,2011,2012,2013,2016,2018,2019,2020,2021
./lib/isc/include/isc/log.h C 1999,2000,2001,2002,2004,2005,2006,2007,2009,2014,2016,2017,2018,2019,2020,2021
./lib/isc/include/isc/magic.h C 1999,2000,2001,2004,2005,2006,2007,2016,2017,2018,2019,2020,2021