2012-03-20 57 views
1

爲什麼我必須這樣做mem2reg傳遞字節碼優化以獲得另一個優化傳遞結果? mem2reg有什麼用?爲什麼優化通過沒有mem2reg不起作用?

opt -dce myfile.bc 
在這種情況下

我有在我有在輸出代碼更改這第二種情況下的輸出代碼

opt -mem2reg -dce myfile.bc 

不變化

編輯: LLVR IR仍然爲SSA形式,不是嗎?使用mem2reg我應該有一個「修剪」的SSA形式,是嗎?

+0

那麼,什麼是代碼樣子? (嘗試運行'llvm-dis'或其他所謂的東西。)一種優化使另一種優化成爲可能。 – delnan 2012-03-20 19:33:49

+0

是的,我知道這一點,但我的問題是mem2reg是什麼?它做什麼樣的優化? – Nicola 2012-03-20 23:59:41

回答

6

mem2reg pass將LLVM IR的非SSA格式轉換爲SSA格式,將堆棧分配值加載和存儲到「寄存器」(SSA值)。許多LLVM優化傳遞以SSA形式對代碼進行操作,因此很可能無人看到非SSA形式的IR。更

有點信息是在這裏:http://llvm.org/docs/Passes.html#mem2reg-promote-memory-to-register

+0

不好意思,但LLVR IR仍然成SSa形式,不是嗎?這樣我應該有一個「修剪」的SSA表格,對嗎? – Nicola 2012-03-28 18:10:31

+0

@Nicola - LLVM IR可能是SSA形式,現在可能會(因爲LLVM世界中的內存不是SSA)。因此,您可以輕鬆擁有非SSA LLVM IR - 帶有alloca的加載和存儲。 – 2012-03-29 17:39:05

+0

好的,謝謝!.......... – Nicola 2012-03-31 16:54:20

相關問題