https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115976
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Note f2 should really be: ``` void f2(unsigned *__restrict__ a, unsigned * __restrict__ b) { for(int i = 0;i < 1024;i ++) { long long ta = a[i]; long long tb = b[i]; long long tt = ta - tb; if (tt < 0) tt = 0; if (tt > (long long)(unsigned long long)(unsigned)-1u) tt = -1u; a[i] = tt; } } ``` Because `0 - 10` saturates to `0` rather than to `UINT_MAX`. I accidently made the idea there.