- 深入理解LLVM:代碼生成
- 彭成寒 李靈 戴賢澤 王志磊 俞佳嘉
- 487字
- 2024-12-18 16:44:28
1.4 LLVM在線工具
如果讀者不想構建LLVM,也可以使用在線工具Complier Explorer(https://godbolt.org)學習LLVM各種功能和代碼變化。該在線工具可以直觀地比較優化前后的代碼變化情況,支持多種語言作為輸入,也支持LLVM IR、LLVM MIR(Machine IR)作為輸入,該工具可以選擇不同的編譯器進行編譯。
1)Compiler Explorer初始界面如圖1-2所示,可以選擇不同的編程語言。

圖1-2 輸入代碼并選擇編程語言
2)選擇不同的編譯器,并為編譯器添加不同的編譯選項,例如選擇Clang版本,添加命令行參數-emit-llvm -S用于生成LLVM IR,如圖1-3所示。

圖1-3 選擇編譯器并添加編譯選項
3)本書主要關注代碼生成,對應的命令行入口是llc。llc使用LLVM IR作為輸入,如果要生成BPF后端代碼,可以在編譯選項中填入-march=bpf,如圖1-4所示。

圖1-4 配置編譯選項
選擇Add new視圖下的LLVM Opt Pipeline選項(見圖1-5),可以展示Clang編譯過程使用的Pass(參見附錄C)。

圖1-5 選擇LLVM Opt Pipeline
得到的結果如圖1-6所示,在LLVM Opt Pipeline視圖中,第一列是所有Pass,右側兩列是某一Pass的輸入和輸出。如果IR經過某個Pass處理后發生變化,在LLVM Opt Pipeline中使用高亮的綠色表示變化,右側兩列會提示變化的情況。(因印刷緣故,綠色、粉色都變成淺灰色,請讀者注意。而在實際網頁中,粉底色表示刪除、綠色表示添加。)

圖1-6 輸出所有涉及的Pass
推薦閱讀
- Mastering matplotlib
- Scratch 3游戲與人工智能編程完全自學教程
- GameMaker Programming By Example
- Reactive Android Programming
- Integrating Facebook iOS SDK with Your Application
- PHP從入門到精通(第4版)(軟件開發視頻大講堂)
- Android玩家必備
- C語言程序設計
- Frank Kane's Taming Big Data with Apache Spark and Python
- Distributed Computing in Java 9
- C++ System Programming Cookbook
- Backbone.js Testing
- Oracle 12c從入門到精通(視頻教學超值版)
- Mastering JavaScript
- 高性能PHP 7