https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110237
--- Comment #11 from Alexander Monakov <amonakov at gcc dot gnu.org> --- The trapping angle seems valid, but I have a really hard time understanding the DSE issue, and the preceding issue about disambiguation based on RTL aliasing. How would DSE optimize out 'd[5] = 1' in your example when the mask_store reads it? Isn't that a data dependency? How is the initial issue different from int f(__m128i *p, __m128i v, int *q) { *q = 0; *p = v; return *q; } that we cannot optimize to 'return 0' due to __attribute__((may_alias)) attached to __m128i?