https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69282
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Created attachment 37347 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=37347&action=edit Patch which causes us not to lower the VEC_COND_EXPR Expand already knows how to expand VEC_COND_EXPR (without an embedded conditional) using op0 < 0 so we don't need expand_vec_cond_expr_p to return false for those cases. Note this fixes the ICE and I will run a testsuite run in a few minutes but it does cause a few extra instructions still. Here is the code which is produced: .L2: ldr q0, [x0], 16 cmeq v0.4s, v0.4s, #0 not v0.16b, v0.16b cmlt v0.4s, v0.4s, #0 bit v1.16b, v2.16b, v0.16b bic v3.16b, v3.16b, v0.16b add v2.4s, v2.4s, v4.4s cmp x1, x0 bne .L2 Notice the not and cmlt, both are useless. To fix that, a vcond_mask* pattern needs to be added. I am not going to fix that right now with this bootstrap/test though. I will file a bug about that though.