allow constructing a auto_vec with a preallocation, and a possibly larger actual...
authorTrevor Saunders <tbsaunde+gcc@tbsaunde.org>
Sun, 14 May 2017 00:38:35 +0000 (00:38 +0000)
committerTrevor Saunders <tbsaunde@gcc.gnu.org>
Sun, 14 May 2017 00:38:35 +0000 (00:38 +0000)
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-13  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

* genrecog.c (int_set::int_set): Explicitly construct our
auto_vec base class.
* vec.h (auto_vec::auto_vec): New constructor.

From-SVN: r248019

gcc/ChangeLog
gcc/genrecog.c
gcc/vec.h

index 9cc3d518d176b72789d7666fabcba567c9ab2010..1f0c05aa3d4b23f0173eb69167d7f7e87f7041ef 100644 (file)
@@ -1,3 +1,9 @@
+2017-05-13  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
+
+       * genrecog.c (int_set::int_set): Explicitly construct our
+       auto_vec base class.
+       * vec.h (auto_vec::auto_vec): New constructor.
+
 2017-05-13  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>
 
        * bitmap.h (class auto_bitmap): New constructor taking
index 6a9e610e7a09141a994ffd2441710fd0d5498300..b69043f0d0227616c224540064659ebd41d749da 100644 (file)
@@ -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);
 }
index fee46164b01098588688b92c82f496981388ee66..914f89c350c87d95acda70cb2a8475b50929035d 100644 (file)
--- 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 ();