// visitor functions void do_StoreField (StoreField* x) { if (x->is_init_point()) { // putstatic is an initialization point so treat it as a wide kill kill_memory(); } else { kill_field(x->field()); } }
// visitor functions void do_StoreField (StoreField* x) { if (x->is_init_point() || // putstatic is an initialization point so treat it as a wide kill // This is actually too strict and the JMM doesn't require // this in all cases (e.g. load a; volatile store b; load a) // but possible future optimizations might require this. x->field()->is_volatile()) { kill_memory(); } else { kill_field(x->field(), x->needs_patching()); } }
void do_LoadField (LoadField* x) { if (x->is_init_point()) { // getstatic is an initialization point so treat it as a wide kill kill_memory(); } }
void do_Intrinsic (Intrinsic* x) { if (!x->preserves_state()) kill_memory(); }
void do_UnsafePutObject(UnsafePutObject* x) { kill_memory(); }
void do_UnsafePutRaw (UnsafePutRaw* x) { kill_memory(); }
void do_Invoke (Invoke* x) { kill_memory(); }
void do_MonitorExit (MonitorExit* x) { kill_memory(); }
void do_MonitorEnter (MonitorEnter* x) { kill_memory(); }
void do_LoadField (LoadField* x) { if (x->is_init_point() || // getstatic is an initialization point so treat it as a wide kill x->field()->is_volatile()) { // the JMM requires this kill_memory(); } }
void do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x) { kill_memory(); }