src/share/vm/opto/doCall.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/opto/doCall.cpp Thu Oct 2 10:57:23 2014
--- new/src/share/vm/opto/doCall.cpp Thu Oct 2 10:57:23 2014
*** 800,813 ****
--- 800,819 ----
// 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
// each arm of the Phi. If I know something clever about the exceptions
// I'm loading the class from, I can replace the LoadKlass with the
// klass constant for the exception oop.
! if( ex_node->is_Phi() ) {
! ex_klass_node = new PhiNode( ex_node->in(0), TypeKlassPtr::OBJECT );
! for( uint i = 1; i < ex_node->req(); i++ ) {
! Node* p = basic_plus_adr( ex_node->in(i), ex_node->in(i), oopDesc::klass_offset_in_bytes() );
! if (ex_node->is_Phi()) {
! ex_klass_node = new PhiNode(ex_node->in(0), TypeKlassPtr::OBJECT);
! for (uint i = 1; i < ex_node->req(); i++) {
! Node* ex_in = ex_node->in(i);
+ if (ex_in == top() || ex_in == NULL) {
+ // 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, immutable_memory(), p, TypeInstPtr::KLASS, TypeKlassPtr::OBJECT) );
ex_klass_node->init_req( i, k );
}
_gvn.set_type(ex_klass_node, TypeKlassPtr::OBJECT);
src/share/vm/opto/doCall.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File