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版開始可用)。
好吧,我自己想到了這件事,但是因爲我剛剛開始使用LLVM而離開了。然而你的回答聽起來令人鼓舞附:我喜歡指示的生活! – ritter 2013-05-09 15:02:54
瞭解目標體系結構(即nvptx64),是否必須使用Triple類來創建目標體系結構? – ritter 2013-05-09 15:36:59
@Frank:這是一個簡單的方法來做到這一點。 llc在'compileModule'中執行此操作,在模塊上調用'setTargetTrople' – 2013-05-09 16:18:25