Skip to content

Commit

Permalink
Fix performance degradation introduced in c2547ab
Browse files Browse the repository at this point in the history
After discussing with someone, our current running theory is that the local
variable forces the compiler to reserve an additional register for the whole
lifespan of the function. Dropping it and just loading the value should restore
the previous code generation.

Closes GH-9876
  • Loading branch information
Girgias committed Nov 22, 2022
1 parent 6e87485 commit 8645657
Showing 1 changed file with 3 additions and 4 deletions.
7 changes: 3 additions & 4 deletions Zend/zend_hash.c
Original file line number Diff line number Diff line change
Expand Up @@ -658,15 +658,14 @@ ZEND_API void ZEND_FASTCALL zend_hash_iterators_advance(HashTable *ht, HashPosit
/* Hash must be known and precomputed before */
static zend_always_inline Bucket *zend_hash_find_bucket(const HashTable *ht, const zend_string *key)
{
zend_ulong key_hash = ZSTR_H(key);
uint32_t nIndex;
uint32_t idx;
Bucket *p, *arData;

ZEND_ASSERT(key_hash != 0 && "Hash must be known");
ZEND_ASSERT(ZSTR_H(key) != 0 && "Hash must be known");

arData = ht->arData;
nIndex = key_hash | ht->nTableMask;
nIndex = ZSTR_H(key) | ht->nTableMask;
idx = HT_HASH_EX(arData, nIndex);

if (UNEXPECTED(idx == HT_INVALID_IDX)) {
Expand All @@ -678,7 +677,7 @@ static zend_always_inline Bucket *zend_hash_find_bucket(const HashTable *ht, con
}

while (1) {
if (p->h == key_hash &&
if (p->h == ZSTR_H(key) &&
EXPECTED(p->key) &&
zend_string_equal_content(p->key, key)) {
return p;
Expand Down

0 comments on commit 8645657

Please sign in to comment.