< prev index next > src/hotspot/share/opto/doCall.cpp
Print this page
ex_node = use_exception_state(ex_map);
// Get the exception oop klass from its header
Node* ex_klass_node = nullptr;
if (has_exception_handler() && !ex_type->klass_is_exact()) {
! Node* p = basic_plus_adr( ex_node, ex_node, oopDesc::klass_offset_in_bytes());
ex_klass_node = _gvn.transform(LoadKlassNode::make(_gvn, nullptr, immutable_memory(), p, TypeInstPtr::KLASS, TypeInstKlassPtr::OBJECT));
// Compute the exception klass a little more cleverly.
// Obvious solution is to simple do a LoadKlass from the 'ex_node'.
// However, if the ex_node is a PhiNode, I'm going to do a LoadKlass for
ex_node = use_exception_state(ex_map);
// Get the exception oop klass from its header
Node* ex_klass_node = nullptr;
if (has_exception_handler() && !ex_type->klass_is_exact()) {
! Node* p = basic_plus_adr( ex_node, ex_node, Type::klass_offset());
ex_klass_node = _gvn.transform(LoadKlassNode::make(_gvn, nullptr, immutable_memory(), p, TypeInstPtr::KLASS, TypeInstKlassPtr::OBJECT));
// Compute the exception klass a little more cleverly.
// Obvious solution is to simple do a LoadKlass from the 'ex_node'.
// However, if the ex_node is a PhiNode, I'm going to do a LoadKlass for
if (ex_in == top() || ex_in == nullptr) {
// This path was not taken.
ex_klass_node->init_req(i, top());
continue;
}
! Node* p = basic_plus_adr(ex_in, ex_in, oopDesc::klass_offset_in_bytes());
Node* k = _gvn.transform( LoadKlassNode::make(_gvn, nullptr, immutable_memory(), p, TypeInstPtr::KLASS, TypeInstKlassPtr::OBJECT));
ex_klass_node->init_req( i, k );
}
ex_klass_node = _gvn.transform(ex_klass_node);
}
if (ex_in == top() || ex_in == nullptr) {
// This path was not taken.
ex_klass_node->init_req(i, top());
continue;
}
! Node* p = basic_plus_adr(ex_in, ex_in, Type::klass_offset());
Node* k = _gvn.transform( LoadKlassNode::make(_gvn, nullptr, immutable_memory(), p, TypeInstPtr::KLASS, TypeInstKlassPtr::OBJECT));
ex_klass_node->init_req( i, k );
}
ex_klass_node = _gvn.transform(ex_klass_node);
}
< prev index next >