https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77689
Bug ID: 77689 Summary: Missing vectorization lead to huge performance loss Product: gcc Version: 6.2.1 Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: morandidodo at gmail dot com Target Milestone: --- Created attachment 39673 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=39673&action=edit Asm code of the main, generated by gcc and icc I recently started using auto-vectorization as much as possible. Unfortunately, I discovered that gcc is often unable to vectorize code. I wrote a very simple MWE which (unfortunately, from my point of view) performs around 11X faster if compiled with icc instead of gcc. Here is the code: #include <vector> #include <cmath> constexpr unsigned s = 100000000; int main() { std::vector<float> a, b, c; a.reserve(s); b.reserve(s); c.reserve(s); for(unsigned i = 0; i < s; ++i) { if(i == 0) a[i] = b[i] * c[i]; else a[i] = (b[i] + c[i]) * c[i-1] * std::log(i); } } I attach the generated assembly with both compiler. I hope that it could help someone try improving the vectorization procedures.