summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErick Ochoa <erick.ochoa@theobroma-systems.com>2020-12-04 09:51:52 +0100
committerErick Ochoa <erick.ochoa@theobroma-systems.com>2020-12-04 09:51:52 +0100
commit9f31a16a6752b5b56f28e992580c246ea21cd2f0 (patch)
tree62e4c95ad8e54773cd5e8344969125f4801ee7e7
parenta50ead57741e7766fe426c7debe18d924f09a173 (diff)
broken?
-rw-r--r--gcc/ipa-type-escape-analysis.c36
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.