Without these optimizations, you can't write fast scientific code in C. This was realized back in the early 1980s and it's why those rules were added.
In Fortran the aliasing rules are even stricter: given two arrays passed in as arguments the compiler can assume that they do not overlap, for example. I remember messing that up as a student long ago and getting strange results. The Fortran rule was to enable vectorization, which has been done for many decades.