Warum werden leere Funktionen in LLVM IR nicht als toter Code entfernt?

8

Beginnen Sie mit diesem einfachen C-Programm:

%Vor%

Meine Ergebnisse werden wie folgt ausgegeben:
Hinweis: IR-Anweisungen sind in Grün.

%Vor%

Frage: Verwenden von O3 , was die Optimierung der höchsten Ebene betrifft, Warum wurde nothing function nicht als Dead-Code eliminiert?

    
Ahmed Ghoneim 28.05.2016, 03:24
quelle

1 Antwort

16

Der Compiler muss die Möglichkeit in Betracht ziehen, dass es eine andere Übersetzungseinheit gibt, die nothing() aufrufen möchte. Daher kann es nicht entfernt werden. Das Beste, was es tun kann, ist, seinen Aufruf zu optimieren, aber die Funktion selbst muss bleiben und ihr Symbol für mögliche externe Verwendung exportiert werden.

Wenn Sie nothing als static definieren, geben Sie eine interne Verknüpfung ein Der Compiler kann davon ausgehen, dass nothing nicht auf den Code zugreift, den er gerade sieht. Dies ermöglicht Optimierungen, wie beispielsweise die Wahl einer anderen performanteren Aufrufkonvention, oder in Ihrem Fall, die Funktion vollständig zu eliminieren.

    
a3f 28.05.2016, 04:19
quelle

Tags und Links