diff options
| author | gingerBill <bill@gingerbill.org> | 2025-02-24 15:37:54 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2025-02-24 15:37:54 +0000 |
| commit | f56a0a80d3b606b1cbefb973b03b9ddae88bbf48 (patch) | |
| tree | 72d687f6b2e30b6662b00ba555e3d8d40784bed1 /src | |
| parent | de70e6faa04444a1ea6e8f5f72e7b6ce00dcec7e (diff) | |
Use type hash for doc writer
Diffstat (limited to 'src')
| -rw-r--r-- | src/docs_writer.cpp | 54 | ||||
| -rw-r--r-- | src/llvm_backend.hpp | 10 |
2 files changed, 12 insertions, 52 deletions
diff --git a/src/docs_writer.cpp b/src/docs_writer.cpp index 341b3fa6b..5401e5f76 100644 --- a/src/docs_writer.cpp +++ b/src/docs_writer.cpp @@ -26,11 +26,10 @@ struct OdinDocWriter { StringMap<OdinDocString> string_cache; - OrderedInsertPtrMap<AstFile *, OdinDocFileIndex> file_cache; - OrderedInsertPtrMap<AstPackage *, OdinDocPkgIndex> pkg_cache; - OrderedInsertPtrMap<Entity *, OdinDocEntityIndex> entity_cache; - OrderedInsertPtrMap<Type *, OdinDocTypeIndex> type_cache; - OrderedInsertPtrMap<Type *, Type *> stable_type_cache; + OrderedInsertPtrMap<AstFile *, OdinDocFileIndex> file_cache; + OrderedInsertPtrMap<AstPackage *, OdinDocPkgIndex> pkg_cache; + OrderedInsertPtrMap<Entity *, OdinDocEntityIndex> entity_cache; + OrderedInsertPtrMap<u64/*type hash*/, OdinDocTypeIndex> type_cache; OdinDocWriterItemTracker<OdinDocFile> files; OdinDocWriterItemTracker<OdinDocPkg> pkgs; @@ -61,7 +60,6 @@ gb_internal void odin_doc_writer_prepare(OdinDocWriter *w) { map_init(&w->pkg_cache, 1<<10); map_init(&w->entity_cache, 1<<18); map_init(&w->type_cache, 1<<18); - map_init(&w->stable_type_cache, 1<<18); odin_doc_writer_item_tracker_init(&w->files, 1); odin_doc_writer_item_tracker_init(&w->pkgs, 1); @@ -81,7 +79,6 @@ gb_internal void odin_doc_writer_destroy(OdinDocWriter *w) { map_destroy(&w->pkg_cache); map_destroy(&w->entity_cache); map_destroy(&w->type_cache); - map_destroy(&w->stable_type_cache); } @@ -492,55 +489,18 @@ gb_internal OdinDocTypeIndex odin_doc_type(OdinDocWriter *w, Type *type) { } } - // Type **mapped_type = map_get(&w->stable_type_cache, type); // may map to itself - // if (mapped_type && *mapped_type) { - // type = *mapped_type; - // } - - OdinDocTypeIndex *found = map_get(&w->type_cache, type); + u64 type_hash = type_hash_canonical_type(type); + OdinDocTypeIndex *found = map_get(&w->type_cache, type_hash); if (found) { return *found; } - for (auto const &entry : w->type_cache) { - // NOTE(bill): THIS IS SLOW - Type *x = type; - Type *y = entry.key; - - if (x == y) { - goto do_set; - } - - if (!x | !y) { - continue; - } - if (y->kind == Type_Named) { - Entity *e = y->Named.type_name; - if (e->TypeName.is_type_alias) { - y = y->Named.base; - } - } - if (x->kind != y->kind) { - continue; - } - - if (!are_types_identical_internal(x, y, true)) { - continue; - } - - do_set: - OdinDocTypeIndex index = entry.value; - map_set(&w->type_cache, type, index); - map_set(&w->stable_type_cache, type, entry.key); - return index; - } OdinDocType *dst = nullptr; OdinDocType doc_type = {}; OdinDocTypeIndex type_index = 0; type_index = odin_doc_write_item(w, &w->types, &doc_type, &dst); - map_set(&w->type_cache, type, type_index); - map_set(&w->stable_type_cache, type, type); + map_set(&w->type_cache, type_hash, type_index); switch (type->kind) { case Type_Basic: diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index d0f68b73e..b455bf4e8 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -160,9 +160,9 @@ struct lbModule { AstFile *file; // possibly associated char const *module_name; - PtrMap<u64, LLVMTypeRef> types; // mutex: types_mutex + PtrMap<u64/*type hash*/, LLVMTypeRef> types; // mutex: types_mutex PtrMap<void *, lbStructFieldRemapping> struct_field_remapping; // Key: LLVMTypeRef or Type *, mutex: types_mutex - PtrMap<u64, LLVMTypeRef> func_raw_types; // mutex: func_raw_types_mutex + PtrMap<u64/*type hash*/, LLVMTypeRef> func_raw_types; // mutex: func_raw_types_mutex RecursiveMutex types_mutex; RecursiveMutex func_raw_types_mutex; i32 internal_type_level; @@ -178,7 +178,7 @@ struct lbModule { StringMap<LLVMValueRef> const_strings; - PtrMap<u64, struct lbFunctionType *> function_type_map; + PtrMap<u64/*type hash*/, struct lbFunctionType *> function_type_map; StringMap<lbProcedure *> gen_procs; // key is the canonicalized name @@ -201,8 +201,8 @@ struct lbModule { StringMap<lbObjcRef> objc_classes; StringMap<lbObjcRef> objc_selectors; - PtrMap<u64, lbAddr> map_cell_info_map; // address of runtime.Map_Info - PtrMap<u64, lbAddr> map_info_map; // address of runtime.Map_Cell_Info + PtrMap<u64/*type hash*/, lbAddr> map_cell_info_map; // address of runtime.Map_Info + PtrMap<u64/*type hash*/, lbAddr> map_info_map; // address of runtime.Map_Cell_Info PtrMap<Ast *, lbAddr> exact_value_compound_literal_addr_map; // Key: Ast_CompoundLit |