< prev index next > src/hotspot/share/ci/bcEscapeAnalyzer.cpp
Print this page
case Bytecodes::_aastore:
{
set_global_escape(state.apop());
state.spop();
ArgumentMap arr = state.apop();
+ // If the array is a flat array, a larger part of it is modified than
+ // the size of a reference. However, if OFFSET_ANY is given as
+ // parameter to set_modified(), size is not taken into account.
set_modified(arr, OFFSET_ANY, type2size[T_OBJECT]*HeapWordSize);
break;
}
case Bytecodes::_pop:
state.raw_pop();
state.lpush();
}
}
break;
case Bytecodes::_new:
+ case Bytecodes::_aconst_init:
state.apush(allocated_obj);
break;
+ case Bytecodes::_withfield: {
+ bool will_link;
+ ciField* field = s.get_field(will_link);
+ BasicType field_type = field->type()->basic_type();
+ if (field_type == T_OBJECT || field_type == T_ARRAY) {
+ set_global_escape(state.apop());
+ } else if (type2size[field_type] == 1) {
+ state.spop();
+ } else {
+ state.lpop();
+ }
+ set_method_escape(state.apop());
+ state.apush(allocated_obj);
+ break;
+ }
case Bytecodes::_newarray:
case Bytecodes::_anewarray:
state.spop();
state.apush(allocated_obj);
break;
< prev index next >