https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96564
--- Comment #21 from Andrew Pinski <pinskia at gcc dot gnu.org> --- So after r15-580, we can optimize: ``` extern void* malloc (long unsigned int); void fun (unsigned *x) { if (x == 0) __builtin_unreachable(); unsigned *a = malloc (*x); if (a == 0) return; if (a != x) *a = *x; *x = *a; } ``` But it can't handle: ``` extern void* malloc (long unsigned int); void fun (unsigned *x) { if (x == 0) return; unsigned *a = malloc (*x); if (a == 0) return; if (a != x) // (A) *a = *x; *x = *a; } ```