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在讀取它時已知包含非零數據?
如果我可以告訴優化器一個指針是非空的,那麼其他同等的問題也會很大。