Commit 3746a4b2 by Martin Liska Committed by Martin Liska

Revert m_classes_vec introduction.

2017-01-10  Martin Liska  <mliska@suse.cz>

	* ipa-icf.c (sem_item_optimizer::sem_item_optimizer): Remove
	usage of m_classes_vec.
	(sem_item_optimizer::~sem_item_optimizer):  Likewise.
	(sem_item_optimizer::get_group_by_hash): Likewise.
	(sem_item_optimizer::subdivide_classes_by_equality): Likewise.
	(sem_item_optimizer::subdivide_classes_by_sensitive_refs): Likewise.
	(sem_item_optimizer::verify_classes): Likewise.
	(sem_item_optimizer::process_cong_reduction): Likewise.
	(sem_item_optimizer::dump_cong_classes): Likewise.
	(sem_item_optimizer::merge_classes): Likewise.
	* ipa-icf.h (congruence_class_hash): Rename from
	congruence_class_group_hash.  Remove declaration of
	m_classes_vec.

From-SVN: r244272
parent 26b67e38
2017-01-10 Martin Liska <mliska@suse.cz>
* ipa-icf.c (sem_item_optimizer::sem_item_optimizer): Remove
usage of m_classes_vec.
(sem_item_optimizer::~sem_item_optimizer): Likewise.
(sem_item_optimizer::get_group_by_hash): Likewise.
(sem_item_optimizer::subdivide_classes_by_equality): Likewise.
(sem_item_optimizer::subdivide_classes_by_sensitive_refs): Likewise.
(sem_item_optimizer::verify_classes): Likewise.
(sem_item_optimizer::process_cong_reduction): Likewise.
(sem_item_optimizer::dump_cong_classes): Likewise.
(sem_item_optimizer::merge_classes): Likewise.
* ipa-icf.h (congruence_class_hash): Rename from
congruence_class_group_hash. Remove declaration of
m_classes_vec.
2017-01-10 Andrew Senkevich <andrew.senkevich@intel.com> 2017-01-10 Andrew Senkevich <andrew.senkevich@intel.com>
* common/config/i386/i386-common.c (OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET, * common/config/i386/i386-common.c (OPTION_MASK_ISA_AVX512VPOPCNTDQ_SET,
......
...@@ -2288,7 +2288,6 @@ sem_item_optimizer::sem_item_optimizer () ...@@ -2288,7 +2288,6 @@ sem_item_optimizer::sem_item_optimizer ()
m_varpool_node_hooks (NULL) m_varpool_node_hooks (NULL)
{ {
m_items.create (0); m_items.create (0);
m_classes_vec.create (0);
bitmap_obstack_initialize (&m_bmstack); bitmap_obstack_initialize (&m_bmstack);
} }
...@@ -2297,19 +2296,18 @@ sem_item_optimizer::~sem_item_optimizer () ...@@ -2297,19 +2296,18 @@ sem_item_optimizer::~sem_item_optimizer ()
for (unsigned int i = 0; i < m_items.length (); i++) for (unsigned int i = 0; i < m_items.length (); i++)
delete m_items[i]; delete m_items[i];
unsigned int l;
congruence_class_group *it; for (hash_table<congruence_class_hash>::iterator it = m_classes.begin ();
FOR_EACH_VEC_ELT (m_classes_vec, l, it) it != m_classes.end (); ++it)
{ {
for (unsigned int i = 0; i < it->classes.length (); i++) for (unsigned int i = 0; i < (*it)->classes.length (); i++)
delete it->classes[i]; delete (*it)->classes[i];
it->classes.release (); (*it)->classes.release ();
free (it); free (*it);
} }
m_items.release (); m_items.release ();
m_classes_vec.release ();
bitmap_obstack_release (&m_bmstack); bitmap_obstack_release (&m_bmstack);
} }
...@@ -2502,7 +2500,6 @@ sem_item_optimizer::get_group_by_hash (hashval_t hash, sem_item_type type) ...@@ -2502,7 +2500,6 @@ sem_item_optimizer::get_group_by_hash (hashval_t hash, sem_item_type type)
else else
{ {
item->classes.create (1); item->classes.create (1);
m_classes_vec.safe_push (item);
*slot = item; *slot = item;
} }
...@@ -2847,15 +2844,14 @@ sem_item_optimizer::parse_nonsingleton_classes (void) ...@@ -2847,15 +2844,14 @@ sem_item_optimizer::parse_nonsingleton_classes (void)
void void
sem_item_optimizer::subdivide_classes_by_equality (bool in_wpa) sem_item_optimizer::subdivide_classes_by_equality (bool in_wpa)
{ {
unsigned int l; for (hash_table <congruence_class_hash>::iterator it = m_classes.begin ();
congruence_class_group *it; it != m_classes.end (); ++it)
FOR_EACH_VEC_ELT (m_classes_vec, l, it)
{ {
unsigned int class_count = it->classes.length (); unsigned int class_count = (*it)->classes.length ();
for (unsigned i = 0; i < class_count; i++) for (unsigned i = 0; i < class_count; i++)
{ {
congruence_class *c = it->classes[i]; congruence_class *c = (*it)->classes[i];
if (c->members.length() > 1) if (c->members.length() > 1)
{ {
...@@ -2864,7 +2860,7 @@ sem_item_optimizer::subdivide_classes_by_equality (bool in_wpa) ...@@ -2864,7 +2860,7 @@ sem_item_optimizer::subdivide_classes_by_equality (bool in_wpa)
sem_item *first = c->members[0]; sem_item *first = c->members[0];
new_vector.safe_push (first); new_vector.safe_push (first);
unsigned class_split_first = it->classes.length (); unsigned class_split_first = (*it)->classes.length ();
for (unsigned j = 1; j < c->members.length (); j++) for (unsigned j = 1; j < c->members.length (); j++)
{ {
...@@ -2881,9 +2877,9 @@ sem_item_optimizer::subdivide_classes_by_equality (bool in_wpa) ...@@ -2881,9 +2877,9 @@ sem_item_optimizer::subdivide_classes_by_equality (bool in_wpa)
bool integrated = false; bool integrated = false;
for (unsigned k = class_split_first; for (unsigned k = class_split_first;
k < it->classes.length (); k++) k < (*it)->classes.length (); k++)
{ {
sem_item *x = it->classes[k]->members[0]; sem_item *x = (*it)->classes[k]->members[0];
bool equals bool equals
= in_wpa ? x->equals_wpa (item, m_symtab_node_map) = in_wpa ? x->equals_wpa (item, m_symtab_node_map)
: x->equals (item, m_symtab_node_map); : x->equals (item, m_symtab_node_map);
...@@ -2891,7 +2887,7 @@ sem_item_optimizer::subdivide_classes_by_equality (bool in_wpa) ...@@ -2891,7 +2887,7 @@ sem_item_optimizer::subdivide_classes_by_equality (bool in_wpa)
if (equals) if (equals)
{ {
integrated = true; integrated = true;
add_item_to_class (it->classes[k], item); add_item_to_class ((*it)->classes[k], item);
break; break;
} }
...@@ -2904,7 +2900,7 @@ sem_item_optimizer::subdivide_classes_by_equality (bool in_wpa) ...@@ -2904,7 +2900,7 @@ sem_item_optimizer::subdivide_classes_by_equality (bool in_wpa)
m_classes_count++; m_classes_count++;
add_item_to_class (c, item); add_item_to_class (c, item);
it->classes.safe_push (c); (*it)->classes.safe_push (c);
} }
} }
} }
...@@ -2935,16 +2931,15 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs () ...@@ -2935,16 +2931,15 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs ()
unsigned newly_created_classes = 0; unsigned newly_created_classes = 0;
unsigned int l; for (hash_table <congruence_class_hash>::iterator it = m_classes.begin ();
congruence_class_group *it; it != m_classes.end (); ++it)
FOR_EACH_VEC_ELT (m_classes_vec, l, it)
{ {
unsigned int class_count = it->classes.length (); unsigned int class_count = (*it)->classes.length ();
auto_vec<congruence_class *> new_classes; auto_vec<congruence_class *> new_classes;
for (unsigned i = 0; i < class_count; i++) for (unsigned i = 0; i < class_count; i++)
{ {
congruence_class *c = it->classes[i]; congruence_class *c = (*it)->classes[i];
if (c->members.length() > 1) if (c->members.length() > 1)
{ {
...@@ -2988,7 +2983,7 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs () ...@@ -2988,7 +2983,7 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs ()
if (first_class) if (first_class)
{ {
it->classes[i] = new_cls; (*it)->classes[i] = new_cls;
first_class = false; first_class = false;
} }
else else
...@@ -3010,7 +3005,7 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs () ...@@ -3010,7 +3005,7 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs ()
} }
for (unsigned i = 0; i < new_classes.length (); i++) for (unsigned i = 0; i < new_classes.length (); i++)
it->classes.safe_push (new_classes[i]); (*it)->classes.safe_push (new_classes[i]);
} }
return newly_created_classes; return newly_created_classes;
...@@ -3030,13 +3025,12 @@ sem_item_optimizer::checking_verify_classes (void) ...@@ -3030,13 +3025,12 @@ sem_item_optimizer::checking_verify_classes (void)
void void
sem_item_optimizer::verify_classes (void) sem_item_optimizer::verify_classes (void)
{ {
unsigned int l; for (hash_table<congruence_class_hash>::iterator it = m_classes.begin ();
congruence_class_group *it; it != m_classes.end (); ++it)
FOR_EACH_VEC_ELT (m_classes_vec, l, it)
{ {
for (unsigned int i = 0; i < it->classes.length (); i++) for (unsigned int i = 0; i < (*it)->classes.length (); i++)
{ {
congruence_class *cls = it->classes[i]; congruence_class *cls = (*it)->classes[i];
gcc_assert (cls); gcc_assert (cls);
gcc_assert (cls->members.length () > 0); gcc_assert (cls->members.length () > 0);
...@@ -3302,12 +3296,11 @@ sem_item_optimizer::worklist_pop (void) ...@@ -3302,12 +3296,11 @@ sem_item_optimizer::worklist_pop (void)
void void
sem_item_optimizer::process_cong_reduction (void) sem_item_optimizer::process_cong_reduction (void)
{ {
unsigned int l; for (hash_table<congruence_class_hash>::iterator it = m_classes.begin ();
congruence_class_group *it; it != m_classes.end (); ++it)
FOR_EACH_VEC_ELT (m_classes_vec, l, it) for (unsigned i = 0; i < (*it)->classes.length (); i++)
for (unsigned i = 0; i < it->classes.length (); i++) if ((*it)->classes[i]->is_class_used ())
if (it->classes[i]->is_class_used ()) worklist_push ((*it)->classes[i]);
worklist_push (it->classes[i]);
if (dump_file) if (dump_file)
fprintf (dump_file, "Worklist has been filled with: %lu\n", fprintf (dump_file, "Worklist has been filled with: %lu\n",
...@@ -3347,12 +3340,11 @@ sem_item_optimizer::dump_cong_classes (void) ...@@ -3347,12 +3340,11 @@ sem_item_optimizer::dump_cong_classes (void)
unsigned int max_index = 0; unsigned int max_index = 0;
unsigned int* histogram = XCNEWVEC (unsigned int, m_items.length () + 1); unsigned int* histogram = XCNEWVEC (unsigned int, m_items.length () + 1);
unsigned int l; for (hash_table<congruence_class_hash>::iterator it = m_classes.begin ();
congruence_class_group *it; it != m_classes.end (); ++it)
FOR_EACH_VEC_ELT (m_classes_vec, l, it) for (unsigned i = 0; i < (*it)->classes.length (); i++)
for (unsigned i = 0; i < it->classes.length (); i++)
{ {
unsigned int c = it->classes[i]->members.length (); unsigned int c = (*it)->classes[i]->members.length ();
histogram[c]++; histogram[c]++;
if (c > max_index) if (c > max_index)
...@@ -3369,18 +3361,18 @@ sem_item_optimizer::dump_cong_classes (void) ...@@ -3369,18 +3361,18 @@ sem_item_optimizer::dump_cong_classes (void)
fprintf (dump_file, "\n\n"); fprintf (dump_file, "\n\n");
if (dump_flags & TDF_DETAILS) if (dump_flags & TDF_DETAILS)
FOR_EACH_VEC_ELT (m_classes_vec, l, it) for (hash_table<congruence_class_hash>::iterator it = m_classes.begin ();
it != m_classes.end (); ++it)
{ {
fprintf (dump_file, " group: with %u classes:\n", fprintf (dump_file, " group: with %u classes:\n",
it->classes.length ()); (*it)->classes.length ());
for (unsigned i = 0; i < it->classes.length (); i++) for (unsigned i = 0; i < (*it)->classes.length (); i++)
{ {
it->classes[i]->dump (dump_file, 4); (*it)->classes[i]->dump (dump_file, 4);
if (i < it->classes.length () - 1) if (i < (*it)->classes.length () - 1)
fprintf (dump_file, " "); fprintf (dump_file, " ");
} }
} }
...@@ -3405,12 +3397,11 @@ sem_item_optimizer::merge_classes (unsigned int prev_class_count) ...@@ -3405,12 +3397,11 @@ sem_item_optimizer::merge_classes (unsigned int prev_class_count)
bool merged_p = false; bool merged_p = false;
unsigned int l; for (hash_table<congruence_class_hash>::iterator it = m_classes.begin ();
congruence_class_group *it; it != m_classes.end (); ++it)
FOR_EACH_VEC_ELT (m_classes_vec, l, it) for (unsigned int i = 0; i < (*it)->classes.length (); i++)
for (unsigned int i = 0; i < it->classes.length (); i++)
{ {
congruence_class *c = it->classes[i]; congruence_class *c = (*it)->classes[i];
if (c->members.length () > 1) if (c->members.length () > 1)
{ {
non_singular_classes_count++; non_singular_classes_count++;
...@@ -3435,10 +3426,11 @@ sem_item_optimizer::merge_classes (unsigned int prev_class_count) ...@@ -3435,10 +3426,11 @@ sem_item_optimizer::merge_classes (unsigned int prev_class_count)
item_count ? 100.0f * equal_items / item_count : 0.0f); item_count ? 100.0f * equal_items / item_count : 0.0f);
} }
FOR_EACH_VEC_ELT (m_classes_vec, l, it) for (hash_table<congruence_class_hash>::iterator it = m_classes.begin ();
for (unsigned int i = 0; i < it->classes.length (); i++) it != m_classes.end (); ++it)
for (unsigned int i = 0; i < (*it)->classes.length (); i++)
{ {
congruence_class *c = it->classes[i]; congruence_class *c = (*it)->classes[i];
if (c->members.length () == 1) if (c->members.length () == 1)
continue; continue;
......
...@@ -442,7 +442,7 @@ struct congruence_class_group ...@@ -442,7 +442,7 @@ struct congruence_class_group
}; };
/* Congruence class set structure. */ /* Congruence class set structure. */
struct congruence_class_group_hash : nofree_ptr_hash <congruence_class_group> struct congruence_class_hash : nofree_ptr_hash <congruence_class_group>
{ {
static inline hashval_t hash (const congruence_class_group *item) static inline hashval_t hash (const congruence_class_group *item)
{ {
...@@ -610,10 +610,7 @@ private: ...@@ -610,10 +610,7 @@ private:
hash_set <symtab_node *> m_removed_items_set; hash_set <symtab_node *> m_removed_items_set;
/* Hashtable of congruence classes. */ /* Hashtable of congruence classes. */
hash_table <congruence_class_group_hash> m_classes; hash_table <congruence_class_hash> m_classes;
/* Vector of congruence classes. */
vec <congruence_class_group *> m_classes_vec;
/* Count of congruence classes. */ /* Count of congruence classes. */
unsigned int m_classes_count; unsigned int m_classes_count;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment