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.
Der in der Antwort angegebene Link lautet "Die LLVM-Demoseite ist derzeit deaktiviert."
EngrStudent
5
ellcc.org/demo/index.cgi ist eine weitere Möglichkeit, C / C ++ über LLVM zu verschiedenen Zielen zu kompilieren, einschließlich Zwischencode
Tom Goodfellow
1
Können Sie ein konkretes Beispiel dafür geben, was es bedeutet?
Migrate2Lazarus siehe mein Profil
112
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.
Es scheint also, dass LLVM für Compiler-Designer nützlich ist. Sollte es einem Programmierer etwas ausmachen, wenn er mit einem Standard-Compiler oder einem auf LLVM basierenden kompiliert und den generierten Code unabhängig vom Quellcode analysiert?
Jinawee
4
Wenn Sie mit LLVM zu seiner IR kompilieren können, stehen Ihnen möglicherweise viele Tools zur Analyse der IR zur Verfügung. Wenn Ihr Tool jedoch nur die nativen Binärdateien analysieren kann (z. B. x86), spielt es keine Rolle, ob es sich um LLVM-generierte Binärdateien oder gcc-generierte Binärdateien oder Intel-Compiler-generierte Binärdateien handelt.
Peter Teoh
73
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.
.. also was die Dokumente zu sagen versuchen; Während LLVM eine Abkürzung für Low Level Virtual Machine ist , heißt das Projekt einfach LLVM und nicht die vollständig geschriebenen Wörter.
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.
LLVM ist also die Bibliothek und Clang ist der Compiler?
Abdul
11
Clang ist der C / C ++ - Frontend-Compiler von LLVM. Es konvertiert C-Code in LLVM-Bitcode, der von einem Backend-Compiler in eine Assemblersprache übersetzt wird.
Boris Mulder
6
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.
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.
quelle
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.
quelle
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
quelle
Gemäß dem Buch „Erste Schritte mit LLVM-Kernbibliotheken“ (c):
quelle
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.
quelle
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
quelle