From: Trevor Saunders <tbsaunde+...@tbsaunde.org> This allows us to set the capacity of the vector when we construct it, and still use a stack buffer when the size is small enough.
gcc/ChangeLog: 2017-05-09 Trevor Saunders <tbsaunde+...@tbsaunde.org> * genrecog.c (int_set::int_set): Explicitly construct our auto_vec base class. * vec.h (auto_vec::auto_vec): New constructor. --- gcc/genrecog.c | 8 +++++--- gcc/vec.h | 12 ++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/gcc/genrecog.c b/gcc/genrecog.c index 6a9e610e7a0..b69043f0d02 100644 --- a/gcc/genrecog.c +++ b/gcc/genrecog.c @@ -1407,14 +1407,16 @@ struct int_set : public auto_vec <uint64_t, 1> iterator end (); }; -int_set::int_set () {} +int_set::int_set () : auto_vec<uint64_t, 1> () {} -int_set::int_set (uint64_t label) +int_set::int_set (uint64_t label) : + auto_vec<uint64_t, 1> () { safe_push (label); } -int_set::int_set (const int_set &other) +int_set::int_set (const int_set &other) : + auto_vec<uint64_t, 1> () { safe_splice (other); } diff --git a/gcc/vec.h b/gcc/vec.h index fee46164b01..914f89c350c 100644 --- a/gcc/vec.h +++ b/gcc/vec.h @@ -1272,6 +1272,18 @@ public: this->m_vec = &m_auto; } + auto_vec (size_t s) + { + if (s > N) + { + this->create (s); + return; + } + + m_auto.embedded_init (MAX (N, 2), 0, 1); + this->m_vec = &m_auto; + } + ~auto_vec () { this->release (); -- 2.11.0