深入理解LLVM:代码生成
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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