https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113576
--- Comment #36 from Richard Biener <rguenth at gcc dot gnu.org> --- For example with AVX512VL and the following, using -O -fgimple -mavx512vl we get simply notl %esi orl %esi, %edi cmpb $15, %dil je .L6 typedef long v4si __attribute__((vector_size(4*sizeof(long)))); typedef v4si v4sib __attribute__((vector_mask)); typedef _Bool sbool1 __attribute__((signed_bool_precision(1))); void __GIMPLE (ssa) foo (v4sib v1, v4sib v2) { v4sib tem; __BB(2): tem_5 = ~v2_2(D); tem_3 = v1_1(D) | tem_5; tem_4 = _Literal (v4sib) { _Literal (sbool1) -1, _Literal (sbool1) -1, _Literal (sbool1) -1, _Literal (sbool1) -1 }; if (tem_3 == tem_4) goto __BB3; else goto __BB4; __BB(3): __builtin_abort (); __BB(4): return; } the question is whether that matches the semantics of GIMPLE (the padding is inverted, too), whether it invokes undefined behavior (don't do it - it seems for people using intrinsics that's what it is?) or whether we should avoid affecting padding. Note after the patch I proposed on the mailing list the constant mask is now expanded with zero padding.