Search intern tables in reverse order.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Bug: 181943478
Change-Id: I511ea1828ab5b527390b90149a87e7742a590002
diff --git a/runtime/intern_table.cc b/runtime/intern_table.cc
index 14b8315..7f29655 100644
--- a/runtime/intern_table.cc
+++ b/runtime/intern_table.cc
@@ -337,13 +337,13 @@
size_t num_searched_frozen_tables) {
Locks::intern_table_lock_->AssertHeld(Thread::Current());
auto mid = tables_.begin() + num_searched_frozen_tables;
- for (auto it = tables_.begin(); it != mid; ++it) {
- DCHECK(it->set_.FindWithHash(GcRoot<mirror::String>(s), hash) == it->set_.end());
+ for (Table::InternalTable& table : MakeIterationRange(tables_.begin(), mid)) {
+ DCHECK(table.set_.FindWithHash(GcRoot<mirror::String>(s), hash) == table.set_.end());
}
- for (auto it = mid, end = tables_.end(); it != end; ++it) {
- auto set_it = it->set_.FindWithHash(GcRoot<mirror::String>(s), hash);
- if (set_it != it->set_.end()) {
- return set_it->Read();
+ for (Table::InternalTable& table : ReverseRange(MakeIterationRange(mid, tables_.end()))) {
+ auto it = table.set_.FindWithHash(GcRoot<mirror::String>(s), hash);
+ if (it != table.set_.end()) {
+ return it->Read();
}
}
return nullptr;
@@ -352,7 +352,7 @@
FLATTEN
ObjPtr<mirror::String> InternTable::Table::Find(const Utf8String& string, uint32_t hash) {
Locks::intern_table_lock_->AssertHeld(Thread::Current());
- for (InternalTable& table : tables_) {
+ for (InternalTable& table : ReverseRange(tables_)) {
auto it = table.set_.FindWithHash(string, hash);
if (it != table.set_.end()) {
return it->Read();