2013-05-09 87 views
5

從包含一些IR的LLVM模塊*Mod開始:如何使用特定的後端從其生成目標特定的彙編程序?不幸的是,萬花筒教程沒有詳細介紹。它僅使用執行引擎來JIT編譯程序(在構建目標體系結構上),但實際上並未選擇特定的後端來生成特定於目標的彙編程序。我想,LLVM教程也沒有,因爲它們沒有詳細說明如何構建靜態編譯器。因此,這個問題可以提供這些缺失的信息。使用LLVM API生成靜態代碼

由於我們想構建一個靜態編譯器,因此我們不想使用命令行工具如llc等來完成這項工作。我們想要使用LLVM API。

爲了使這更具體,讓我們開始使用此代碼:

LLVMContext &Context = getGlobalContext(); 
SMDiagnostic Err; 
Module *Mod = ParseIRFile(argv[1], Err, Context); 

的文件名(由第一個參數給出)被成功解析到IR。現在讓我們跳過優化過程並創建一些帶有特定後端的彙編程序,例如PTX後端(從3.2版開始可用)。

回答

8

請查看tools/llc/llc.cpp的源代碼。它可以做到這一點,而且很短,不難理解。如果你對某些你不瞭解的東西有特定的問題,請隨時詢問。

+0

好吧,我自己想到了這件事,但是因爲我剛剛開始使用LLVM而離開了。然而你的回答聽起來令人鼓舞附:我喜歡指示的生活! – ritter 2013-05-09 15:02:54

+0

瞭解目標體系結構(即nvptx64),是否必須使用Triple類來創建目標體系結構? – ritter 2013-05-09 15:36:59

+1

@Frank:這是一個簡單的方法來做到這一點。 llc在'compileModule'中執行此操作,在模塊上調用'setTargetTrople' – 2013-05-09 16:18:25