diff options
author | Giuliano Belinassi <giuliano.belinassi@usp.br> | 2020-08-22 17:43:43 -0300 |
---|---|---|
committer | Giuliano Belinassi <giuliano.belinassi@usp.br> | 2020-08-22 17:43:43 -0300 |
commit | a926878ddbd5a98b272c22171ce58663fc04c3e0 (patch) | |
tree | 86af256e5d9a9c06263c00adc90e5fe348008c43 /gcc/vec.h | |
parent | 542730f087133690b47e036dfd43eb0db8a650ce (diff) | |
parent | 07cbaed8ba7d1b6e4ab3a9f44175502a4e1ecdb1 (diff) | |
download | gcc-devel/autopar_devel.zip gcc-devel/autopar_devel.tar.gz gcc-devel/autopar_devel.tar.bz2 |
Merge branch 'autopar_rebase2' into autopar_develdevel/autopar_devel
Quickly commit changes in the rebase branch.
Diffstat (limited to 'gcc/vec.h')
-rw-r--r-- | gcc/vec.h | 20 |
1 files changed, 18 insertions, 2 deletions
@@ -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> @@ -1270,8 +1281,13 @@ template<typename T, typename A> inline size_t vec<T, A, vl_embed>::embedded_size (unsigned alloc) { - typedef vec<T, A, vl_embed> vec_embedded; - return offsetof (vec_embedded, m_vecdata) + alloc * sizeof (T); + struct alignas (T) U { char data[sizeof (T)]; }; + typedef vec<U, A, vl_embed> vec_embedded; + typedef typename std::conditional<std::is_standard_layout<T>::value, + vec, vec_embedded>::type vec_stdlayout; + static_assert (sizeof (vec_stdlayout) == sizeof (vec), ""); + static_assert (alignof (vec_stdlayout) == alignof (vec), ""); + return offsetof (vec_stdlayout, m_vecdata) + alloc * sizeof (T); } |