https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102700
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |12.0 --- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- Vectorization can only maintain one of the locations: - [t.ii:9:8] _6 = foo.ptr; - [t.ii:9:8] [t.ii:9:8] D.2488.ptr = _6; + [t.ii:9:8] vect__6.9_12 = MEM <vector(2) int> [(int *)&foo]; [t.ii:4:5] MEM[(struct shared_count *)[t.ii:20:3] &D.2488 + 4B] ={v} {CLOBBER}; - [t.ii:4:13] _7 = [t.ii:4:13] MEM[(struct shared_count &)[t.ii:20:11] &foo + 4].pi; - [t.ii:4:7] [t.ii:4:7] MEM[(struct shared_count *)[t.ii:20:3] &D.2488 + 4B].pi = _7; + [t.ii:9:8] MEM <vector(2) int> [(int *)&D.2488] = vect__6.9_12; so we combine the reads at t.ii:9:8 and t.ii:4:7 (that's the uninitialized one) into a vector read at t.ii:9:8. I don't see how GCCs IL allows us to do better.