https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63202
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Well, as with restrict it would be nice to be able to annotate the memory references themselves with alignment info. Btw, a possibility would be to insert assume_aligned calls into the IL from the if (p & 15) __builtin_unreachable (); pattern and remove the test & __builtin_unreachable (). Of course quite special and breaks down for assume (!(p & 15) && a == b). As Jakub said, the testcase can be handled with the existing code as there is no use of p before the conditional. Note that there isn't an extra loop for the "unaligned" case but the extra loop is for the case where there is aliasing between p and b. But yes, we fail to use aligned loads here (but movdqu doesn't have a penalty for that).