diff --git a/ecmascript/compiler/builtins/linked_hashtable_stub_builder.cpp b/ecmascript/compiler/builtins/linked_hashtable_stub_builder.cpp index 2404124e5e30fe631a2e419773de93d419762793..9a4924d6ef178f6633629acb05f56accd62b73a2 100644 --- a/ecmascript/compiler/builtins/linked_hashtable_stub_builder.cpp +++ b/ecmascript/compiler/builtins/linked_hashtable_stub_builder.cpp @@ -270,7 +270,7 @@ GateRef LinkedHashTableStubBuilder:: template GateRef LinkedHashTableStubBuilder::FindElement( - GateRef linkedTable, GateRef key) + GateRef linkedTable, GateRef key, GateRef hash) { auto env = GetEnvironment(); Label entryLabel(env); @@ -282,7 +282,6 @@ GateRef LinkedHashTableStubBuilder:: Branch(IsKey(key), &isKey, &exit); Bind(&isKey); { - GateRef hash = GetHash(key); GateRef bucket = HashToBucket(linkedTable, hash); GateRef index = BucketToIndex(bucket); DEFVARIABLE(entry, VariableType::JS_ANY(), GetElement(linkedTable, index)); @@ -543,7 +542,8 @@ GateRef LinkedHashTableStubBuilder:: env->SubCfgEntry(&cfgEntry); Label exit(env); DEFVARIABLE(res, VariableType::JS_ANY(), linkedTable); - GateRef entry = FindElement(linkedTable, key); + GateRef hash = GetHash(key); + GateRef entry = FindElement(linkedTable, key, hash); Label findEntry(env); Label notFind(env); Branch(Int32Equal(entry, Int32(-1)), ¬Find, &findEntry); @@ -556,7 +556,6 @@ GateRef LinkedHashTableStubBuilder:: { GateRef newTable = GrowCapacity(linkedTable, Int32(1)); res = newTable; - GateRef hash = GetHash(key); GateRef bucket = HashToBucket(newTable, hash); GateRef numberOfElements = GetNumberOfElements(newTable); @@ -589,7 +588,8 @@ GateRef LinkedHashTableStubBuilder:: env->SubCfgEntry(&cfgEntry); Label exit(env); DEFVARIABLE(res, VariableType::JS_ANY(), TaggedFalse()); - GateRef entry = FindElement(linkedTable, key); + GateRef hash = GetHash(key); + GateRef entry = FindElement(linkedTable, key, hash); Label findEntry(env); Branch(Int32Equal(entry, Int32(-1)), &exit, &findEntry); Bind(&findEntry); @@ -619,7 +619,8 @@ GateRef LinkedHashTableStubBuilder:: env->SubCfgEntry(&cfgEntry); Label exit(env); DEFVARIABLE(res, VariableType::JS_ANY(), TaggedFalse()); - GateRef entry = FindElement(linkedTable, key); + GateRef hash = GetHash(key); + GateRef entry = FindElement(linkedTable, key, hash); Label findEntry(env); Branch(Int32Equal(entry, Int32(-1)), &exit, &findEntry); Bind(&findEntry); diff --git a/ecmascript/compiler/builtins/linked_hashtable_stub_builder.h b/ecmascript/compiler/builtins/linked_hashtable_stub_builder.h index 34844e15c3004b8c8062ea11278819af0014e2fe..707adff2264566a3c88d8e664f627298ba526802 100644 --- a/ecmascript/compiler/builtins/linked_hashtable_stub_builder.h +++ b/ecmascript/compiler/builtins/linked_hashtable_stub_builder.h @@ -55,7 +55,7 @@ private: GateRef GetHash(GateRef key); GateRef HashObjectIsMatch(GateRef key, GateRef other); - GateRef FindElement(GateRef linkedTable, GateRef key); + GateRef FindElement(GateRef linkedTable, GateRef key, GateRef hash); GateRef GetKey(GateRef linkedTable, GateRef entry) { GateRef index = EntryToIndex(linkedTable, entry);