< prev index next >
src/hotspot/share/opto/library_call.cpp
Print this page
*** 2455,2465 ****
}
base = vt->get_oop();
} else {
if (offset->is_Con()) {
long off = find_long_con(offset, 0);
! ciValueKlass* vk = _gvn.type(vt)->is_valuetype()->value_klass();
if ((long)(int)off != off || !vk->contains_field_offset(off)) {
return false;
}
ciField* f = vk->get_non_flattened_field_by_offset((int)off);
--- 2455,2465 ----
}
base = vt->get_oop();
} else {
if (offset->is_Con()) {
long off = find_long_con(offset, 0);
! ciValueKlass* vk = vt->type()->value_klass();
if ((long)(int)off != off || !vk->contains_field_offset(off)) {
return false;
}
ciField* f = vk->get_non_flattened_field_by_offset((int)off);
*** 2565,2582 ****
}
} else if (adr_type->isa_aryptr()) {
const Type* elem = adr_type->is_aryptr()->elem();
if (!elem->isa_valuetype()) {
mismatched = true;
! } else if (elem->is_valuetype()->value_klass() != value_klass) {
mismatched = true;
}
}
if (is_store) {
const Type* val_t = _gvn.type(val);
! if (!val_t->isa_valuetype() ||
! val_t->is_valuetype()->value_klass() != value_klass) {
return false;
}
}
}
--- 2565,2581 ----
}
} else if (adr_type->isa_aryptr()) {
const Type* elem = adr_type->is_aryptr()->elem();
if (!elem->isa_valuetype()) {
mismatched = true;
! } else if (elem->value_klass() != value_klass) {
mismatched = true;
}
}
if (is_store) {
const Type* val_t = _gvn.type(val);
! if (!val_t->isa_valuetype() || val_t->value_klass() != value_klass) {
return false;
}
}
}
*** 3529,3540 ****
return false; // dead path
}
ciKlass* obj_klass = NULL;
if (obj->is_ValueType()) {
! const TypeValueType* tvt = _gvn.type(obj)->is_valuetype();
! obj_klass = tvt->value_klass();
} else {
const TypeOopPtr* tp = _gvn.type(obj)->isa_oopptr();
if (tp != NULL) {
obj_klass = tp->klass();
}
--- 3528,3538 ----
return false; // dead path
}
ciKlass* obj_klass = NULL;
if (obj->is_ValueType()) {
! obj_klass = _gvn.type(obj)->value_klass();
} else {
const TypeOopPtr* tp = _gvn.type(obj)->isa_oopptr();
if (tp != NULL) {
obj_klass = tp->klass();
}
*** 3596,3606 ****
// TODO move this into do_checkcast?
if (EnableValhalla && !obj->is_ValueType() && !is_val_type) {
// Check if (mirror == value_mirror && obj == null)
RegionNode* r = new RegionNode(3);
Node* p = basic_plus_adr(mirror, java_lang_Class::value_mirror_offset_in_bytes());
! Node* value_mirror = access_load_at(mirror, p, _gvn.type(p)->is_ptr(), TypeInstPtr::MIRROR, T_OBJECT, IN_HEAP);
Node* cmp = _gvn.transform(new CmpPNode(mirror, value_mirror));
Node* bol = _gvn.transform(new BoolNode(cmp, BoolTest::ne));
Node* if_ne = generate_fair_guard(bol, NULL);
r->init_req(1, if_ne);
--- 3594,3604 ----
// TODO move this into do_checkcast?
if (EnableValhalla && !obj->is_ValueType() && !is_val_type) {
// Check if (mirror == value_mirror && obj == null)
RegionNode* r = new RegionNode(3);
Node* p = basic_plus_adr(mirror, java_lang_Class::value_mirror_offset_in_bytes());
! Node* value_mirror = access_load_at(mirror, p, _gvn.type(p)->is_ptr(), TypeInstPtr::MIRROR->cast_to_ptr_type(TypePtr::BotPTR), T_OBJECT, IN_HEAP);
Node* cmp = _gvn.transform(new CmpPNode(mirror, value_mirror));
Node* bol = _gvn.transform(new BoolNode(cmp, BoolTest::ne));
Node* if_ne = generate_fair_guard(bol, NULL);
r->init_req(1, if_ne);
*** 4324,4334 ****
//
// Build special case code for calls to getClass on an object.
bool LibraryCallKit::inline_native_getClass() {
Node* obj = argument(0);
if (obj->is_ValueType()) {
! ciKlass* vk = _gvn.type(obj)->is_valuetype()->value_klass();
set_result(makecon(TypeInstPtr::make(vk->java_mirror())));
return true;
}
obj = null_check_receiver();
if (stopped()) return true;
--- 4322,4332 ----
//
// Build special case code for calls to getClass on an object.
bool LibraryCallKit::inline_native_getClass() {
Node* obj = argument(0);
if (obj->is_ValueType()) {
! ciKlass* vk = _gvn.type(obj)->value_klass();
set_result(makecon(TypeInstPtr::make(vk->java_mirror())));
return true;
}
obj = null_check_receiver();
if (stopped()) return true;
*** 5205,5221 ****
top_src = src_type->isa_aryptr();
if (top_dest != NULL &&
top_dest->elem()->make_oopptr() != NULL &&
top_dest->elem()->make_oopptr()->can_be_value_type()) {
! generate_valueArray_guard(load_object_klass(dest), slow_region);
}
if (top_src != NULL &&
top_src->elem()->make_oopptr() != NULL &&
top_src->elem()->make_oopptr()->can_be_value_type()) {
! generate_valueArray_guard(load_object_klass(src), slow_region);
}
{
PreserveJVMState pjvms(this);
set_control(_gvn.transform(slow_region));
--- 5203,5219 ----
top_src = src_type->isa_aryptr();
if (top_dest != NULL &&
top_dest->elem()->make_oopptr() != NULL &&
top_dest->elem()->make_oopptr()->can_be_value_type()) {
! generate_valueArray_guard(dest_klass, slow_region);
}
if (top_src != NULL &&
top_src->elem()->make_oopptr() != NULL &&
top_src->elem()->make_oopptr()->can_be_value_type()) {
! generate_valueArray_guard(src_klass, slow_region);
}
{
PreserveJVMState pjvms(this);
set_control(_gvn.transform(slow_region));
< prev index next >