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.