2017-08-13 150 views
2

我是LLVM的新手,理解LLVM的指令生成。作爲其中的一部分,我試圖轉換一個基本的布爾指令來直接使用內存寄存器作爲操作數。例如,在下面的IR中,我希望and操作使用%a%b而不是%11%12將涉及CPU寄存器的指令轉換爲存儲器指令

%11 = load i32, i32* %a, align 4 \n 
%12 = load i32, i32* %b, align 4 \n 
%13 = and i32 %11, %12\ 
store i32 %13, i32* %d, align 4\n 

我需要爲此編寫一個新的and指令,或者是有另一種更簡單的方法?

+0

'%a'和'%b'是指針,將它們組合在一起意味着不同於將從它們加載的值進行「與」運算。那真的是你想要做的嗎? – harold

+0

我想獲取%a和%b指向的值作爲指令本身的一部分。我正在尋找像這樣的指示。 %13 =和i32 *%a,i32 *%b。這是爲了理解我是否可以在刪除兩條加載指令之前,通過直接獲取指針%a和%b的內容。 –

+5

好了,無法做到,那麼通過指針加載和存儲只能顯式完成 – harold

回答

0

我不認爲這是可行的。如果沒有明確的加載或存儲,LLVM中的內存無法訪問。