Relax vector_builder::elt sanity check

I'd made it a precondition of vector_builder::elt that the encoding
must have been fully populated and that all implicit elements are
therefore defined.  But for one of the AArch64 patches I'm working on,
it'd be convenient to be able to look back at previous elements while
building up the encoding.  This patch therefore makes the assert
specific to implicit elements only.

2019-07-12  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* vector-builder.h (vector_builder::elt): Allow already-supplied
	elements to be read back before building is complete.

From-SVN: r273440
This commit is contained in:
Richard Sandiford 2019-07-12 10:33:52 +00:00 committed by Richard Sandiford
parent 49dbd6a032
commit 72ab1c51b6
2 changed files with 9 additions and 3 deletions

View file

@ -1,3 +1,8 @@
2019-07-12 Richard Sandiford <richard.sandiford@arm.com>
* vector-builder.h (vector_builder::elt): Allow already-supplied
elements to be read back before building is complete.
2019-07-12 Eric Botcazou <ebotcazou@adacore.com>
PR rtl-optimization/91136

View file

@ -199,14 +199,15 @@ template<typename T, typename Derived>
T
vector_builder<T, Derived>::elt (unsigned int i) const
{
/* This only makes sense if the encoding has been fully populated. */
gcc_checking_assert (encoded_nelts () <= this->length ());
/* First handle elements that are already present in the underlying
vector, regardless of whether they're part of the encoding or not. */
if (i < this->length ())
return (*this)[i];
/* Extrapolation is only possible if the encoding has been fully
populated. */
gcc_checking_assert (encoded_nelts () <= this->length ());
/* Identify the pattern that contains element I and work out the index of
the last encoded element for that pattern. */
unsigned int pattern = i % m_npatterns;