https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81870
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Petr from comment #2) > I see, so if I understand it correctly then: > > 1. `__builtin_assume_aligned()` should be used to promote the type to a > higher than natural alignment, for example 16 bytes for easier > auto-vectorization. > > 2. `__attribute__((aligned(N)))` should be used to relax alignment of native > types to lower than natural alignment. > > It's interesting that with `__builtin_assume_aligned()` I achieved basically > the same effect as with `__attribute__((aligned(N))`, just the sanitizer is > not happy. > > Interestingly, I thought that __builtin_assume_aligned() is basically > equivalent to `__assume_aligned()` provided by Intel and MS compilers. > > Anyway thanks for your answer, I need to fix my code a bit. __builtin_assume_aligned cannot be used to decrease alignment or make unaligned accesses valid. I didn't know __assume_aligned by Intel and MS does that.