LLVM 01

c 源碼到 LLVM 匯編碼

$clang -emit-llvm -S multiply.c -o multiply.ll

IR 到bytecode
llvm-as test.ll -o test.bc

llvm-as 為LLVM 的匯編器

LLVM 靜態(tài)編譯器llc

將llvm bytecoe 轉(zhuǎn)換為目標(biāo)平臺的匯編碼
llc test.bc -o test.s


clang -S test.bc -o test.s -fomit-frame-pointer # 使用clang 前端

在以上命令中加入-march=architechture 指定目標(biāo)構(gòu)架的匯編碼
,-mcpu=cpu 指定cpu , -reg allow = baseic /greedy/fast/pbqp 指定寄存器分配類型

將LLVM bitcode 轉(zhuǎn)回LLVM 匯編碼
llvm-dis test.bc -o test.ll

轉(zhuǎn)換LLVM IR
opt -passname input.ll -o output.ll

如:
clang -emit-llvm -S multiply.c -o multiply.ll
用opt , 優(yōu)化內(nèi)存訪問
opt -mem2reg -S multiply.ll -o multiply1.ll

將多個bc 鏈接成單個bc
llvm-link test1.bc test2.bc -o output.bc

執(zhí)行LLVM bitcode
lli output.bc

clang 前端

$clang test.c
編譯得到可執(zhí)行文件
-E 調(diào)用預(yù)編譯器
$clang -S test.c -o - 對到test.c 測試碼的機器碼

llgo 編譯器是LLVM 的僅使用Go 語言寫的Go語言前端

DragonEgg

DragonEgg 是一個GCC 的插件, 它使GCC 能夠使用LLVM 優(yōu)化器和代碼生成器來取代GCC 自己的優(yōu)化器和代碼生成器
$gcc testprog.c -S -O1 -o - fplugin=./dragonegg.so

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容