前文 講了七大環節和六大部分之間的對應關係,簡單來講就是七大環節其實對應了六大部分的第四個部分:Target-independent code generation algorithms(代碼地址:lib/CodeGen)。

我們接下里再看看新建後端的時候,所做的七大步驟,對應的是LLVM後端的六大部分的哪一部分。我們首先對六大部分進行裁剪。

後端的六大部分:

  1. Target description classes: abstract target description interfaces (代碼地址:include/llvm/Target/)
  2. Marchine code description classes: classes used to repesent the code being generated for a target (代碼地址:include/llvm/CodeGen/)
  3. The "MC" Layer: use to represent and process code at the raw machine code level(代碼地址:lib/MC include/llvm/MC)
  4. Target-independent code generation algorithms (代碼地址:lib/CodeGen)
  5. Implementations of the abstract description interfaces for particular targets (代碼地址: lib/Target)
  6. The target-independent JIT components (代碼地址:lib/ExecutionEngine/JIT)

我們首先刪除掉JIT部分的第6部分,我們暫且不關心JIT。然後我們刪除掉第4部分,對應著目標無關的演算法部分(也是對應著後端執行的七大環節的演算法),這是和具體目標沒有關係的。我們再刪除第2、3部分,這也是和具體目標沒有關係的部分。(註:本部分說的沒有關係,是從源碼目錄層面講沒有關係,並不是沒有調用關係。因為後端文檔的六大部分本就是按照源碼目錄關係進行分類的。或者可以說這些沒有關係,是不和具體的目標有關係,而都是對應多個目標的。)到了最後只剩下了1和5:

  • Target description classes: abstract target description interfaces (代碼地址:include/llvm/Target/)
  • Implementations of the abstract description interfaces for particular targets (代碼地址: lib/Target)

而Target description classes 其實也是一些基類,其中包含了很多需要的抽象介面。真正和具體的目標有關的就只剩下了Implementations of the abstract description interfaces for particular targets。這就是我們往往能看到的與具體平台有關的代碼,都是放在llvm/lib/Target下有專門的對應具體平台的目錄之下。也就是說,我們新建後端的七大步驟,主要是為了在llvm/lib/Target下為新平台實現一個自己的目錄,只不過每個步驟是為了實現不同內容,但是最終還是落在了該目錄之下。

那麼,我們用一句不太嚴謹的話總結:LLVM後端的七大執行環節,對應的是LLVM後端六大部分的第四個(Target-independent code generation algorithms);而新建LLVM後端的七大步驟,核心內容對應的是LLVM後端六大部分的第五個(Implementations of the abstract description interfaces for particular targets)。 (註:這麼總結只是為了方便新入門的讀者理解。)

相關內容:

小乖他爹:LLVM每日談之三十七 LLVM後端簡介(杭州分享PPT)

小乖他爹:LLVM每日談之四十七 LLVM後端文檔解析

小乖他爹:LLVM每日談之四十八 LLVM後端文檔解析1

推薦閱讀:

相关文章