From c9da004a1884f54ad69b8b66e585f1ba451e84ee Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 21 Apr 2015 23:27:44 +0300 Subject: [PATCH] Slight zend_hash_find() optimization. --- Zend/zend_hash.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 0dba9f39de..fcb51f6a2f 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -408,13 +408,14 @@ static zend_always_inline Bucket *zend_hash_find_bucket(const HashTable *ht, zen arData = ht->arData; nIndex = h | ht->nTableMask; idx = HT_HASH_EX(arData, nIndex); - while (idx != HT_INVALID_IDX) { + while (EXPECTED(idx != HT_INVALID_IDX)) { p = HT_HASH_TO_BUCKET_EX(arData, idx); - if (p->key == key || /* check for the the same interned string */ - (p->h == h && - p->key && - p->key->len == key->len && - memcmp(p->key->val, key->val, key->len) == 0)) { + if (EXPECTED(p->key == key)) { /* check for the the same interned string */ + return p; + } else if (EXPECTED(p->h == h) && + EXPECTED(p->key) && + EXPECTED(p->key->len == key->len) && + EXPECTED(memcmp(p->key->val, key->val, key->len) == 0)) { return p; } idx = Z_NEXT(p->val); -- 2.50.1