2016-07-19 15 views
4

Clang Compiler basiert auf LLVM-Infrastruktur, Clang-Frontend übernimmt den C/C++ - Quellcode und erzeugt den LLVM-IR, der den Optimizer und die Code-Generierung nutzt?Clang Compiler-Stufen

Da die Optimizer-Pass-Bibliotheken strategisch platziert und aufgerufen werden müssen, um den optimierten Code zu generieren, wo ist die Reihenfolge angegeben, auch wer generiert den Zielcode? Ist dies ein Teil von Clang-Frontend-Programm oder gibt es ein anderes Programm, das diese Optimierung und Generierung durchführt?

Antwort

2

Es gibt eigentlich zwei clang s, sozusagen.

Eines ist ein Front-End: es parst einfach, erstellt einen Abstract Syntax Tree (AST) und wendet verschiedene semantische Prüfungen an. Es kann auch einige statische Analysen und andere hilfreiche Dinge tun. Man kann Zugriff auf die Front-End mit -cc1 Option, zB: clang -cc1 -ast-dump

zweite ist ein Fahrer: es dauert AST von Front-End und emittiert LLVM IR, während einige Optimierungen aufbringt und dann machen alle anderen Zauber wie Gebäude Objektdateien und verbinden verschiedene Komponenten miteinander. Dies passiert normalerweise, wenn man clang main.c oder einen ähnlichen Befehl aufruft.

Bitte beachten Sie, um Hilfe von beiden clangs bereitgestellt suchen:

clang -help 
clang -help-hidden 
clang -cc1 -help 
clang -cc1 -help-hidden 
+0

Präprozessor Teil der Frontend-Stufe ist? – osgx

+0

@osgx ja, alles im Zusammenhang mit AST ist Teil der Front-End-Bühne. – AlexDenisov

+3

Treiber * nimmt AST nicht vom Frontend. Es gibt auch keine IR aus. All dies geschieht in clang -cc1. Der Treiber "normalisiert" verschiedene Optionen, Pfade und behandelt die Aufrufwerkzeuge als Linker. –