diff options
author | Erick Ochoa <erick.ochoa@theobroma-systems.com> | 2020-11-30 14:15:51 +0100 |
---|---|---|
committer | Erick Ochoa <erick.ochoa@theobroma-systems.com> | 2020-11-30 14:15:51 +0100 |
commit | 93224ca74e929d3163fa1f6d468f2dbdab523e8e (patch) | |
tree | 492063bcd3015bd664b60094673621338f63f483 | |
parent | 654541a30e74bfdb1c8d1910c6caca39f7e08674 (diff) |
intra
-rw-r--r-- | gcc/ipa-field-reorder.c | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/gcc/ipa-field-reorder.c b/gcc/ipa-field-reorder.c index ce767e232f0..11e5320b096 100644 --- a/gcc/ipa-field-reorder.c +++ b/gcc/ipa-field-reorder.c @@ -523,41 +523,56 @@ reorg_maps_t get_reordered_field_maps (record_field_offset_map_t record_field_offset_map, std::set<tree> to_modify) { + hash_set<tree> to_modify2; + for (std::set<tree>::const_iterator i = to_modify.begin(), e = to_modify.end(); i !=e; ++i) + { + tree record = *i; + to_modify2.add(record); + } + type_stringifier stringifier; TypeReconstructorFieldReordering reconstructor (record_field_offset_map, "reorder"); - for (std::set<tree>::const_iterator i = to_modify.begin (), - e = to_modify.end (); + for (hash_set<tree>::iterator i = to_modify2.begin (), + e = to_modify2.end (); i != e; ++i) { tree record = *i; reconstructor.walk (TYPE_MAIN_VARIANT (record)); } - for (std::set<tree>::const_iterator i = to_modify.begin (), - e = to_modify.end (); + for (hash_set<tree>::iterator i = to_modify2.begin (), + e = to_modify2.end (); i != e; ++i) { tree record = *i; reconstructor.walk (record); } + typedef hash_map<tree, tree> reorg_record_map2_t; + reorg_record_map2_t map2; reorg_record_map_t map = reconstructor.get_map (); + + for (auto i = map.begin(), e = map.end(); i != e; ++i) + { + map2.put((*i).first, (*i).second); + } + reorg_field_map_t field_map = reconstructor.get_field_map (); // Here, we are just making sure that we are not doing anything too crazy. // Also, we found some types for which TYPE_CACHED_VALUES_P is not being // rewritten. This is probably indicative of a bug in // TypeReconstructorFieldReordering. - for (std::map<tree, tree>::const_iterator i = map.begin (), - e = map.end (); + for (reorg_record_map2_t::iterator i = map2.begin (), + e = map2.end (); i != e; ++i) { - tree o_record = i->first; + tree o_record = (*i).first; std::string o_name = stringifier.stringify (o_record); log ("original: %s\n", o_name.c_str ()); - tree r_record = i->second; + tree r_record = (*i).second; std::string r_name = r_record ? stringifier.stringify (r_record) : std::string (""); log ("modified: %s\n", r_name.c_str ()); @@ -569,15 +584,16 @@ get_reordered_field_maps (record_field_offset_map_t record_field_offset_map, TYPE_CACHED_VALUES_P (_o_record) = false; TYPE_CACHED_VALUES_P (m_record) = false; - bool in_map = map.find (m_record) != map.end (); + bool in_map = map2.get (m_record); if (!in_map) continue; - tree mm_record = map[m_record]; + tree mm_record = *map2.get(m_record); // Info: I think this is no longer needed... // Please verify TYPE_MAIN_VARIANT (r_record) = mm_record; } + // TODO: change this to return the GCC types... return std::make_pair (map, field_map); } |