LLVM 編譯器基礎架構
網站地圖
下載!
搜尋 本站


實用 連結
發佈 電子郵件
19.1.7: Jan 2025
19.1.6: Dec 2024
19.1.5: Dec 2024
19.1.4: Nov 2024
19.1.3: Oct 2024
19.1.2: Oct 2024
19.1.1: Oct 2024
19.1.0: Sep 2024
18.1.8: Jun 2024
18.1.7: Jun 2024
18.1.6: May 2024
18.1.5: May 2024
18.1.4: Apr 2024
18.1.3: Apr 2024
18.1.2: Mar 2024
18.1.1: Mar 2024
18.1.0: Mar 2024
所有公告

由以下團隊維護
llvm-admin team
使用 LLVM 建構的專案

此頁面為使用 LLVM 建構的專案之不完整列表,依反時間順序排序。此列表的想法是展示 LLVM 已用於各種課程專案或其他目的的一些成果,可用於作為未來專案的靈感來源。另一個值得參考的地方是已發表的論文和學位論文,其中使用 LLVM的列表。

請注意,此頁面並非旨在反映 LLVM 的當前狀態,或表示對任何特定專案的認可。這僅僅是展示許多人所做的努力。它也展示了 LLVM 的功能如何隨時間演進。

我們一直在尋找對此頁面的新貢獻。如果您從事的專案在課程或出版物中使用 LLVM,我們非常樂意聽取您的意見,並希望在此處收錄您的作品。請發送電子郵件至 LLVM-dev 郵件列表,並提供如下所示的條目。我們並非特別尋找原始碼(儘管我們歡迎通過正常管道提交原始碼貢獻),而是希望展示您作品的「精美成果」,包括報告、論文、簡報、海報或您擁有的任何其他內容。

Dragonegg 將 LLVM 優化器和程式碼產生器與 GCC 解析器整合。這使得 LLVM 能夠編譯 Ada、Fortran 和 GCC 編譯器前端支援的其他語言,並存取 Clang 不支援的 C 功能。請參閱 dragonegg 網頁

目前的 MRE 是單體的。擴展它們以提出新功能或重複使用它們來執行新語言是很困難的。VMKit 是一個函式庫,可簡化新 MRE 的開發以及在 MRE 內部試驗新機制的過程。VMKit 提供了 MRE 的基本組件:JIT 編譯器、GC 和執行緒管理器。請參閱 vmkit 網頁

作者:Gleison Mendonca、Breno Campos Ferreira Guimaraes、Péricles Alves、Marcio Machado Pereira、Guido Araéujo 和 Fernando Magno Quintao Pereira。
請參閱 Dawn 專案 網頁

基於指令的程式設計模型,例如 OpenACC 和 OpenMP,如今已成為支援平行應用程式開發的有前景的技術。這些系統允許開發人員以最少的人工干預將循序程式轉換為平行程式。然而,將 pragmas 插入生產程式碼是一項困難且容易出錯的任務,通常需要熟悉目標程式。這種困難限制了開發人員註解他們自己沒有編寫的程式碼的能力。本文提供了解決此問題的一個基本組件。我們介紹了一種靜態程式分析,可推斷原始碼中引用的記憶體區域的邊界。當平行化程式碼要在加速器裝置(例如 GPU)中執行時,這些邊界允許我們自動插入資料傳輸原語。為了驗證我們的想法,我們已將它們應用於 Polybench,使用了兩種不同的架構:Nvidia 和 Qualcomm-based。我們已成功分析了 Polybench 中 98% 的所有記憶體存取。此結果使我們能夠將自動註解插入到這些基準測試中,從而使速度提高了 100 倍以上。

作者:Zach DeVito

Terra 是一種系統程式語言,它嵌入在 Lua 中並由 Lua 進行元程式設計,Lua 處理諸如條件編譯、類型系統、命名空間和範本/函式特化等細節,這些細節在其他語言中通常是特殊的結構。Terra 程式碼與 Lua 共享語法和控制流程結構,並且可以輕鬆呼叫 Lua 函式,反之亦然。由於 JIT 編譯器在運行時可用,因此函式庫和嵌入式領域特定語言可以使用它來動態產生或自動調整具有自訂優化的任意高效能程式碼。

Terra 向後相容於(並且可嵌入)現有的 C 程式碼,並且同樣是一種小型、單態、靜態類型、編譯型語言,具有手動記憶體管理。還內建支援 SIMD 運算和其他低階功能,例如非暫時寫入和預取。Terra 可以選擇獨立於 LuaJIT 和 LLVM 運行。事實上,如果您的最終程式不需要 Lua,您可以將 Terra 程式碼儲存到物件檔案、共享函式庫或可執行檔中。

作者:Codasip Ltd.

Codasip Studio 是一個高度自動化的開發環境,涵蓋特定應用指令集處理器 (ASIP) 設計的所有方面,包括基於 LLVM 的 C/C++ 編譯器產生。

從以 CodAL(Codasip 的處理器描述語言)編寫的處理器的高階描述開始,使用者能夠產生設計實作、驗證環境、虛擬系統原型和完整的可重新發佈程式設計環境。

Codasip Studio 包含一個編譯器後端產生器,它可以分析 CodAL 描述,然後自動產生 LLVM 後端的來源,並支援許多用於 ASIP 程式設計的擴展。這樣,使用者能夠在幾天內為其特定架構產生一個可運作的 C/C++ 編譯器。

Pony 是一種物件導向、actor 模型、功能安全、高效能程式語言。它透過使用 actor 模型擴展類別模型來強調並行思維,以便 actor 成為一等公民。該語言是靜態類型的、類型和記憶體安全的,並帶有一系列強大的保證:沒有資料競爭、沒有未捕獲的異常和沒有死鎖。Pony 實作了一個標記和不掃描的垃圾收集器,而無需世代或讀取和寫入障礙。不需要「停止世界」步驟。actor 之間的所有訊息傳遞都是因果關係的。

作者:smackers

SMACK 是一個自動化軟體驗證器,用於驗證在其輸入 LLVM 中間表示 (IR) 程式中給出的斷言。在底層,SMACK 是一個從 LLVM IR 到 Boogie 中間驗證語言 (IVL) 的轉換器。以 Boogie 為目標利用了一個規範平台,該平台簡化了驗證、模型檢查和抽象解釋演算法的實作。

DiscoPoP (Discovery of Potential Parallelism,潛在平行性發現) 是一個工具,可協助識別循序 C/C++ 程式中的潛在平行性。它檢測程式碼以尋找控制和資料依賴性。一系列分析建立在依賴性之上,以探索潛在的平行性和平行模式。檢測是借助 LLVM 完成的。還提供了一個修改後的 Clang 版本,帶有一個新的選項 "-dp",用於調用 DiscoPoP。

作者:Jérôme Gorin (ARTEMIS/Institut Telecom/Telecom SudParis)、Mickaël Raulet、Matthieu Wipliez (IETR/INSA Rennes)

Jade (Just-in-time Adaptive Decoder Engine,即時自適應解碼器引擎) 是一個通用視訊解碼器引擎,它使用 LLVM 來即時編譯視訊解碼器配置。這些配置由 MPEG 可重新配置視訊編碼 (RVC) 委員會設計。MPEG RVC 標準建立在解碼器的基於串流的資料流表示之上。它由以 RVC-CAL 語言編寫的編碼工具標準函式庫和解碼器的資料流配置(區塊圖)組成。

Jade 專案作為開放 RVC-CAL 編譯器 (Orcc) 的一部分託管,並且需要它將視訊編碼工具的 RVC-CAL 標準函式庫轉換為 LLVM 組譯碼。

Crack 旨在提供腳本語言的易於開發性和編譯語言的效能。該語言衍生自 C++、Java 和 Python 的概念,結合了物件導向程式設計、運算符多載和強類型。

Rubinius 是一個用於 Ruby 的新虛擬機器。它利用 LLVM 使用 LLVM 的 JIT 將 Ruby 程式碼動態編譯為機器碼。

MacRuby 是在核心 Mac OS X 技術(例如 Objective-C 公共運行時和垃圾收集器以及 CoreFoundation 框架)之上實作的 Ruby。它主要由 Apple 開發,旨在實現完整 Mac OS X 應用程式的建立。

MacRuby 使用 LLVM 進行最佳化傳遞、Ruby 表達式的 JIT 和 AOT 編譯。它還使用零成本 DWARF 異常來實作 Ruby 異常處理。

由多位貢獻者提供。

除了產生易於移植的開源 OpenCL 實作之外,pocl 的另一個主要目標是透過編譯器最佳化來提高 OpenCL 程式的效能可移植性,從而減少對目標相關手動最佳化的需求。

pocl 的一個重要部分是一組 LLVM 傳遞,用於在核心編譯器中靜態平行化多個工作項目,即使在存在工作組障礙的情況下也是如此。這使得能夠以多種方式靜態平行化工作組中細粒度的靜態並行性。

作者:坦佩雷理工大學 自訂平行計算 小組

TCE 是一個工具集,用於設計基於傳輸觸發架構 (TTA) 的自訂外露資料路徑處理器。

該工具集提供了一個完整的協同設計流程,從 C/C++ 程式到可合成的 VHDL/Verilog 和平行程式二進位檔。處理器自訂點包括暫存器檔案、功能單元、支援的運算和互連網路。

TCE 使用 Clang 和 LLVM 來支援 C/C++/OpenCL C 語言、目標獨立最佳化以及程式碼產生的部分。它為設計的處理器產生新的基於 LLVM 的程式碼產生器「即時」,並將它們作為運行時函式庫載入到編譯器後端,以避免每個目標重新編譯較大部分的編譯器鏈。

作者:Gary Benson(Red Hat,美國)

IcedTea 專案的成立是為了提供一個框架,僅使用自由軟體建置工具來建置 OpenJDK,並為 OpenJDK 中尚未自由的部分提供替代品。隨著時間的推移,各種 OpenJDK 的擴展已包含在 IcedTea 中。

這些擴展之一是 Zero。 OpenJDK 僅支援 x86 和 SPARC 處理器;Zero 是一個獨立於處理器的層,允許 OpenJDK 使用任何處理器建置和運行。Zero 包含一個名為 Shark 的 JIT 編譯器,它使用 LLVM 來提供原生程式碼產生,而無需引入依賴於處理器的程式碼。

Zero 和 Shark 的開發由 Red Hat 資助。

作者:Albert Graef,約翰內斯·古騰堡大學美因茨(德國)

Pure 是一種基於項重寫的代數/函數式程式語言。程式是方程式的集合,用於以符號方式評估表達式。Pure 提供動態類型、急式和惰性求值、詞法閉包、衛生巨集系統(也基於項重寫)、內建列表和矩陣支援(包括列表和矩陣推導)以及易於使用的 C 介面。直譯器使用 LLVM 作為後端來 JIT 編譯 Pure 程式以獲得快速的原生程式碼。

除了通常的代數資料結構之外,Pure 還具有 MATLAB 風格的矩陣,以便以有效的方式支援數值計算和訊號處理。Pure 目前主要針對數學應用,但它被設計為一種通用語言。動態直譯器環境和 C 介面使其可以用作許多應用領域的函數式腳本語言。

D 是一種具有類似 C 語法和靜態類型的語言。它務實地結合了效率、控制和建模能力,以及安全性和程式設計師生產力。D 支援強大的概念,例如編譯時函式執行 (CTFE) 和範本元程式設計,提供了一種創新的並行方法,並提供了許多經典範例。

LDC 編譯器使用參考編譯器的前端,並結合 LLVM 作為後端來產生高效的原生程式碼。

這個專案 描述了一個編譯器前端的開發,該前端為類似 Java 的程式語言產生 LLVM 組譯碼。它用於編譯器課程中,以展示如何透過使用 JFlex 和 Cup 等常用工具來逐步設計和實作翻譯過程的後續階段。每個步驟開發的原始碼都是可用的。

作者:Fernando Pereira 和 Jens Palsberg,加州大學洛杉磯分校。

在這個專案中,我們展示了暫存器分配可以看作是解決一系列謎題。我們將暫存器檔案建模為謎題板,將程式變數建模為謎題碎片;預著色和暫存器別名自然地融入其中。對於 x86、SPARC V8 和 StrongARM 等架構,我們可以在多項式時間內解決這些謎題,並且我們已使用一個簡單的溢出啟發式方法擴展了謎題求解器。對於 SPEC CPU2000,我們的實作與 LLVM 使用的線性掃描的擴展版本一樣快。我們的實作產生的 Pentium 程式碼品質與速度較慢、最先進的迭代暫存器合併演算法(George 和 Appel 的演算法,並由 Smith、Ramsey 和 Holloway 擴展)產生的程式碼品質相似。

專案頁面,其中包含指向驗證 LLVM 暫存器分配器輸出的工具的連結。

Faust Real-Time Signal Processing System

FAUST 是一種用於即時音訊訊號處理的編譯語言。FAUST 的名稱代表 Functional AUdio STream(函數式音訊串流)。它的程式設計模型結合了兩種方法:函數式程式設計和區塊圖組合。您可以將 FAUST 視為具有文字語法的結構化區塊圖語言。該專案旨在為 Faust 開發一個新的後端,它將直接產生 LLVM IR,而不是 Faust 目前產生的 C++ 類別。借助(即將推出的)Faust 編譯器的函式庫版本,它將允許開發人員嵌入 Faust + LLVM JIT 以動態定義、即時編譯和執行 Faust 外掛程式。LLVM IR 和工具還允許一些不錯的位元組碼操作,例如「部分評估/特化」,也將對其進行研究。

作者:Adobe Systems Incorporated

有效利用可用於影像處理的計算資源是 Adobe Image Foundation 專案的目標。我們的語言「Hydra」用於描述單階段和多階段影像處理核心,然後將其編譯並在目標機器上的較大應用程式中運行。與它的同名者有許多頭一樣,我們的 Hydra 可以在 GPU 上運行,或者在主機 CPU 上交替運行。AIF 將 LLVM 用於我們的 CPU 路徑。

第一個使用我們系統的 Adobe 應用程式是即將出貨的 After Effects CS3。我們歡迎您試用我們的公開測試版,網址為 labs.adobe.com

作者:Domagoj Babic,卑詩大學。

Calysto 是一個可擴展的上下文和路徑敏感的基於 SSA 的靜態斷言檢查器。與其他靜態檢查器不同,Calysto 直接分析 SSA,這意味著它不僅檢查原始程式碼,還檢查用於編譯程式碼的編譯器的前端(包括 SSA 最佳化)。在 SSA 上進行靜態檢查的優點是語言獨立性,以及檢查的程式碼比原始碼更接近產生的組件。

有幾個主要因素促成了 Calysto 的可擴展性

  • 一種新穎的 SSA 符號執行演算法,它利用控制流程圖的結構來最大限度地減少需要考慮的路徑數量。
  • 惰性程序間分析。
  • Spear 自動定理證明器緊密整合,該證明器專為軟體靜態檢查而設計。
  • 當然,還有 LLVM 中基本演算法(支配樹、後支配等)的快速實作。

目前,Calysto 仍處於開發階段,初步結果令人鼓舞。最有可能的是,第一個公開版本將在 2007 年秋季的某個時候發布。Spear 和 Calysto 產生的 基準測試 是可用的。

作者:Fernando Pereira,加州大學洛杉磯分校。

當限制為單一靜態分配 (SSA) 形式的程式時,暫存器分配問題有一個精確的多項式解。儘管引人注目,但這一重大的理論成就尚未得到經驗驗證。這個專案包括使用 LLVM 編譯器框架實作完整的基於 SSA 的暫存器分配器。我們實作了目標程式的靜態轉換,簡化了暫存器分配器的實作並提高了它產生的程式碼的品質。我們還描述了執行暫存器合併和 SSA 消除的新技術。為了驗證我們的分配技術,我們將我們方法的不同風味與 此處描述的線性掃描暫存器分配器的現代且經過大量調整的擴展進行了廣泛的比較。當目標架構提供的暫存器數量較少時,所提出的演算法始終如一地產生更快的程式碼。例如,當將暫存器數量限制為四個通用暫存器和三個保留暫存器時,我們實現了平均 9.2% 的加速。透過使用積極的合併技術擴展該演算法,我們已能夠將速度提升提高到 13.0%。

這個專案得到了 Google Summer of Code 計畫的支持。Fernando Pereira 由 CAPES 資助,專案編號為 218603-9。

專案頁面。

作者:Michael O. McCracken,加州大學聖地牙哥分校。

LENS 專案 旨在改進測量程式和調查其行為的任務。LENS 在 XML 中定義了程式的外部表示,以儲存基於程式結構(包括迴圈結構資訊)可存取的有用資訊。

Lens 為基於 XPath 和 LENS XML 文件結構的程式組件定義了一個靈活的命名方案。這允許使用者和工具從統一介面選擇性地查詢程式行為,從而允許使用者或工具詢問有關程式組件的各種問題,這些問題可以由任何理解查詢的工具回答。查詢、度量和程式結構都儲存在 LENS 檔案中,並使用版本名稱進行註解,以支援歷史比較和科學記錄保存。

編譯器編寫者可以使用 LENS 輕鬆公開程式的轉換和分析結果,而無需擔心顯示或處理資訊過載。已使用 LLVM 示範了此功能。LENS 將 LLVM 用於兩個目的:首先,使用 LLVM 傳遞在 XML 中產生初始程式結構檔案;其次,作為選擇性查詢編譯器資訊優勢的示範,在 LLVM 中建置了一個介面,允許 LLVM 傳遞輕鬆回應 LENS 檔案中的查詢。

Trident 是一個用於以 C 語言編寫的浮點演算法的編譯器,產生針對可重新配置邏輯裝置的暫存器傳輸級 VHDL 電路描述。Trident 使用傳統的編譯器最佳化和排程技術自動提取平行性和流水線迴圈體。Trident 還提供了一個開放的框架,用於實驗、分析和最佳化 FPGA 上的浮點演算法,以及輕鬆整合自訂浮點函式庫的靈活性。

Trident 使用 LLVM C/C++ 前端來解析輸入語言並產生低階平台獨立程式碼。

Ascenium 是一種細粒度連續可重新配置處理器,它以硬連線速度處理大多數指令,同時保留以傳統高階語言為目標的能力,為使用者提供「硬體的全部效能,軟體的全部易用性」。

Ascenium 團隊更喜歡 LLVM 位元組碼作為其程式碼產生器的輸入,原因有以下幾個

  • LLVM 的全包容格式使全域最佳化和整合(例如全域資料依賴性分析)變得容易。
  • LLVM 豐富且嚴格的類型格式通常使微妙而複雜的最佳化變得容易。
  • LLVM 出色的輔助工具和文件使其易於使用 - 即使是硬體怪咖也能理解它!

Ascenium 的 HOT CHIPS 17 簡報 更詳細地描述了架構和編譯器。

作者:Tobias Nurmiranta

這是一個用 scheme 編寫的用於 LLVM 的 小型 scheme 編譯器。它足以編譯自身並工作。

程式碼與書本 SICP(電腦程式的構造和解釋)第五章中的程式碼非常相似,不同之處在於它實作了 SICP 假設顯式控制評估器(虛擬機器)已經擁有的額外功能。編譯器的許多功能是在 scheme 的子集 llvm-defines 中實作的,這些子集被編譯為 llvm 函式。

LLVM 可視化工具 (LLVM-TV) 可用於視覺化 LLVM 框架中編寫的轉換的效果。我們的視覺化反映了編譯單元在轉換之間單一時間點的狀態;我們將這些儲存的狀態稱為「快照」。使用者可以視覺化同一個模組的一系列快照(例如,在最佳化程式時)或不同模組的快照以進行比較。

我們的目標受眾包括在 LLVM 框架內工作的開發人員,他們試圖理解 LLVM 表示及其分析和轉換。此外,LLVM-TV 的設計使其易於新增新型程式視覺化模組。LLVM-TV 基於 wxWidgets 跨平台 GUI 框架,並使用 AT&T Research 的 GraphViz 繪製圖形。

Wiki 頁面,其中包含概述;設計文件和使用者手冊。您可以從 LLVM SVN (https://llvm.dev.org.tw/svn/llvm-project/television/trunk) 下載 llvm-tv。

線性掃描暫存器分配是一種快速的全域暫存器分配,最初在 線性掃描暫存器分配 中提出,作為更廣泛使用的圖形著色方法的替代方案。在本文中,我在具有 SSA 形式的系統中應用線性掃描暫存器分配演算法,並展示如何透過利用生命週期孔和記憶體運算元來改進演算法,並消除為溢出程式碼保留暫存器的需要。

專案報告:PSPDF

傳統架構將硬體指令集用於雙重目的:首先,作為一種表達軟體程式語意的語言,其次,作為一種控制硬體的方法。低階虛擬架構 專案的論點是將這兩種用途彼此分離,允許以語意更豐富、更易於操作的格式表達軟體,並允許直接在編譯程式碼上進行更強大的最佳化和全程式分析。

我們在 LLVA 中使用的語意豐富的格式基於 LLVM 編譯器基礎架構的中間表示,可以最好地理解為「虛擬指令集」。這意味著雖然它的指令與底層硬體中可用的指令緊密匹配,但它們可能與底層硬體理解的指令不完全對應。我們將這些底層指令稱為「實作指令集」。在這兩層之間存在翻譯層,通常以軟體實作。

在這個專案中,我們透過以下步驟在這個努力中邁出了下一步邏輯步驟:(1) 將整個 Linux 核心移植到 LLVA,以及 (2) 設計一個環境,其中核心可以直接從其 LLVM 位元組碼表示運行 - 本質上是一個最小但完整的模擬電腦系統,LLVA 作為其原生指令集。我們發明的模擬器 llva-emu 透過將程式從 LLVM 位元組碼格式「即時」翻譯為處理器的原生指令集來執行核心程式碼。

專案報告:PSPDF

作者:Brian Fahs

正如每個現代電腦使用者所經歷的那樣,軟體更新和升級經常需要重新啟動程式,有時甚至需要重新啟動整個作業系統。這可能是一種痛苦且令人惱火的體驗。如果這種常見的煩惱可以完全避免或至少顯著減少呢?想像一下,僅當您想關閉電腦時才重新啟動系統,或者僅當您想要關閉應用程式時才關閉應用程式,而不是在發生更新時關閉應用程式。這個專案的目的是調查執行可執行檔動態修補的潛力,並建立一個能夠自動產生修補程式並將其應用於已在運行的應用程式的修補工具。這個專案應該回答諸如以下問題:如何執行動態更新?需要什麼類型的分析?這種分析可以有效地自動化嗎?可以在運行的可執行檔中更新什麼(例如,演算法、組織、資料等)?

專案報告:PSPDF

作者:Tanya Brethour、Joel Stanley 和 Bill Wendling

在本報告中,我們介紹了基於 [1999 年 TOPLAS SSAPRE 論文] 的 PRE 演算法的實作細節、經驗效能資料和顯著修改。[1999 年 TOPLAS SSAPRE 論文] 中描述了一種稱為 SSAPRE 的 PRE 的特定實作,它比傳統的 PRE 實作更有效率,因為它依賴靜態單一分配 (SSA) 形式的有用屬性,以比傳統的基於位元向量的方法更稀疏的方式執行資料流程分析。我們的實作特定於稱為 LLVM(低階虛擬機器)的基於 SSA 的編譯器基礎架構。

專案報告:PSPDF

我們介紹了 Jello 的設計和實作,Jello 是一個適用於 Intel IA32 架構的多目標平台 即時 (JIT) 編譯器。Jello 的輸入是一個靜態編譯為低階虛擬機器 (LLVM) 位元組碼的 C 程式。Jello 利用 LLVM 位元組碼表示的功能來允許高效的運行時程式碼產生,同時強調多目標平台性。我們的方法在靜態單一分配形式中使用抽象機器碼表示,它是機器獨立的,但可以處理機器特定的功能,例如隱式和顯式暫存器引用。由於這種表示是目標獨立的,因此程式碼產生的許多階段可以是目標獨立的,從而使 JIT 易於重新定向到新平台,而無需更改程式碼產生器。Jello 的最終目標是為未來在運行時最佳化以傳統方式靜態編譯的語言編寫的程式提供一個靈活的主機。

請注意,Jello 最終演變為目前的 LLVM JIT,它是工具 lli 的一部分。

專案報告:PSPDF

作者:Alon Zakai 和其餘的 Emscripten 貢獻者

Emscripten 將 LLVM 位元組碼編譯為 JavaScript,這使得將 C 和 C++ 原始碼編譯為 JavaScript 成為可能(首先使用 Clang 將其編譯為 LLVM 位元組碼),然後可以在網路上運行。Emscripten 已用於移植大型現有的 C 和 C++ 程式碼庫,例如 Python(標準 CPython 實作)、Bullet 物理引擎和 eSpeak 語音合成器等等。

Emscripten 本身是用 JavaScript 編寫的。重要組件包括 Relooper 演算法,它從 LLVM 位元組碼中存在的低階基本區塊資訊產生高階 JavaScript 控制流程結構(「if」、「while」等),以及用於 LLVM 組件的 JavaScript 解析器。

rust 是一種大括號、區塊結構化的表達式語言。它在視覺上類似於 C 語言系列,但在語法和語意細節上差異很大。它的設計面向「大規模程式設計」的關注點,即建立和維護邊界 - 包括抽象和運作 - 以維護大型系統的完整性可用性並行性

它支援命令式程序、並行 actor、物件導向和純函數式風格的混合。Rust 還支援靜態和動態風格的泛型程式設計和元程式設計。

靜態/原生編譯使用 LLVM。

ESL (嵌入式系統語言) 是一種新的程式語言,專為有效率地實作嵌入式系統和其他低階系統程式設計專案而設計。ESL 是一種具型別的編譯語言,其功能允許程式設計師指定資料值的具體表示法;這在處理通訊協定或裝置暫存器等情況時非常有用。

創新功能包括:沒有保留字、程序可以回傳多個值、自動位元組順序轉換、類型的方法(但沒有類別)。語法更像 Pascal 而不是 C,但使用 C 語言風格的括號。編譯器從 LL IR 自舉。

即時系統編譯器 (RTSC) 是一種具有作業系統感知能力的編譯器,允許對給定即時應用程式的即時系統架構進行通用操作。

目前,其最有趣的應用是將事件觸發(即基於 OSEK OS)系統自動遷移到時間觸發(即基於 OSEKTime)系統。為了實現這一點,RTSC 從應用程式的原始碼中導出一個抽象的全域相依性圖,該圖由所謂的「原子基本區塊」(ABB)組成。這個「ABB 圖」不依賴於原始作業系統,但包含應用程式的所有控制和資料相依性。因此,這個圖可以映射到另一個目標作業系統。目前,輸入應用程式可以使用 OSEK OS 編寫,然後遷移到 OSEKTime 或 POSIX 系統。

LLVM 框架在整個過程中被使用。首先,建構 ABB 圖所需的應用程式靜態分析是使用 LLVM 框架執行的。此外,目標系統的操作和最終產生也基於 LLVM。

Vuo 是一種現代視覺化程式語言,適用於多媒體藝術家。Vuo 編譯器接受以各種語言編寫的模組化組件,以及組件之間資料流的圖。 使用 LLVM 程式碼產生 API,Vuo 編譯器將該圖轉換為原生的多執行緒可執行檔。