https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96564
--- Comment #1 from Marc Glisse <glisse at gcc dot gnu.org> --- I think there are duplicates about the fact that while gcc knows that a and x cannot alias (if you read *x, write to *a, then read from *x again, gcc reuses the first value), it does not use that information to fold comparisons between x and a.