https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120138
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The path where it is used as uninitialized is: ``` mrem_3 = (int) M_2(D); if (mrem_3 > 0) goto <bb 3>; [41.48%] else goto <bb 16>; [58.52%] ... <bb 3> [local count: 445388115]: _62 = mrem_3 * 2; if (_62 > 15) goto <bb 4>; [66.67%] else goto <bb 17>; [33.33%] <bb 17> [local count: 148462706]: <bb 15> [local count: 148462704]: # i_49 = PHI <1(6), 0(17)> # prephitmp_83 = PHI <_82(6), _62(17)> # prephitmp_81 = PHI <_94(6), src_7(D)(17)> _77 = 1 << prephitmp_83; _76 = (short unsigned int) _77; mask_mrem_v_74 = _76 + 65535; _71 = __builtin_ia32_loaddqusi512_mask (prephitmp_81, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, mask_mrem_v_74); _70 = VIEW_CONVERT_EXPR<__m512i>(_71); r[i_49] = _70; _63 = r[1]; _60 = r[0]; ``` So basically if M argument is between 0 and 7 (if I did my math correctly). as line 19 will only set r[0] but leaves r[1] unitialized.