< prev index next >
src/hotspot/share/opto/parseHelper.cpp
Print this page
*** 144,154 ****
//------------------------------array_store_check------------------------------
// pull array from stack and check that the store is valid
Node* Parse::array_store_check(Node* ary, Node* idx, Node* obj) {
const Type* elemtype = _gvn.type(ary)->is_aryptr()->elem();
const TypeOopPtr* elemptr = elemtype->make_oopptr();
! bool is_value_array = elemtype->isa_valuetype() != NULL || elemtype->make_valuetypeptr() != NULL;
bool can_be_value_array = is_value_array || (elemptr != NULL && (elemptr->can_be_value_type()));
if (_gvn.type(obj) == TypePtr::NULL_PTR) {
// There's never a type check on null values.
// This cutout lets us avoid the uncommon_trap(Reason_array_check)
--- 144,154 ----
//------------------------------array_store_check------------------------------
// pull array from stack and check that the store is valid
Node* Parse::array_store_check(Node* ary, Node* idx, Node* obj) {
const Type* elemtype = _gvn.type(ary)->is_aryptr()->elem();
const TypeOopPtr* elemptr = elemtype->make_oopptr();
! bool is_value_array = elemtype->isa_valuetype() != NULL || (elemptr != NULL && elemptr->is_valuetypeptr());
bool can_be_value_array = is_value_array || (elemptr != NULL && (elemptr->can_be_value_type()));
if (_gvn.type(obj) == TypePtr::NULL_PTR) {
// There's never a type check on null values.
// This cutout lets us avoid the uncommon_trap(Reason_array_check)
*** 243,253 ****
// Handle value type arrays
if (is_value_array) {
// We statically know that this is a value type array, use precise klass ptr
ciValueKlass* vk = elemtype->isa_valuetype() ? elemtype->is_valuetype()->value_klass() :
! elemtype->make_valuetypeptr()->value_klass();
a_e_klass = makecon(TypeKlassPtr::make(vk));
} else if (can_be_value_array && !obj->is_ValueType()) {
// We cannot statically determine if the array is a value type array
// and we also don't know if 'obj' is a value type. Emit runtime checks.
gen_value_type_array_guard(ary, obj, a_e_klass);
--- 243,253 ----
// Handle value type arrays
if (is_value_array) {
// We statically know that this is a value type array, use precise klass ptr
ciValueKlass* vk = elemtype->isa_valuetype() ? elemtype->is_valuetype()->value_klass() :
! elemptr->value_klass();
a_e_klass = makecon(TypeKlassPtr::make(vk));
} else if (can_be_value_array && !obj->is_ValueType()) {
// We cannot statically determine if the array is a value type array
// and we also don't know if 'obj' is a value type. Emit runtime checks.
gen_value_type_array_guard(ary, obj, a_e_klass);
< prev index next >