1. 程式人生 > >讀完了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分析。