2012-02-27 11 views
5

Piszę kompilatora LLVM używając jako backend i mają dużo liczenia odniesienia. Kiedy pożyczam obiekt, zwiększam licznik referencyjny obiektu. Kiedy zwalniam obiekt, zmniejszam licznik odwołań i uwalniam obiekt, jeśli osiągnie zero. Jednakże, jeśli tylko zrobić mały kawałek kodu, jak to jedno:Powiedz LLVM zawartość optymalizatora zmiennych

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

LLVM optymalizuje to (w podczerwieni, ale jest to równe kod w C):

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

Ale ponieważ wiem, że licznik odniesienia jest zawsze dodatni przed pierwszym oświadczeniu, może zostać zoptymalizowane tylko

global_variable_A = obj->a; 

moje pytanie: czy istnieje jakiś sposób, aby powiedzieć, że optymalizator LLVM, że rejestr lub jakiś mem ory, w czasie czytania, zawiera dane niezerowe?

Innym równa pytanie byłoby, jeśli mogę powiedzieć, że optymalizator, że wskaźnik jest niezerowe, który byłby również wspaniałe.

Odpowiedz