[vm, compiler] Remove compaction of canonical type tables from precompiler.

Canonical tables are now rebuilt during serialization.

TEST=ci
Change-Id: I4666ca1ed73a6f84b3546d35b394395623bf5854
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/200923
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 016356d..62d0044 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -566,10 +566,6 @@
         DropFunctions();
         DropFields();
         TraceTypesFromRetainedClasses();
-        DropTypes();
-        DropFunctionTypes();
-        DropTypeParameters();
-        DropTypeArguments();
 
         // Clear these before dropping classes as they may hold onto otherwise
         // dead instances of classes we will remove or otherwise unused symbols.
@@ -2275,163 +2271,6 @@
          StubCode::TopTypeTypeTest().EntryPoint());
 }
 
-void Precompiler::DropTypes() {
-  ObjectStore* object_store = IG->object_store();
-  GrowableObjectArray& retained_types =
-      GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
-  Array& types_array = Array::Handle(Z);
-  Type& type = Type::Handle(Z);
-  // First drop all the types that are not referenced.
-  {
-    CanonicalTypeSet types_table(Z, object_store->canonical_types());
-    types_array = HashTables::ToArray(types_table, false);
-    for (intptr_t i = 0; i < types_array.Length(); i++) {
-      type ^= types_array.At(i);
-      bool retain = types_to_retain_.HasKey(&type);
-      if (retain) {
-        retained_types.Add(type);
-      } else {
-        type.ClearCanonical();
-        dropped_type_count_++;
-      }
-    }
-    types_table.Release();
-  }
-
-  // Now construct a new type table and save in the object store.
-  const intptr_t dict_size =
-      Utils::RoundUpToPowerOfTwo(retained_types.Length() * 4 / 3);
-  types_array = HashTables::New<CanonicalTypeSet>(dict_size, Heap::kOld);
-  CanonicalTypeSet types_table(Z, types_array.ptr());
-  bool present;
-  for (intptr_t i = 0; i < retained_types.Length(); i++) {
-    type ^= retained_types.At(i);
-    present = types_table.Insert(type);
-    ASSERT(!present);
-  }
-  object_store->set_canonical_types(types_table.Release());
-}
-
-void Precompiler::DropFunctionTypes() {
-  ObjectStore* object_store = IG->object_store();
-  GrowableObjectArray& retained_types =
-      GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
-  Array& types_array = Array::Handle(Z);
-  FunctionType& type = FunctionType::Handle(Z);
-  // First drop all the function types that are not referenced.
-  {
-    CanonicalFunctionTypeSet types_table(
-        Z, object_store->canonical_function_types());
-    types_array = HashTables::ToArray(types_table, false);
-    for (intptr_t i = 0; i < types_array.Length(); i++) {
-      type ^= types_array.At(i);
-      bool retain = functiontypes_to_retain_.HasKey(&type);
-      if (retain) {
-        retained_types.Add(type);
-      } else {
-        type.ClearCanonical();
-        dropped_functiontype_count_++;
-      }
-    }
-    types_table.Release();
-  }
-
-  // Now construct a new function type table and save in the object store.
-  const intptr_t dict_size =
-      Utils::RoundUpToPowerOfTwo(retained_types.Length() * 4 / 3);
-  types_array =
-      HashTables::New<CanonicalFunctionTypeSet>(dict_size, Heap::kOld);
-  CanonicalFunctionTypeSet types_table(Z, types_array.ptr());
-  bool present;
-  for (intptr_t i = 0; i < retained_types.Length(); i++) {
-    type ^= retained_types.At(i);
-    present = types_table.Insert(type);
-    ASSERT(!present);
-  }
-  object_store->set_canonical_function_types(types_table.Release());
-}
-
-void Precompiler::DropTypeParameters() {
-  ObjectStore* object_store = IG->object_store();
-  GrowableObjectArray& retained_typeparams =
-      GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
-  Array& typeparams_array = Array::Handle(Z);
-  TypeParameter& typeparam = TypeParameter::Handle(Z);
-  // First drop all the type parameters that are not referenced.
-  // Note that we only visit 'free-floating' type parameters and not
-  // declarations of type parameters contained in the 'type_parameters'
-  // array in generic classes and functions.
-  {
-    CanonicalTypeParameterSet typeparams_table(
-        Z, object_store->canonical_type_parameters());
-    typeparams_array = HashTables::ToArray(typeparams_table, false);
-    for (intptr_t i = 0; i < typeparams_array.Length(); i++) {
-      typeparam ^= typeparams_array.At(i);
-      bool retain = typeparams_to_retain_.HasKey(&typeparam);
-      if (retain) {
-        retained_typeparams.Add(typeparam);
-      } else {
-        typeparam.ClearCanonical();
-        dropped_typeparam_count_++;
-      }
-    }
-    typeparams_table.Release();
-  }
-
-  // Now construct a new type parameter table and save in the object store.
-  const intptr_t dict_size =
-      Utils::RoundUpToPowerOfTwo(retained_typeparams.Length() * 4 / 3);
-  typeparams_array =
-      HashTables::New<CanonicalTypeParameterSet>(dict_size, Heap::kOld);
-  CanonicalTypeParameterSet typeparams_table(Z, typeparams_array.ptr());
-  bool present;
-  for (intptr_t i = 0; i < retained_typeparams.Length(); i++) {
-    typeparam ^= retained_typeparams.At(i);
-    present = typeparams_table.Insert(typeparam);
-    ASSERT(!present);
-  }
-  object_store->set_canonical_type_parameters(typeparams_table.Release());
-}
-
-void Precompiler::DropTypeArguments() {
-  ObjectStore* object_store = IG->object_store();
-  Array& typeargs_array = Array::Handle(Z);
-  GrowableObjectArray& retained_typeargs =
-      GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
-  TypeArguments& typeargs = TypeArguments::Handle(Z);
-  // First drop all the type arguments that are not referenced.
-  {
-    CanonicalTypeArgumentsSet typeargs_table(
-        Z, object_store->canonical_type_arguments());
-    typeargs_array = HashTables::ToArray(typeargs_table, false);
-    for (intptr_t i = 0; i < typeargs_array.Length(); i++) {
-      typeargs ^= typeargs_array.At(i);
-      bool retain = typeargs_to_retain_.HasKey(&typeargs);
-      if (retain) {
-        retained_typeargs.Add(typeargs);
-      } else {
-        typeargs.ClearCanonical();
-        dropped_typearg_count_++;
-      }
-    }
-    typeargs_table.Release();
-  }
-
-  // Now construct a new type arguments table and save in the object store.
-  const intptr_t dict_size =
-      Utils::RoundUpToPowerOfTwo(retained_typeargs.Length() * 4 / 3);
-  typeargs_array =
-      HashTables::New<CanonicalTypeArgumentsSet>(dict_size, Heap::kOld);
-  CanonicalTypeArgumentsSet typeargs_table(Z, typeargs_array.ptr());
-  bool present;
-  for (intptr_t i = 0; i < retained_typeargs.Length(); i++) {
-    typeargs ^= retained_typeargs.At(i);
-    present = typeargs_table.Insert(typeargs);
-    ASSERT(!present);
-  }
-  object_store->set_canonical_type_arguments(typeargs_table.Release());
-}
-
 void Precompiler::TraceTypesFromRetainedClasses() {
   auto& lib = Library::Handle(Z);
   auto& cls = Class::Handle(Z);
diff --git a/runtime/vm/compiler/aot/precompiler.h b/runtime/vm/compiler/aot/precompiler.h
index c5d14fc..049a12a 100644
--- a/runtime/vm/compiler/aot/precompiler.h
+++ b/runtime/vm/compiler/aot/precompiler.h
@@ -334,10 +334,6 @@
   void DropFunctions();
   void DropFields();
   void TraceTypesFromRetainedClasses();
-  void DropTypes();
-  void DropFunctionTypes();
-  void DropTypeParameters();
-  void DropTypeArguments();
   void DropMetadata();
   void DropLibraryEntries();
   void DropClasses();