2014-01-30 6 views
7

Ich habe vor kurzem angefangen, mit Clang/LLVM zu arbeiten und würde gerne wissen, ob es eine spezielle Dokumentation darüber gibt, was die -Ox-Optimierungsebenen tun?Bedeutung der LLVM-Optimierungsstufen

Ich konnte auf der LLVM-Dokumentationsseite nicht viel finden. Kann jemand ein paar Links teilen?

Danke.

Antwort

14

Die Dokumentation der Befehlszeilenoptionen von Clang ist in der Tat sehr dürftig, und insbesondere haben Sie Recht, dass es fast keine Erklärung dafür gibt, was die Optimierungsebene bewirkt.

FreeBSD, aber fügt ein man page with a useful summary:

-O0 -O1 -O2 -Os -Oz -O3 -O4
zu verwenden, die Optimierungsstufe angeben zu. -O0 bedeutet "keine Optimierung": diese Ebene kompiliert die schnellste und generiert die meisten debuggable-Code. -O2 ist ein moderater Optimierungsgrad , der die meisten Optimierungen ermöglicht. -Os ist wie -O2 mit zusätzlichen Optimierungen, um die Code-Größe zu reduzieren. -Oz ist wie -Os (und somit -O2), , aber reduziert die Codegröße weiter. -O3 ist wie -O2, außer dass es ermöglicht Optimierungen, die länger dauern, oder die größeren Code generieren (in dem Versuch, das Programm schneller laufen lassen). Auf unterstützten Plattformen aktiviert -O4 die Verbindungszeit Optimierung; Objektdateien werden in der LLVM-Bitcodedatei Format gespeichert und die gesamte Programmoptimierung erfolgt zur Verbindungszeit. -O1 ist irgendwo zwischen -O0 und -O2.

Wenn Sie schauen, um die genaue Liste der Pässe für jede Optimierung durchgeführt, um zu finden, sehen Sie diese Frage Stackoverflow: