天天看點

llvm 常見指令

llvm作為一套成熟的編譯體系,提供了很多指令用于不同階段的使用。通過這些指令的組合使用,可以将一個完整的編譯過程,拆分成多個步驟。

llvm-as: 将IR檔案編譯為二進制檔案,預設生成字尾名為.bc的檔案,也可以使用-o指定輸出:

llvm-as -o hello hello.ll
           

llvm-dis: 将二進制檔案回溯成IR檔案,生成.ll字尾的檔案

llvm-dis hello
           

opt: opt可以作為LLVM的優化器和分析器。如果标明-analyze就是作為分析器使用,如果沒有就是作為優化器使用。

當作為分析器時,通常會把分析結果列印到螢幕,當然少數時候也可以有其他目标方式。

當作為優化器時,opt會根據連結的動态庫和使用-load選項加載的庫做優化。

opt指令的輸入可以接受.ll格式和.bc格式的檔案。

如果-o沒有指定,opt會将結果輸出到标準輸出。

opt -S -load=xxx.so < hello.ll > hello.new.ll
           

llc: 将.ll或.bc檔案編譯為彙編檔案,輸出為字尾名.s的檔案

llc hello.ll
           

lli: 直接運作LLVM的二進制檔案。

lli hello.bc
           

llvm-link:将多個LLVM的二進制檔案合并為一個二進制檔案

llvm-link -o hello hello.bc bye.bc
           

llvm-ar:建立靜态庫,用法和ar基本一緻。

     值得注意的是llvm-ar會建立一個新的符号表來統一記錄靜态庫中所有的成員,這有助于提升速度。

llvm-ar r -hello.a hello.bc bye.bc
           

llvm-nm: 列出LLVM二進制檔案或者靜态庫檔案中的符号表。

llvm-nm hello.a
           

llvm-diff:對比兩個檔案的差別,可以用來比較.ll檔案和LLVM的二進制檔案

llvm-diff hello1.ll hello2.ll
           

llvm-nm: 列出LLVM二進制檔案或者靜态庫檔案中的符号表。

llvm-nm hello.a
           

llvm-diff:對比兩個檔案的差別,可以用來比較.ll檔案和LLVM的二進制檔案

llvm-diff hello1.ll hello2.ll