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

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

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

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

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

圖1-6 輸出所有涉及的Pass
- Mastering AWS Lambda
- 數(shù)據(jù)庫(kù)原理及應(yīng)用(Access版)第3版
- Effective C#:改善C#代碼的50個(gè)有效方法(原書(shū)第3版)
- CentOS 7 Server Deployment Cookbook
- JMeter 性能測(cè)試實(shí)戰(zhàn)(第2版)
- FFmpeg入門(mén)詳解:音視頻流媒體播放器原理及應(yīng)用
- Internet of Things with the Arduino Yún
- The DevOps 2.5 Toolkit
- MySQL從入門(mén)到精通(軟件開(kāi)發(fā)視頻大講堂)
- C#程序設(shè)計(jì)(項(xiàng)目教學(xué)版)
- TypeScript 2.x By Example
- Drupal 8 Development:Beginner's Guide(Second Edition)
- 啊哈C語(yǔ)言!:邏輯的挑戰(zhàn)(修訂版)
- Getting Started with Windows Server Security
- R語(yǔ)言與網(wǎng)站分析