私はバックエンドとしてLLVMを使用してコンパイラを作成しており、多くの参照カウントがあります。オブジェクトを借りると、オブジェクトの参照カウンタがインクリメントされます。私がオブジェクトを解放すると、私は参照カウンタを減らし、ゼロになるとオブジェクトを解放します。しかし 、私はこのように、コードの小片を行う場合:変数のLLVMオプティマイザの内容を教えてください
++obj->ref;
global_variable_A = obj->a;
if (--obj->ref == 0)
free_object(obj);
LLVMは、(IRではなく、これはCで同じコードである)にこれを最適化:
global_variable_A = obj->a;
if (obj->ref == 0)
free_object(obj);
しかし以来私はそれだけで
global_variable_A = obj->a;
私の質問に最適化することができ、参照カウンタが最初の文の前に常にポジティブであることを知っている:レジスタまたは一部MEMことLLVMオプティマイザを伝えるためにどのような方法がありますoryは、それを読むときに非ゼロのデータを含むことが知られていますか?
他の同等の質問は、ポインタがnullでないこともオプティマイザに伝えることができます。