Hi! On 2021-08-09T12:02:02+0200, Richard Biener via Gcc <gcc@gcc.gnu.org> wrote: > On Fri, Aug 6, 2021 at 6:58 PM Thomas Schwinge <tho...@codesourcery.com> > wrote: >> So I'm trying to do some C++... ;-) >> >> Given: >> >> /* A map from SSA names or var decls to record fields. */ >> typedef hash_map<tree, tree> field_map_t; >> >> /* For each propagation record type, this is a map from SSA names or var >> decls >> to propagate, to the field in the record type that should be used for >> transmission and reception. */ >> typedef hash_map<tree, field_map_t> record_field_map_t; >> >> Thus, that's a 'hash_map<tree, hash_map<tree, tree>>'. (I may do that, >> right?) Looking through GCC implementation files, very most of all uses >> of 'hash_map' boil down to pointer key ('tree', for example) and >> pointer/integer value. > > You could use > > hash_map<tree, unsigned> record_field_map_p; > vec<field_map_t> maps; > > and record the index into maps which you record the actual maps.
Ugh ;-) -- yes, if I remember correctly, I've spotted that pattern in a few GCC source files. > Alternatively use hash_map<tree, field_map_t *> ACK; see commit 049eda8274b7394523238b17ab12c3e2889f253e "Avoid 'GTY' use for 'gcc/omp-oacc-neuter-broadcast.cc:field_map'". (So, actually don't change 'record_field_map_t' at this time.) > Note your code will appear to work until you end up in the situation > where record_field_map_t is resized because hash-map doesn't > std::move elements when re-hashing. I'm not understanding, would you please provide some more detail here? Did you mean "resizing" instead of "re-hashing"? If the latter, then yes, it does 'std::move' them (via 'hash_table::expand') -- see (your own) commit 4b9d61f79c0c0185a33048ae6cc72269cf7efa31 "add move CTOR to auto_vec, use auto_vec for get_loop_exit_edges". But I guess I completely misunderstood? Grüße Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955