https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90304

            Bug ID: 90304
           Summary: -O3 vectorization gets worse when code is moved into
                    main()
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: john.boyer at tutanota dot com
  Target Milestone: ---

The following code will get much better assembly if it is not in main():

for (int i = 0; i < 1024; ++i)
    result[i] = first[i] * second[i];

It simply multiplies two integers and stores the result.

When this code is moved into main(), it appears part of the loop no longer gets
vectorized and uses imul instead.

This does not happen when the loop is moved to it's own function.

The two left panes contain the assembly of both versions of this code:
https://godbolt.org/z/pNdbE5

NOTE: the noinline attribute has no effect on this issue, it is simply to make
the assembly more readable.

Reply via email to