Message ID | mpt8st3itg6.fsf@arm.com |
---|---|
State | New |
Headers | show |
Series | Relax vector_builder::elt sanity check | expand |
On Fri, Jul 12, 2019 at 9:49 AM Richard Sandiford <richard.sandiford@arm.com> wrote: > > 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. > > Tested on aarch64-linux-gnu, aarch64_be-elf and x86_64-linux-gnu. > OK to install? OK. > Richard > > > 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. > > Index: gcc/vector-builder.h > =================================================================== > --- gcc/vector-builder.h 2019-07-12 08:39:56.000000000 +0100 > +++ gcc/vector-builder.h 2019-07-12 08:46:38.069172474 +0100 > @@ -199,14 +199,15 @@ vector_builder<T, Derived>::operator == > 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;
Index: gcc/vector-builder.h =================================================================== --- gcc/vector-builder.h 2019-07-12 08:39:56.000000000 +0100 +++ gcc/vector-builder.h 2019-07-12 08:46:38.069172474 +0100 @@ -199,14 +199,15 @@ vector_builder<T, Derived>::operator == 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;