2012-02-27 29 views
5

Tôi đang viết trình biên dịch bằng LLVM làm phần phụ trợ và có rất nhiều tính tham chiếu. Khi tôi mượn một vật, tôi tăng bộ đếm tham chiếu của vật thể. Khi tôi giải phóng một đối tượng, tôi làm giảm bộ đếm tham chiếu và giải phóng đối tượng nếu nó đi đến số không. Tuy nhiên, nếu tôi chỉ làm một đoạn mã nhỏ, như thế này một:Cho nội dung của trình tối ưu hóa LLVM của các biến

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

LLVM tối ưu hóa này để (trong IR nhưng đây là mã tương đương bằng C):

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

Nhưng kể từ tôi biết rằng một bộ đếm tham khảo luôn là tích cực trước khi báo cáo kết quả đầu tiên, nó có thể được tối ưu hóa để chỉ

global_variable_A = obj->a; 

câu hỏi của tôi: có cách nào để nói cho tôi ưu LLVM rằng một thanh ghi hoặc một số mem ory, tại thời điểm đọc nó, được biết là chứa dữ liệu khác không?

Một câu hỏi bình đẳng khác sẽ là nếu tôi có thể nói với trình tối ưu hóa rằng con trỏ là không null, điều đó cũng sẽ tuyệt vời.

Trả lời

Các vấn đề liên quan