2012-02-27 15 views
5

Estoy escribiendo un compilador usando LLVM como backend y tengo un montón de recuento de referencias. Cuando tomo prestado un objeto, incremente el contador de referencia del objeto. Cuando lanzo un objeto, decremento el contador de referencia, y libero el objeto si va a cero. Sin embargo, si sólo hago una pequeña pieza de código, como éste:Indicar el contenido del optimizador de LLVM de las variables

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

LLVM optimiza esto (en el IR, pero esto es el código de la igualdad en C):

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

Pero desde sé que un contador de referencia es siempre positiva antes de la primera declaración, que podría ser optimizado para solamente

global_variable_A = obj->a; 

Mi pregunta: ¿hay alguna manera de decir al optimizador LLVM que un registro o alguna mem ory, en el momento de leerlo, se sabe que contiene datos distintos de cero?

Otra pregunta igual sería si puedo decirle al optimizador que un puntero no es nulo, eso también sería genial.

Respuesta

Cuestiones relacionadas