2012-02-27 13 views
5

Sto scrivendo un compilatore utilizzando LLVM come back-end e ho un sacco di conteggi di riferimento. Quando prendo in prestito un oggetto, incremento il contatore di riferimento dell'oggetto. Quando rilascio un oggetto, decremento il contatore di riferimento e liberare l'oggetto se si azzera. Tuttavia, se solo faccio un piccolo pezzo di codice, come questo:Informare il contenuto dell'ottimizzatore LLVM delle variabili

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

LLVM ottimizza questo (in IR, ma questo è il codice uguale a C):

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

Ma dal momento che so che un contatore di riferimento è sempre positivo prima della prima istruzione, potrebbe essere ottimizzato per solo

global_variable_A = obj->a; 

la mia domanda: esiste un modo per dire al ottimizzatore LLVM che un registro o qualche mem È noto che, al momento della lettura, contiene dati diversi da zero?

Un'altra domanda uguale sarebbe se potessi dire all'ottimizzatore che un puntatore non è nullo, sarebbe anche ottimo.

risposta

Problemi correlati