https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90436

--- Comment #4 from Marc Glisse <glisse at gcc dot gnu.org> ---
(side note not related to the redundant size checking)
It is surprising how, in the code from comment 2, adding v.reserve(1000) does
not help, it even slows the program down slightly here (yes, that's rather hard
to believe). To reap the benefits, I also need to add in the loop:
if(v.size()==v.capacity())__builtin_abort();
which enables the compiler to remove the reallocation code, and once that code
is removed it can actually prove that size never reaches capacity and remove
the call to abort! We don't even need __builtin_unreachable there. And once all
that dead code is removed, it can finally vectorize.

Reply via email to