自己動手寫LLVM pass 零

2021-10-23 20:21:46 字數 1253 閱讀 2089

您已經跟隨著llvm的官方教程完成了helloworld pass…..

現在,您想學的更多,看更多的**,例子……

因此,您可以深入到無比優秀的llvm源**樹,了解這些著名且功能強大的優化如何通過pass實現的…

但結果卻是被異乎尋常的傳遞構造語法所迷惑,這種語法既不類似於你剛剛遵循的教程,也沒有在官方**的任何地方記錄

這正是我幾年前碰到的,當時,我還是乙個llvm新手和llvm pass是我之前聽到的唯一的事情。

作為llvm中最重要的核心元件之一,pass和passmanager系統的開發時間可以追溯到2023年,其原因是許多缺少優化機會的案例和編譯速度回歸。

整個**庫也開始通過併排放置舊的pass和new pass實現來反映這些變化。

使用者可以通過提供特定的命令列選項切換到新的傳遞管理器,而舊的傳遞管理器仍然是預設值。

然而,正如前言部分所指出的那樣,目前還沒有關於這項創新的官方檔案。

雖然作為新的傳遞管理器及其文件頁面,他們的發貨日期已經非常接近,但我仍然想為那些渴望了解源**樹中現在發生的事情的那些愛好者寫乙個簡單的教程。

我把這個系列分為四個部分:

以新的傳遞管理器方式編寫乙個新的helloworld pass;

如何使用新的analysismanager替換舊getanalysis<...>()語法;

如何在llvm源**樹中整合傳遞;

llvm源**樹內部的傳遞需要一些額外的語法,這篇文章將告訴你如何做。

我知道在一篇名為new pass manager的有點奇怪的文章中談論遺留傳遞管理器。但考慮到llvm的龐大專案規模及其在行業中的廣泛採用,移植肯定需要一些時間。因此,對於那些對樹內開發感興趣的人來說,只考慮這部分作為延遲(實際上近十年)的教程。

「如何新增乙個clang選項來使用我在llvm中構建的酷炫功能?」。好吧,這部分會告訴你如何。雖然它似乎與之前文章中的新傳遞管理器主題正交,但它始終是我的「教程/提示應該正式記錄」。

開始吧!

我不會談論設計細節,比如新的pass管理器與舊的pass管理器相比如何提高編譯速度和優化質量。新的pass管理器革命由llvm社群中的一些最好的開發人員領導,您應該在相關材料中聽到他們的解釋(而不是我的)(例如llvm開發者會議中的會談)。我將從一位專注於中端優化和分析開發的pass manager使用者的角度來講述這個故事。所以後端沒有覆蓋。

此外,您應該始終檢查llvm郵件列表和源**中的注釋。這些地方的資訊可能分散,但它們總是最新的。

自己動手寫bootloader

原始出處 作者資訊和本宣告。否則將追究法律責任。為了寫乙個bootloader讓板子跑起來,首先我們要知道bootloader是個什麼東東才行。簡單的說,bootloader就是乙個引導核心啟動的一段小 也就是說當啟動完核心之後,它的使命就已經結束。bootloader生命週期 初始化硬體 設定啟動...

自己動手寫CMS

簡易的cms外掛程式,可供借鑑或者擴充套件 流程 定義內容 分類與組織內容 儲存內容 操作控制內容 定義內容 制定目標 確定需要的內容型別 目標使用者定位 確定目標使用者需要何種技術 分類與組織內容 按內容所屬的邏輯層級關係來劃分 按內容的種類來劃分,比如video text audio等等 儲存內...

自己動手寫SpringMVC 四

本文將主要實現dispatcherservlet!之前已經分析過dispatcherservlet主要的任務,分為五個任務,我們從任務一開始開始實現!任務1 把專案中所有的bean掃瞄,進行維護 實現 如下 private void scanpackage string basepackage el...