首页 > 代码库 > 读完了LLVM作者的原始thesis论文(博士毕业论文?)

读完了LLVM作者的原始thesis论文(博士毕业论文?)

有几点值得说一下:

1、指令集可以进行类型分析,但不是说单独做什么iadd、fadd这样的低级CPU操作指令抽象(JVM/CLR都是这么设计的),要点在于,引入了malloc和alloca(堆分配和栈分配)本来是C语言的库函数,却做成了虚拟指令(这里作者没有管C++里的new和new[]的区别),然后通过getelementptr可以访问数据结构的字段;

  实际上,LLVM的alloca指令意味着可以进行栈上的动态分配,当然,alloca是C语言的标准库函数,不过之前可能很少想到这么用。因为栈上的动态分配意味着栈空间不足时也要能动态扩展大小。

2、把SSA里的phi函数单独做成了指令

3、函数调用在LLVM里也真是奇葩了,居然要写上返回类型,然后其他看上去就像C语言语法了,只不过变量名字有%前缀

4、中间用很多的篇幅讲解了“数据结构图”(DSG),而且用它来分析代码是线性复杂度。不过我没有怎么看明白,这和经典的CFG/DFG有什么区别联系?

这里作者强调比较多的是LLVM上的IPO(过程间优化)。


简而言之,LLVM就是特定于C语言架构的一套RISC风格虚拟指令集,内置支持SSA和Type分析。

读完了LLVM作者的原始thesis论文(博士毕业论文?)