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();