2012-10-23 34 views
1

我正在將另一個IR轉換爲llvm IR。轉換爲LLVM IR:如何創建虛擬寄存器而不是分配堆棧變量?

我IR是這樣的:

a = 1; 
b = a; 
a = a + 1; 

現在,我使用ALLOCA在我的IR(用於 「a」 和 「B」 在這裏)創建變量。

但是,alloca可能太重了,它會引入大量的加載存儲指令。如果功能很大,這將是一個問題。實際上,對我而言,大多數變量都是寄存器寬度。所以我只想讓他們成爲一個虛擬的名字註冊。

有人知道如何創建一個虛擬寄存器(變量)而不是內存變量?

我的意思是如何避免使用「alloca」?

+0

AFAIK,你不應該在乎這一點。只需使用allocas和codegen/optimizer就可以爲你完成這項工作。 – arrowd

回答

4

你不應該。生成SSA代碼是一個相當困難的問題,所以它在LLVM傳遞中的所有前端都解決了一次。你是假設爲使用alloca並加載/存儲,然後運行mem2reg pass將那些轉換爲SSA變量。 Clang也這樣做(將你的示例代碼粘貼到C函數中,而compile it不進行優化)。