在LLVM中編寫Backend Pass的詳細教程(2)

在上一篇文章中,我們已經講到編寫BackEnd Pass(或者說是Machine Pass)跟之前編寫普通Pass是有一定區別的。“Machine passes are determined by the backend code. Therefore, we will modify an existing backend to run with our custom pass to see it in practice. ” 也就是說,LLVM中的BackEnd Pass通過修改已有文件來實現的。接下來,作爲例子,我們選擇X86架構來進行演示。

 

本質上,LLVM畢竟是圍繞編譯器展開的一個工具集,或者說編譯器本身就是它的核心。因此,在編譯原理課程上學到的很多知識在瞭解或研究LLVM時都能派上用場。之前的文章中曾經提到,後端部分的分析框架一般爲MachineFunction → MachineBasicBlock → MachineInstruction。在這篇文章中,我們就來演示如何對基本塊(Basic Block)的邊際加標註。我們還會調用LLVM中的函數來對每個基本塊產生一個描述名。這篇文章,對於深入理解LLVM編譯器部分(尤其是後端部分)的實現細節很有幫助。

 

下面實驗的環境是Ubuntu 18.04,LLVM的版本是8.0,需要注意的是,在編譯LLVM時,需要選擇Debug模式(Release模式會導致我們後續的很多功能無法成功)。

 

LLVM項目中包含一個AsmPrinter.h的頭文件,This file contains a class to be used as the base class for target specific asm writers.  This class primarily handles common functionality used by all asm writers. 需要注意其中聲明的三個函數:

  • void EmitFunctionBody();
  • virtual void E
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章