https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111631
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- ldist produces: b_25 = (long int) j_23; d_26 = h; _8 = (sizetype) d_26; _38 = (char *) b_25; __builtin_memset (_38, 0, _8); and also we have: <bb 7> [local count: 13370358]: if (j_23 != 0) goto <bb 10>; [50.00%] else goto <bb 11>; [50.00%] ... <bb 10> [local count: 6685179]: g.10_9 = g; _10 = *g.10_9; _11 = (unsigned short) _10; _12 = _11 + 65535; _13 = (short int) _12; *g.10_9 = _13; But since d_26 is 0, originally there was no deferencing of _38 but now there is and such.