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.