LLVM
Originalautor (en) | Vikram Adve, Chris Lattner |
---|---|
Entwickler (en) | LLVM -Entwicklergruppe |
Erstveröffentlichung | 2003 |
Stabile Version | 14.0.6[2] / 25. Juni 2022 |
Repository | |
Geschrieben in | C ++ |
Betriebssystem | Plattformübergreifend |
Typ | Compiler |
Lizenz | UIUC (BSD-Stil) Apache -Lizenz 2.0 mit LLVM -Ausnahmen (v9.0.0 oder höher)[3] |
Webseite | www |
Llvm ist ein Satz von Compiler und Toolchain Technologien[4] Das kann verwendet werden, um a zu entwickeln Frontend für jeden Programmiersprache und ein Back End für jeden Anweisungsset Architektur. LLVM ist um a entworfen Sprachunabhängig Zwischendarstellung (Ir) das dient als a tragbar, hohes Level Montagesprache das kann sein optimiert mit einer Vielzahl von Transformationen über mehrere Pässe.[5]
LLVM ist geschrieben in C ++ und ist für die Auseinandersetzung für Kompilierungszeit, Link-Zeit, Laufzeitund "Leerlaufzeit" -Optimierung. Ursprünglich implementiert für C Und C ++ hat das Sprach-Agnostic-Design von LLVM seitdem eine Vielzahl von Frontenden hervorgebracht: Sprachen mit Compilern, die LLVM verwenden (oder die nicht direkt LLVM verwenden, aber kompilierte Programme als LLVM IR verwenden können) enthalten Aktionen, Ada, C#,[6][7][8] Common Lisp, Picolisp, Kristall, CUDA, D, Delphi, Dylan, Weiter,[9] Forran, Freie Basis, Kostenloser Pascal, Grafisch g,[10] Halogenid, Haskell, Java -Bytecode, Julia, Kotlin, Lua, Ziel c, OpenCL,[11] PostgreSQLSQL und PLPGSQL,[12] Rubin,[13] Rost, Scala,[14] Schnell, Xc,[15] Xojo und Zick.
Geschichte
Das LLVM -Projekt begann im Jahr 2000 an der Universität von Illinois in Urbana -Champaign, Unter der Leitung von Vikram Adve und Chris Lattner. LLVM wurde ursprünglich als Forschungsinfrastruktur zur Untersuchung entwickelt Dynamische Zusammenstellung Techniken für statische und dynamisch Programmiersprachen. LLVM wurde unter dem freigelassen Universität von Illinois/NCSA Open Source -Lizenz,[3] a Zulässige freie Softwarelizenz. Im Jahr 2005, Apple Inc. Lattner beauftragt und bildete ein Team, um am LLVM -System für verschiedene Verwendungszwecke innerhalb von Apples Entwicklungssystemen zu arbeiten.[16] LLVM war ein wesentlicher Bestandteil von Apple's Xcode Entwicklungsinstrumente für Mac OS und iOS Seit Xcode 4.[17]
Im Jahr 2006 begann Lattner an einem neuen Projekt namens Clang zu arbeiten. Die Kombination von Clang Front-End und LLVM Back-End heißt Clang/LLVM oder einfach Clang.
Der Name Llvm war ursprünglich ein Initialismus zum Virtuelle Maschine auf niedriger Ebene. Das LLVM -Projekt entwickelte sich jedoch zu einem Dachprojekt, das nur wenig zu dem ist virtuelle Maschine. Als solcher war der Initialismus "verwirrend" und "unangemessen", und ab 2011 war LLVM "offiziell kein Akronym mehr".[18] Seit 2011 ist LLVM eine Marke, die für das LLVM -Regenschirmprojekt gilt.[19] umfassen die LLVM Zwischendarstellung (IR), die LLVM Debuggerdie LLVM -Implementierung der C ++ Standardbibliothek (mit voller Unterstützung von C ++ 11 und C ++ 14[20]) usw. LLVM wird von der LLVM Foundation verabreicht. Sein Präsident ist Compiler -Ingenieur Tanya Lattner.[21]
"Zum Entwerfen und Implementieren von LLVM", das Verband für Rechenmaschinen präsentierte Vikram Adve, Chris Lattner und Evan Cheng mit dem 2012 ACM Software System Award.[22]
Das Projekt war ursprünglich unter dem verfügbar UIUC -Lizenz. Seit v9.0.0 im Jahr 2019 veröffentlicht,[23] LLVM ist im Prozess der Entlassung an die Apache -Lizenz 2.0 mit LLVM -Ausnahmen.[3] Nach Abschluss des Relizens ist das Projekt nur im Rahmen der neuen Lizenz verfügbar. Bis dahin sind neue Beiträge zwei lizenziert, und das Projekt bleibt unter der UIUC-Lizenz "Legacy" verfügbar.[24] Ab dem 23. März 2022[aktualisieren]Es gab 650 Personen, deren Beiträge nicht mehr genannt wurden.[25]
Merkmale
LLVM kann die mittleren Schichten eines vollständigen Compiler -Systems liefern und einnehmen Zwischendarstellung (Ir) Code von a Compiler und ein optimiertes IR auszugeben. Dieser neue IR kann dann konvertiert und mit maschinellem Abhängigkeit verknüpft werden Montagesprache Code für eine Zielplattform. LLVM kann den IR von der akzeptieren GNU Compiler -Sammlung (GCC) Toolchain, so dass es mit einer breiten Palette vorhandener Compiler-Frontends für dieses Projekt verwendet werden kann.
LLVM kann auch erzeugen Umlebender Maschinencode bei Kompilierungszeit oder Linkzeit oder sogar Binärmaschinencode zur Laufzeit.
LLVM unterstützt einen sprachunabhängigen Befehlssatz und Typ System.[5] Jede Anweisung ist in statisches Einzelzuweisungsformular (SSA), was bedeutet, dass jeder Variable (genannt ein typisiertes Register) wird einmal zugewiesen und dann eingefroren. Dies hilft, die Analyse von Abhängigkeiten zwischen Variablen zu vereinfachen. Mit LLVM kann Code statisch zusammengestellt werden, da er sich unter dem herkömmlichen GCC-System befindet, oder für eine verspätete Kompilierung vom IR-zu-Maschinencode über die Verspätung gelassen wird Just-in-Time-Zusammenstellung (JIT), ähnlich wie Java. Das Typsystem besteht aus grundlegenden Typen wie z. ganze Zahl oder Schwimmpunkt Zahlen und fünf abgeleitete Typen: Zeiger, Arrays, Vektoren, Strukturen, und Funktionen. Ein Typkonstrukt in einer konkreten Sprache kann durch Kombinieren dieser Grundtypen in LLVM dargestellt werden. Zum Beispiel kann eine Klasse in C ++ durch eine Mischung aus Strukturen, Funktionen und Arrays von dargestellt werden Funktionszeiger.
Der LLVM JIT -Compiler kann unnötige statische Zweige zur Laufzeit aus einem Programm optimieren und ist daher nützlich für Teilbewertung In Fällen, in denen ein Programm viele Optionen hat, von denen die meisten in einer bestimmten Umgebung leicht nicht benötigt werden können. Diese Funktion wird in der verwendet OpenGL Pipeline von Mac OS X Leopard (V10.5), um Unterstützung für fehlende Hardwarefunktionen zu bieten.[26]
Der Grafikcode im OpenGL -Stack kann in der Zwischendarstellung gelassen und dann beim Ausführen auf der Zielmaschine kompiliert werden. Auf Systemen mit High-End Grafikverarbeitungseinheiten (GPUs), der resultierende Code bleibt ziemlich dünn und übergibt die Anweisungen an die GPU mit minimalen Änderungen. Auf Systemen mit Low-End-GPUs wird LLVM optionale Verfahren erstellen, die auf dem lokalen Ausführen ausgeführt werden Zentrale Verarbeitungseinheit (CPU), die Anweisungen nachahmen, die die GPU nicht intern ausführen kann. LLVM verbesserte die Leistung bei Low-End-Maschinen mithilfe von Maschinen Intel GMA Chipsätze. Ein ähnliches System wurde unter dem entwickelt Gallium3d Llvmpipe und in die eingebaut Gnom Shell, damit es ohne einen richtigen 3D -Hardware -Treiber ausgeführt wird.[27]
Für die Laufzeitleistung der kompilierten Programme übertraf GCC 2011 durchschnittlich um 10% um 10%.[28][29] Neuere Ergebnisse im Jahr 2013 zeigen, dass LLVM nun GCC in diesem Bereich eingeholt hat und jetzt Binärdateien mit ungefähr gleicher Leistung zusammenstellt.[30]
Komponenten
LLVM ist zu einem Dachprojekt geworden, das mehrere Komponenten enthält.
Frontenden
LLVM wurde ursprünglich geschrieben, um ein Ersatz für die Bestehenden zu sein Code Generator im GCC -Stack,[31] Und viele der GCC-Frontenden wurden modifiziert, um damit zu arbeiten, was zu der inzwischen nicht mehr aufgelegten LLVM-GCC-Suite führte. Die Modifikationen umfassen im Allgemeinen a Gimple-TO-LLVM IR-Schritt, damit LLVM-Optimierer und Codegen anstelle des Gimple-Systems von GCC verwendet werden können. Apple war ein bedeutender Benutzer von LLVM-GCC durch Xcode 4.x (2013).[32][33] Diese Verwendung des GCC -Frontend wurde meist als vorübergehendes Maß angesehen, aber mit dem Aufkommen von Klang und Vorteile von LLVM und Clangs modernen und modularen Codebasis (sowie Kompilierungsgeschwindigkeit) sind größtenteils veraltet.
LLVM unterstützt derzeit die Zusammenstellung von Ada, C, C ++, D, Delphi, Forran, Haskell, Julia, Ziel c, Rost, und Schnell Verwenden von verschiedenen Frontenden.
Das weit verbreitete Interesse an LLVM hat zu verschiedenen Anstrengungen geführt, um neue Frontenden für eine Vielzahl von Sprachen zu entwickeln. Derjenige, der die meiste Aufmerksamkeit erhalten hat, ist Clang, ein neuer Compiler, der C, C ++ und Objective-C unterstützt. Clang wird hauptsächlich von Apple unterstützt und zielt darauf ab, den C/Objective-C-Compiler im GCC-System durch ein System zu ersetzen, das einfacher in integriert ist. Integrierte Entwicklungsumgebungen (IDES) und hat eine breitere Unterstützung für Multithreading. Unterstützung für OpenMP Richtlinien wurden in enthalten Klang Seit Veröffentlichung 3.8.[34]
Die Utrecht Haskell Der Compiler kann Code für LLVM generieren. Obwohl sich der Generator in den frühen Entwicklungsstadien befindet, war er in vielen Fällen effizienter als der C -Codegenerator.[35] Da ist ein Glasgow Haskell Compiler (GHC) Backend unter Verwendung von LLVM, das eine Beschleunigung des kompilierten Codes im Vergleich zur nativen Code-Kompilierung über GHC- oder C-Codeerzeugung erreicht, gefolgt von Kompilieren, die nur eine der vielen von der GHC implementierten Optimierungstechniken fehlen.[36]
Viele andere Komponenten befinden sich in verschiedenen Entwicklungsstadien, einschließlich, aber nicht beschränkt auf die Rost Compiler, a Java -Bytecode Frontend, a Gemeinsame Zwischensprache (Cil) vorderes Ende, das Makruby Implementierung von Ruby 1.9, verschiedene Frontenden für Standard ml, und eine neue Grafikfarbe Registrieren Sie Allocator.
Zwischendarstellung
Der Kern von LLVM ist der Zwischendarstellung (IR), eine Programmiersprache auf niedriger Ebene ähnlich der Assembly. IR ist ein stark getippt Reduziertes Anweisungssatz Computing (RISC) Anweisungssatz, der die meisten Details des Ziels abstrahiert. Zum Beispiel wird die aufrufende Konvention abstrahiert durch Anruf und ret Anweisungen mit expliziten Argumenten. Anstelle eines festen Satzes von Registern verwendet IR auch eine unendliche Reihe von Zeiträumen der Form %0, %1 usw. LLVM unterstützt drei äquivalente Formen von IR: ein menschliches lesbares Assembly-Format, ein in Memory-Format für geeignetes In-Memory-Format für Frontenden und ein dichter Bitcode -Format zum Serialisieren. Eine einfache "Hallo Welt!" Programm im IR -Format:[37]
@.str = intern Konstante [14 x i8] c"Hallo, Welt \ 0a \ 00" erklären i32 @printf(i8*, ...) definieren i32 @hauptsächlich(i32 %argc, i8** %argv) Nounwind { Eintrag: %TMP1 = GetElementptr [14 x i8], [14 x i8]* @.str, i32 0, i32 0 %TMP2 = Anruf i32 (i8*, ...) @printf( i8* %TMP1 ) Nounwind ret i32 0 }
Die vielen verschiedenen verwendeten Konventionen und Merkmale, die von verschiedenen Zielen bereitgestellt werden, bedeuten, dass LLVM nicht wirklich ein zielunabhängiges IR erzeugen und es wieder aufnehmen und einige festgelegte Regeln verstoßen kann. Beispiele für Zielabhängigkeit über das, was in der Dokumentation explizit erwähnt wird, finden Sie in einem Vorschlag für "Wordcode" von 2011, einer vollständig zielunabhängigen Variante von LLVM IR, die für die Online-Verteilung bestimmt sind.[38] Ein praktischeres Beispiel ist PNACl.[39]
Das LLVM -Projekt führt auch eine andere Art von Zwischendarstellung namens MLIR ein[40] Dies hilft, wiederverwendbare und erweiterbare Compiler -Infrastrukturen aufzubauen, indem eine Plugin -Architektur mit dem Namen Dialekt verwendet wird.[41] Es ermöglicht die Verwendung von Informationen über höherer Ebene über die Programmstruktur im Optimierungsprozess, einschließlich polyedrischer Zusammenstellung.
Rücken endet
In Version 13 unterstützt LLVM viele Anweisungssätze, einschließlich IA-32, x86-64, ARM, Qualcomm Hexagon, MIPS, Nvidia Parallele Thread -Ausführung (PTX; genannt Nvptx in LLVM -Dokumentation), Powerpc, Amd Terascale,[42] die meisten AMD GPU -aktuelle (genannt AMDGPU in LLVM -Dokumentation),[43] Sparc, Z/Architektur (genannt Systemz in LLVM -Dokumentation) und Xcore.
Einige Funktionen sind auf einigen Plattformen nicht verfügbar. Die meisten Funktionen sind für IA-32, X86-64, Z/Architektur, ARM und Powerpc vorhanden.[44] Risc-v wird ab Version 7 unterstützt.
In der Vergangenheit unterstützte LLVM auch andere Backends, einschließlich C -Backend, vollständig oder teilweise. Zelle Spu, Mblaze (Microblaze),[45] AMD R600, DEC/COMPAQ Alpha (Alpha AXP)[46] und NIOS2,[47] Diese Hardware ist jedoch größtenteils veraltet, und LLVM -Entwickler entschieden, dass die Unterstützung und Wartungskosten nicht mehr gerechtfertigt waren.
LLVM unterstützt auch WebAssembly Als Ziel können kompilierte Programme in Webassembling-fähigen Umgebungen wie z. Google Chrome / Chrom, Feuerfuchs, Microsoft Edge, Apfelsafari oder wavm. LLVM-konforme WebAssembly-Compiler unterstützen in der Regel den hauptsächlich in C, C ++, D, Rost, NIM, Kotlin und mehreren anderen Sprachen geschriebenen nicht modifizierten Quellcode.
Das Subproject von LLVM Maschinencode (MC) ist das Rahmen von LLVM zum Übersetzen von Maschinenanweisungen zwischen Textformularen und Maschinencode. Früher stützte sich LLVM auf den System -Assembler oder eine, die von einer Toolchain bereitgestellt wurde, um die Baugruppe in den Maschinencode zu übersetzen. Der integrierte Assembler von LLVM MC unterstützt die meisten LLVM-Ziele, einschließlich IA-32, X86-64, Arm und ARM64. Für einige Ziele, einschließlich der verschiedenen MIPS -Befehlssets, ist integrierter Montageunterstützung verwendbar, aber immer noch in der Beta -Stufe.
Linker
Das LLD-Unterprojekt ist ein Versuch, eine integrierte, plattformunabhängige Entwicklung zu entwickeln Linker Für LLVM.[48] LLD zielt darauf ab, die Abhängigkeit von einem Linker von Drittanbietern zu beseitigen. Ab Mai 2017[aktualisieren], lld unterstützt ELF, PE/Coff, Macho, und WebAssembly[49] in absteigender Reihenfolge der Vollständigkeit. LLD ist schneller als beide Aromen von Gnu ld.
Im Gegensatz zu den GNU-Linsen hat LLD eine integrierte Unterstützung für eingebaute Unterstützung für Link-Zeit-Optimierung. Dies ermöglicht eine schnellere Codeerzeugung, da er die Verwendung eines Linker -Plugins umgeht, andererseits die Interoperabilität mit anderen Geschmacksrichtungen von LTO verbietet.[50]
C ++ Standardbibliothek
Das LLVM -Projekt enthält eine Implementierung der C ++ Standardbibliothek Libc ++ genannt, unter dem doppelt lizenziert MIT -Lizenz und die UIUC -Lizenz.[51]
Seit v9.0.0 wurde es an die nachgelassen Apache -Lizenz 2.0 mit LLVM -Ausnahmen.[3]
Polly
Dies implementiert eine Reihe von Cache-Lokalität-Optimierungen sowie automatische Parallelismus und Vektorisation unter Verwendung eines polyedrischen Modells.[52]
Debugger
C Standardbibliothek
LLVM-libc ist ein unvollständiges, bevorstehendes Abi-Independent C Standardbibliothek Entworfen von und für das LLVM -Projekt.[53]
Derivate
Aufgrund seiner zulässigen Lizenz veröffentlichen viele Anbieter ihre eigenen abgestimmten Gabeln von LLVM. Dies wird offiziell durch die Dokumentation von LLVM anerkannt, die aus diesem Grund gegen die Verwendung von Versionsnummern in Funktionsprüfungen vorschlägt.[54] Einige der Anbieter umfassen:
- AMDs AMD -Optimierung von C/C ++ - Compiler basiert auf LLVM, Klang und Flang.
- Apple unterhält eine Open-Source-Gabel für Xcode.[55]
- ARM behält eine Gabel von LLVM 9 als "Arm Compiler".
- Intel hat LLVM für ihre nächste Generation übernommen Intel C ++ - Compiler.[56]
- Das Los Alamos Nationales Labor hat eine parallelkomputierende Gabel von LLVM 8 namens "Kitsune".[57]
- Seit 2013 verwendet Sony den primären Front-End-Clang-Compiler von LLVM in der Softwareentwicklungskit (SDK) von seinem Playstation 4 Konsole.[58]
- Nvidia Verwendet LLVM bei der Implementierung seiner NVVM CUDA Compiler.[59] Der NVVM -Compiler unterscheidet sich vom in der erwähnten "NVPTX" Backends -AbschnittObwohl beide PTX -Code für NVIDIA -GPUs erzeugen.
- IBM übernimmt LLVM in seiner C/C ++ und Forran Compiler.[60]
Siehe auch
- Gemeinsame Zwischensprache
- HHVM
- C--
- Amsterdam Compiler Kit (ACK)
- LLDB (debugger)
- GNU lightning
- GNU Compiler -Sammlung (GCC)
- Rein
- OpenCL
- Rocm
- Emscripten
- Tenda -Verteilungsformat
- Architektur Neutrales Verteilungsformat (Undf)
- Vergleich der virtuellen Anwendungsmaschinen
- Spire-V
- Universität von Illinois bei Urbana Champaign Discoveries & Innovationen
Literatur
- Chris Lattner - Die Architektur von Open Source -Anwendungen - Kapitel 11 LLVM, ISBN978-1257638017, veröffentlicht 2012 unter CC von 3.0 (Uneingeschränkter Zugang).[61]
- LLVM: Ein Kompilierungsrahmen für die lebenslange Programmanalyse und Transformation, ein veröffentlichtes Papier von Chris Lattner, Vikram Adve
Verweise
- ^ "LLVM -Logo". Das LLVM -Compiler -Infrastrukturprojekt.
- ^ "LLVM 14.0.6 Release". 25. Juni 2022. Abgerufen 27. Juni, 2022.
- ^ a b c d "Lizenz.TXT". llvm.org. Abgerufen 24. September, 2019.
- ^ "Das LLVM -Compiler -Infrastrukturprojekt". Abgerufen 11. März, 2016.
- ^ a b "LLVM -Sprachreferenzhandbuch". Abgerufen 9. Juni, 2019.
- ^ "Ankündigung von LLILC - Ein neuer LLVM -basierter Compiler für .NET". DotNetFoundation.org. Abgerufen 12. September, 2020.
- ^ Mono llvm, abgerufen 10. März, 2013
- ^ Chris Lattner (2011). "LLVM". In Amy Brown; Greg Wilson (Hrsg.). Die Architektur von Open Source -Anwendungen.
- ^ "Moveforth". GitHub. 28. November 2021.
- ^ William Wong (23. Mai 2017). "Was ist der Unterschied zwischen LabView 2017 und LabView NXG?". Elektronisches Design.
- ^ Michael Larabel (11. April 2018). "Khronos kündigt offiziell seinen LLVM/Spire-V-Übersetzer an". Phoronix.com.
- ^ "32.1. Was ist JIT -Zusammenstellung?". PostgreSQL -Dokumentation. 12. November 2020. Abgerufen 25. Januar, 2021.
- ^ "Merkmale". Rubymotion. Scratchwork Development LLC. Abgerufen 17. Juni, 2017.
Rubymotion Verwandelt den Ruby-Source-Code Ihres Projekts in ... Maschinencode mit einem [n] ... AOT-Compiler (POST-TIME), basierend auf LLVM.
- ^ Reedy, Geoff (24. September 2012). "Skala zu llvm zusammenstellen". St. Louis, Missouri, USA. Abgerufen 19. Februar, 2013.
{{}}
: Journal zitieren erfordert|journal=
(Hilfe) - ^ "Xcore: Multicore-Theorie, Hardware und Programmierung (2014-12-01)", Entwickler Tool XtimeComposer, Xmos, Dezember 2014, abgerufen 27. März, 2021
- ^ Adam Treat (19. Februar 2005), mkspecs und Patches für LLVM -Kompilierung von QT4, archiviert von das Original am 4. Oktober 2011, abgerufen 27. Januar, 2012
- ^ "Entwickler -Toolsübersicht". Apple -Entwickler. Apfel. Archiviert von das Original am 23. April 2011.
- ^ Lattner, Chris (21. Dezember 2011). "Der Name von LLVM". llvm-dev (Mailingliste). Abgerufen 2. März, 2016.
'LLVM' ist offiziell kein Akronym mehr. Das Akronym, das es einst erweiterte, war verwirrend und fast ab Tag 1. :) Da LLVM andere Unterprojekte umfasst, wurde es noch weniger nützlich und bedeutungslos.
- ^ Lattner, Chris (1. Juni 2011). "LLVM". In Brown, Amy; Wilson, Greg (Hrsg.). Die Architektur von Open Source -Anwendungen. ISBN 978-1257638017.
Der Name 'LLVM' war einst ein Akronym, ist aber jetzt nur eine Marke für das Umbrella -Projekt.
- ^ ""LIBC ++" C ++ Standardbibliothek ".
- ^ Chris Lattner (3. April 2014). "Die LLVM Foundation". LLVM -Projektblog.
- ^ "ACM Software System Award". ACM.
- ^ Wennborg, Hans (19. September 2019). "[LLVM-Announce] LLVM 9.0.0 Release".
- ^ "LLVM -Entwicklerpolitik - LLVM 15.0.0Git -Dokumentation". llvm.org. Abgerufen 1. April, 2022.
- ^ "Long Tail ausfreunden". Foundation.llvm.org. Siehe Tabellenkalkulationslink.
- ^ Chris Lattner (15. August 2006). "Eine coole Verwendung von LLVM bei Apple: The OpenGL Stack". llvm-dev (Mailingliste). Abgerufen 1. März, 2016.
- ^ Michael Larabel, "Gnome Shell funktioniert ohne GPU -Treiberunterstützung", Phoronix, 6. November 2011
- ^ V. Makarov. "Spec2000: Vergleich von LLVM-2.9 und GCC4.6.1 auf x86". Abgerufen 3. Oktober, 2011.
- ^ V. Makarov. "Spec2000: Vergleich von LLVM-2.9 und GCC4.6.1 auf x86_64". Abgerufen 3. Oktober, 2011.
- ^ Michael Larabel (27. Dezember 2012). "LLVM/Clang 3.2 Compiler, der mit GCC konkurriert". Abgerufen 31. März, 2013.
- ^ Lattner, Chris; Vikram Adve (Mai 2003). Architektur für einen GCC der nächsten Generation. Erster jährlicher GCC -Entwicklergipfel. Abgerufen 6. September, 2009.
- ^ "LLVM Compiler -Übersicht". Entwickler.apple.com.
- ^ "Xcode 5 Versionsnotizen". Apple Inc.
- ^ "Clang 3.8 Versionsnotizen". Abgerufen 24. August, 2016.
- ^ "Haskell zu llvm zusammenstellen". Abgerufen 22. Februar, 2009.
- ^ "LLVM -Projektblog: Der Glasgow Haskell Compiler und LLVM". 17. Mai 2010. Abgerufen 13. August, 2010.
- ^ Für die vollständige Dokumentation finden Sie auf llvm
.org /docs /Langref .html. - ^ Kang, Jin-gu. "WordCode: Mehr Zielunabhängige LLVM -Bitcode" (PDF). Abgerufen 1. Dezember, 2019.
- ^ "PNACL: Tragbare native Client -Ausführbare" (PDF). Archiviert von das Original (PDF) am 2. Mai 2012. Abgerufen 25. April 2012.
- ^ "Mlir". mlir.llvm.org. Abgerufen 7. Juni, 2022.
- ^ "Dialekte - mlir". mlir.llvm.org. Abgerufen 7. Juni, 2022.
- ^ Stellard, Tom (26. März 2012). "[LLVMDEV] RFC: R600, ein neues Backend für AMD GPUs". llvm-dev (Mailingliste).
- ^ "Benutzerhandbuch für AMDGPU -Backend - LLVM 15.0.0Git -Dokumentation".
- ^ Zielspezifische Implementierungsnotizen: Zielfunktionsmatrix // Die LLVM-Ziel-unabhängige Codegeneratorin, LLVM-Site.
- ^ "Entfernen Sie das Mblaze -Backend von LLVM". GitHub. 25. Juli 2013. Abgerufen 26. Januar, 2020.
- ^ "Entfernen Sie das Alpha -Backend". GitHub. 27. Oktober 2011. Abgerufen 26. Januar, 2020.
- ^ "[Nios2] NiOS2 -Backend entfernen". GitHub. 15. Januar 2019. Abgerufen 26. Januar, 2020.
- ^ "LLD - der LLVM -Linker". Das LLVM -Projekt. Abgerufen 10. Mai, 2017.
- ^ "WebAssembly LLD Port".
- ^ "42446 - LLD kann GCC LTO -Dateien nicht verarbeiten". bugs.llvm.org.
- ^ ""LIBC ++" C ++ Standardbibliothek ".
- ^ "Polly - Polyedrale Optimierungen für LLVM".
- ^ "LLVM-LIBC: Eine ISO C-Konformante Standardbibliothek-LIBC 15.0.0Git-Dokumentation". libc.llvm.org. Abgerufen 18. Juli, 2022.
- ^ "Klangspracherweiterungen". Klang 12 Dokumentation.
Beachten Sie, dass Marketing -Versionsnummern nicht verwendet werden sollten, um nach Sprachfunktionen zu überprüfen, da verschiedene Anbieter unterschiedliche Nummerierungsschemata verwenden. Verwenden Sie stattdessen die Funktionen, die Makros überprüft.
- ^ "Apple/llvm-project". Apfel. 5. September 2020.
- ^ "Intel C/C ++ Compiler vollständige Einführung von LLVM". Intel. Abgerufen 17. August, 2021.
- ^ "Lanl/Kitsune". Los Alamos National Laboratory. 27. Februar 2020.
- ^ Entwickler Toolchain für PS4 (PDF), abgerufen 24. Februar, 2015
- ^ "NVVM IR -Spezifikation 1.5".
Der aktuelle NVVM IR basiert auf LLVM 5.0
- ^ "IBM C/C ++ - und FORTRAN -Compiler zur Übernahme von LLVM Open Source Infrastructure".
- ^ Chris Lattner (15. März 2012). "Kapitel 11". Die Architektur von Open Source -Anwendungen.Amy Brown, Greg Wilson. ISBN 978-1257638017.