diff options
author | Erick Ochoa <erick.ochoa@theobroma-systems.com> | 2020-12-04 09:51:52 +0100 |
---|---|---|
committer | Erick Ochoa <erick.ochoa@theobroma-systems.com> | 2020-12-04 09:51:52 +0100 |
commit | 9f31a16a6752b5b56f28e992580c246ea21cd2f0 (patch) | |
tree | 62e4c95ad8e54773cd5e8344969125f4801ee7e7 | |
parent | a50ead57741e7766fe426c7debe18d924f09a173 (diff) |
broken?
-rw-r--r-- | gcc/ipa-type-escape-analysis.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/gcc/ipa-type-escape-analysis.c b/gcc/ipa-type-escape-analysis.c index 3bbcfb8d1e9..1eaab45b2fb 100644 --- a/gcc/ipa-type-escape-analysis.c +++ b/gcc/ipa-type-escape-analysis.c @@ -433,12 +433,12 @@ static void find_fields_accessed (record_field_map4_t &record_field_map) * and it is a tree for which this method is going to find the rest of * equivalent trees found in record_field_map. */ -static std::vector<tree> +static vec<tree>* find_equivalent_trees (tree r_i, record_field_map4_t &record_field_map, tpartitions2_t casting) { type_incomplete_equality equality; - std::vector<tree> equivalence; + vec<tree> *equivalence = new vec<tree>; bool is_rin_record = casting.in_points_to_record (r_i); if (!is_rin_record) return equivalence; @@ -461,7 +461,7 @@ find_equivalent_trees (tree r_i, record_field_map4_t &record_field_map, if (!are_equal) continue; - equivalence.push_back (r_j); + equivalence->safe_push(r_j); } return equivalence; } @@ -509,11 +509,11 @@ keep_only_read_fields_from_field_map (field_access_map2_t &field_map, */ static void keep_only_read_fields_from_equivalent_field_maps ( - std::vector<tree> equivalent, record_field_map4_t &record_field_map, + vec<tree> *equivalent, record_field_map4_t &record_field_map, field_offsets2_t &field_offset2) { - for (std::vector<tree>::iterator j = equivalent.begin (), - f = equivalent.end (); + for (auto j = equivalent->begin (), + f = equivalent->end (); j != f; j++) { tree r_j = *j; @@ -529,7 +529,7 @@ keep_only_read_fields_from_equivalent_field_maps ( static void erase_if_no_fields_can_be_deleted ( record_field_offset_map4_t &record_field_offset_map, - std::set<tree> &to_keep, std::set<tree> &to_erase) + hash_set<tree> &to_keep, hash_set<tree> &to_erase) { for (hash_map<tree, field_offsets2_t*>::iterator i = record_field_offset_map.begin (), @@ -537,15 +537,14 @@ erase_if_no_fields_can_be_deleted ( i != e; ++i) { tree record = (*i).first; - const bool keep = to_keep.find (record) != to_keep.end (); + const bool keep = to_keep.contains (record); if (keep) continue; - to_erase.insert (record); + to_erase.add (record); } - for (std::set<tree>::iterator i = to_erase.begin (), - e = to_erase.end (); + for (auto i = to_erase.begin (), e = to_erase.end (); i != e; ++i) { tree record = *i; @@ -560,7 +559,7 @@ erase_if_no_fields_can_be_deleted ( static void mark_escaping_types_to_be_deleted ( record_field_offset_map4_t &record_field_offset_map, - std::set<tree> &to_erase, tpartitions2_t casting) + hash_set<tree> &to_erase, tpartitions2_t casting) { tset2_t &non_escaping = casting.non_escaping; for (hash_map<tree, field_offsets2_t*>::iterator i @@ -573,7 +572,7 @@ mark_escaping_types_to_be_deleted ( if (in_set) continue; - to_erase.insert (record); + to_erase.add (record); } } @@ -591,7 +590,7 @@ obtain_nonescaping_unaccessed_fields (tpartitions2_t casting, i != e; ++i) { tree r_i = (*i).first; - std::vector<tree> equivalence + vec<tree>* equivalence = find_equivalent_trees (r_i, record_field_map, casting); field_offsets2_t *field_offset = new field_offsets2_t; field_access_map2_t *original_field_map = (*i).second; @@ -603,14 +602,15 @@ obtain_nonescaping_unaccessed_fields (tpartitions2_t casting, // These map holds the following: // RECORD_TYPE -> unsigned (bit_pos_offset which has been read) record_field_offset_map.put(r_i, field_offset); + //delete equivalence; } // So now that we only have the FIELDS which are read, // we need to compute the complement... // Improve: This is tightly coupled, I need to decouple it... - std::set<tree> to_erase; - std::set<tree> to_keep; + hash_set<tree> to_erase; + hash_set<tree> to_keep; mark_escaping_types_to_be_deleted (record_field_offset_map, to_erase, casting); for (auto i @@ -619,7 +619,7 @@ obtain_nonescaping_unaccessed_fields (tpartitions2_t casting, i != e; ++i) { tree record = (*i).first; - const bool will_be_erased = to_erase.find (record) != to_erase.end (); + const bool will_be_erased = to_erase.contains (record); // No need to compute which fields can be deleted if type is escaping if (will_be_erased) continue; @@ -634,7 +634,7 @@ obtain_nonescaping_unaccessed_fields (tpartitions2_t casting, field_offset->remove (f_offset); continue; } - to_keep.insert (record); + to_keep.add (record); field_offset->add (f_offset); has_fields_that_can_be_deleted = true; // NOTE: With anonymous fields this might be weird to print. |