Antworten:
LLVM ist eine Bibliothek, die zum Erstellen, Optimieren und Produzieren von Zwischen- und / oder binärem Maschinencode verwendet wird.
LLVM kann als Compiler-Framework verwendet werden, in dem Sie das "Front-End" (Parser und Lexer) und das "Back-End" (Code, der die Darstellung von LLVM in tatsächlichen Maschinencode konvertiert) bereitstellen.
LLVM kann auch als JIT-Compiler fungieren - es unterstützt die Generierung von x86 / x86_64- und PPC / PPC64-Assemblys mit schnellen Codeoptimierungen, die auf die Kompilierungsgeschwindigkeit abzielen.
Wenn Sie interessiert sind, können Sie mit dem Maschinencode von LLVM spielen, der aus C- oder C ++ - Code auf der Demoseite generiert wird. Die Demoseite ist jedoch seit dem Jahr 2013 deaktiviert.
Eine gute Zusammenfassung von LLVM lautet:
Am Frontend haben Sie Perl und viele andere Hochsprachen. Im Backend befindet sich der native Code, der direkt auf dem Computer ausgeführt wird.
Im Zentrum steht Ihre Zwischencodedarstellung. Wenn jede Hochsprache in diesem LLVM-IR-Format dargestellt werden kann, können auf dieser IR basierende Analysewerkzeuge leicht wiederverwendet werden - das ist die grundlegende Begründung.
LLVM (früher "Low Level Virtual Machine", aber nicht mehr) ist eine in C ++ geschriebene Compiler-Infrastruktur, die für die Optimierung von geschriebenen Programmen zur Kompilierungs-, Link-, Laufzeit- und Leerlaufzeitoptimierung ausgelegt ist in beliebigen Programmiersprachen. Ursprünglich für C / C ++ implementiert, hat das sprachunabhängige Design (und der Erfolg) von LLVM seitdem eine Vielzahl von Frontends hervorgebracht, darunter Objective C, Fortran, Ada, Haskell, Java-Bytecode, Python, Ruby, ActionScript und GLSL , und andere.
Lesen Sie dies für weitere Erklärungen. Schauen
Sie sich auch Unladen Swallow an
Gemäß dem Buch „Erste Schritte mit LLVM-Kernbibliotheken“ (c):
Tatsächlich kann sich der Name LLVM auf eine der folgenden Angaben beziehen:
Das LLVM-Projekt / die LLVM-Infrastruktur: Dies ist ein Dach für mehrere Projekte, die zusammen einen vollständigen Compiler bilden: Frontends, Backends, Optimierer, Assembler, Linker, libc ++, Compiler-RT und eine JIT-Engine. Das Wort "LLVM" hat diese Bedeutung beispielsweise im folgenden Satz: "LLVM besteht aus mehreren Projekten".
Ein LLVM-basierter Compiler: Dies ist ein Compiler, der teilweise oder vollständig mit der LLVM-Infrastruktur erstellt wurde. Beispielsweise kann ein Compiler LLVM für das Frontend und das Backend verwenden, jedoch GCC- und GNU-Systembibliotheken verwenden, um die endgültige Verknüpfung durchzuführen. LLVM hat diese Bedeutung im folgenden Satz, zum Beispiel: "Ich habe LLVM verwendet, um C-Programme auf einer MIPS-Plattform zu kompilieren".
LLVM-Bibliotheken: Dies ist der wiederverwendbare Codeteil der LLVM-Infrastruktur. Zum Beispiel hat LLVM diese Bedeutung im Satz: "Mein Projekt verwendet LLVM, um Code über sein Just-in-Time-Kompilierungsframework zu generieren."
LLVM-Kern: Die Optimierungen auf der Ebene der Zwischensprache und die Backend-Algorithmen bilden den LLVM-Kern, in dem das Projekt gestartet wurde. LLVM hat diese Bedeutung im folgenden Satz: "LLVM und Clang sind zwei verschiedene Projekte".
Das LLVM-IR: Dies ist die Zwischendarstellung des LLVM-Compilers. LLVM hat diese Bedeutung, wenn es in Sätzen wie "Ich habe ein Frontend erstellt, das meine eigene Sprache in LLVM übersetzt" verwendet wird.
LLVM ist im Grunde eine Bibliothek, die zum Erstellen von Compilern und / oder sprachorientierter Software verwendet wird. Das Wesentliche ist, dass Sie zwar gcc haben, die wahrscheinlich die häufigste Suite von Compilern ist, diese jedoch nicht für die Wiederverwendung entwickelt wurde, d. H. Es ist schwierig, Komponenten aus gcc zu entnehmen und damit eine eigene Anwendung zu erstellen. LLVM behebt dieses Problem gut, indem es eine Reihe von "modularen und wiederverwendbaren Compiler- und Toolchain-Technologien" erstellt, mit denen jeder Compiler und sprachorientierte Software erstellen kann.
Die LLVM-Compiler-Infrastruktur ist besonders nützlich, um Optimierungen und Transformationen für Code durchzuführen. Es besteht auch aus einer Reihe von Tools, die unterschiedliche Verwendungszwecke erfüllen. llvm-prof ist ein Profiling-Tool, mit dem Sie die Ausführung profilieren können, um Programm-Hotspots zu identifizieren. Opt ist ein Optimierungstool, das verschiedene Optimierungsdurchläufe bietet (z. B. Eliminierung von totem Code).
Wichtig ist, dass LLVM Ihnen die Bibliotheken zur Verfügung stellt, mit denen Sie Ihre eigenen Pässe schreiben können. Wenn Sie beispielsweise eine Bereichsprüfung für bestimmte Argumente hinzufügen müssen, die an bestimmte Funktionen eines Programms übergeben werden, reicht es aus, einen einfachen LLVM-Pass zu schreiben.
Weitere Informationen zum Schreiben Ihres eigenen Passes finden Sie unter http://llvm.org/docs/WritingAnLLVMPass.html