diff options
author | Martin Liska <mliska@suse.cz> | 2020-07-24 14:33:27 +0200 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2020-07-27 09:16:16 +0200 |
commit | 7f5c0f328eced560a204bb8e3eae0d45795dd235 (patch) | |
tree | c6f100254eb806a20eb3845e469bd68c4b05bed9 | |
parent | 20d0d6527c36005a9664f7ac9eb50f1071d5670c (diff) | |
download | gcc-7f5c0f328eced560a204bb8e3eae0d45795dd235.zip gcc-7f5c0f328eced560a204bb8e3eae0d45795dd235.tar.gz gcc-7f5c0f328eced560a204bb8e3eae0d45795dd235.tar.bz2 |
Use vec::reserve before vec_safe_grow_cleared is called
gcc/ChangeLog:
PR lto/45375
* symbol-summary.h: Call vec_safe_reserve before grow is called
in order to grow to a reasonable size.
* vec.h (vec_safe_reserve): Add missing function for vl_ptr
type.
-rw-r--r-- | gcc/symbol-summary.h | 13 | ||||
-rw-r--r-- | gcc/vec.h | 11 |
2 files changed, 21 insertions, 3 deletions
diff --git a/gcc/symbol-summary.h b/gcc/symbol-summary.h index a38eb1d..fa1df5c 100644 --- a/gcc/symbol-summary.h +++ b/gcc/symbol-summary.h @@ -354,8 +354,11 @@ public: id = this->m_symtab->assign_summary_id (node); if ((unsigned int)id >= m_vector->length ()) - vec_safe_grow_cleared (m_vector, - this->m_symtab->cgraph_max_summary_id); + { + int newlen = this->m_symtab->cgraph_max_summary_id; + vec_safe_reserve (m_vector, newlen - m_vector->length ()); + m_vector->quick_grow_cleared (newlen); + } if ((*m_vector)[id] == NULL) (*m_vector)[id] = this->allocate_new (); @@ -812,7 +815,11 @@ public: id = this->m_symtab->assign_summary_id (edge); if ((unsigned)id >= m_vector->length ()) - vec_safe_grow_cleared (m_vector, this->m_symtab->edges_max_summary_id); + { + int newlen = this->m_symtab->edges_max_summary_id; + m_vector->reserve (newlen - m_vector->length ()); + m_vector->quick_grow_cleared (newlen); + } if ((*m_vector)[id] == NULL) (*m_vector)[id] = this->allocate_new (); @@ -753,6 +753,17 @@ vec_safe_grow_cleared (vec<T, va_heap, vl_ptr> *&v, v->safe_grow_cleared (len PASS_MEM_STAT); } +/* If V does not have space for NELEMS elements, call + V->reserve(NELEMS, EXACT). */ + +template<typename T> +inline bool +vec_safe_reserve (vec<T, va_heap, vl_ptr> *&v, unsigned nelems, bool exact = false + CXX_MEM_STAT_INFO) +{ + return v->reserve (nelems, exact); +} + /* If V is NULL return false, otherwise return V->iterate(IX, PTR). */ template<typename T, typename A> |