http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58482
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- It is well known that we don't vectorize this, right now we only handle accesses to the SIMD lane privatized vars that cover the whole size of those vars, while in your testcase the access size is half the size of the var. The reason why -Ofast vectorizes it is likely that SRA manages to scalarize those, but scalarizer can't do anything easily with the magic arrays indexed by SIMD_LANE internal fn that we use to represent the privatized variables (and, I couldn't find a better representation yet for those). So, either the SRA pass would need to handle those (split the single array with { float; float } pairs into two arrays with just float type), or the vectorizer would need to do some ugly magic for selected cases (e.g. handle the pair case by having two vector vars and use always either odd or even entries from them). I'm hoping that most people will actually use scalars or single data member classes for reductions etc.