Einfacher Getter / Accessor verhindert Vektorisierung - gcc bug?

8

Betrachten Sie diese minimale Implementierung einer festen vector<int> :

%Vor%

Gegeben folgender Testfall:

%Vor%

Der Compiler erzeugt nicht-vektorisierte Assembly: Live-Beispiel auf godbolt.org

Wenn ich any der folgenden Änderungen mache ...

  • values[size()] - & gt; values[_size]

  • Fügen Sie __attribute__((always_inline)) zu size()

  • hinzu

... dann erzeugt der Compiler eine vektorisierte Assembly: Live-Beispiel auf godbolt.org

Ist das ein gcc-Fehler? Oder gibt es einen Grund, warum ein einfacher Accessor wie size() die automatische Vektorisierung verhindert, wenn always_inline nicht explizit hinzugefügt wird?

    
Vittorio Romeo 13.02.2018, 13:17
quelle

0 Antworten