https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69282
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Basically the problem is the vect lower was not updated for the changes for vector compares that was done. Hmm, vec_merge is no longer correctly documented either: @findex vec_merge @item (vec_merge:@var{m} @var{vec1} @var{vec2} @var{items}) This describes a merge operation between two vectors. The result is a vector of mode @var{m}; its elements are selected from either @var{vec1} or @var{vec2}. Which elements are selected is described by @var{items}, which is a bit mask represented by a @code{const_int}; a zero bit indicates the corresponding element in the result vector is taken from @var{vec2} while a set bit indicates it is taken from @var{vec1}. items can be an integer vector mode where the fields elements are 0 or -1 which selects vec1 or vec2. I am going to look into fixing both issues. That is use bsl for AARCH64 (someone will need to do arm32 backend as I can't test it) (and use vec_merge for the bsl pattern anyways) and the vect lowering pass to do the correct thing and compare against -1.