2012-02-27 59 views
5

我正在編寫一個使用LLVM作爲後端的編譯器,並且有很多引用計數。當我借用一個物體時,我增加了物體的參考計數器。當我釋放一個對象時,我遞減引用計數器,並釋放該對象,如果它變爲零。 但是,如果我僅做一個小片的代碼,像這樣的:告訴LLVM優化器變量的內容

++obj->ref; 
global_variable_A = obj->a; 
if (--obj->ref == 0) 
    free_object(obj); 

LLVM優化這對(在IR但是這是在C等於代碼):

global_variable_A = obj->a; 
if (obj->ref == 0) 
    free_object(obj); 

但是,由於我知道一個引用計數器總是第一個語句前正面,它可以優化到只

global_variable_A = obj->a; 

我的問題:有沒有辦法告訴LLVM優化,一個寄存器或一些MEM ory在讀取它時已知包含非零數據?

如果我可以告訴優化器一個指針是非空的,那麼其他同等的問題也會很大。

回答