src/share/vm/opto/live.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6782232 Cdiff src/share/vm/opto/live.cpp

src/share/vm/opto/live.cpp

Print this page

        

*** 269,281 **** tty->print("\n"); } //------------------------------verify_base_ptrs------------------------------- // Verify that base pointers and derived pointers are still sane. - // Basically, if a derived pointer is live at a safepoint, then its - // base pointer must be live also. void PhaseChaitin::verify_base_ptrs( ResourceArea *a ) const { for( uint i = 0; i < _cfg._num_blocks; i++ ) { Block *b = _cfg._blocks[i]; for( uint j = b->end_idx() + 1; j > 1; j-- ) { Node *n = b->_nodes[j-1]; if( n->is_Phi() ) break; --- 269,280 ---- tty->print("\n"); } //------------------------------verify_base_ptrs------------------------------- // Verify that base pointers and derived pointers are still sane. void PhaseChaitin::verify_base_ptrs( ResourceArea *a ) const { + Unique_Node_List worklist(a); for( uint i = 0; i < _cfg._num_blocks; i++ ) { Block *b = _cfg._blocks[i]; for( uint j = b->end_idx() + 1; j > 1; j-- ) { Node *n = b->_nodes[j-1]; if( n->is_Phi() ) break;
*** 285,311 **** JVMState* jvms = sfpt->jvms(); if (jvms != NULL) { // Now scan for a live derived pointer if (jvms->oopoff() < sfpt->req()) { // Check each derived/base pair ! for (uint idx = jvms->oopoff(); idx < sfpt->req(); idx += 2) { Node *check = sfpt->in(idx); ! uint j = 0; // search upwards through spills and spill phis for AddP ! while(true) { ! if( !check ) break; ! int idx = check->is_Copy(); ! if( idx ) { ! check = check->in(idx); ! } else if( check->is_Phi() && check->_idx >= _oldphi ) { ! check = check->in(1); ! } else ! break; ! j++; ! assert(j < 100000,"Derived pointer checking in infinite loop"); } // End while - assert(check->is_Mach() && check->as_Mach()->ideal_Opcode() == Op_AddP,"Bad derived pointer") } } // End of check for derived pointers } // End of Kcheck for debug info } // End of if found a safepoint } // End of forall instructions in block --- 284,343 ---- JVMState* jvms = sfpt->jvms(); if (jvms != NULL) { // Now scan for a live derived pointer if (jvms->oopoff() < sfpt->req()) { // Check each derived/base pair ! for (uint idx = jvms->oopoff(); idx < sfpt->req(); idx++) { Node *check = sfpt->in(idx); ! bool is_derived = ((idx - jvms->oopoff()) & 1) == 0; // search upwards through spills and spill phis for AddP ! worklist.clear(); ! worklist.push(check); ! uint k = 0; ! while( k < worklist.size() ) { ! check = worklist.at(k); ! assert(check,"Bad base or derived pointer"); ! // See PhaseChaitin::find_base_for_derived() for all cases. ! int isc = check->is_Copy(); ! if( isc ) { ! worklist.push(check->in(isc)); ! } else if( check->is_Phi() ) { ! for (uint m = 1; m < check->req(); m++) ! worklist.push(check->in(m)); ! } else if( check->is_Con() ) { ! if (is_derived) { ! // Derived is NULL+offset ! assert(!is_derived || check->bottom_type()->is_ptr()->ptr() == TypePtr::Null,"Bad derived pointer"); ! } else { ! assert(check->bottom_type()->is_ptr()->_offset == 0,"Bad base pointer"); ! // Base either ConP(NULL) or loadConP ! if (check->is_Mach()) { ! assert(check->as_Mach()->ideal_Opcode() == Op_ConP,"Bad base pointer"); ! } else { ! assert(check->Opcode() == Op_ConP && ! check->bottom_type()->is_ptr()->ptr() == TypePtr::Null,"Bad base pointer"); ! } ! } ! } else if( check->bottom_type()->is_ptr()->_offset == 0 ) { ! assert(check->is_Proj() || check->is_Mach() && ! (check->as_Mach()->ideal_Opcode() == Op_CreateEx || ! check->as_Mach()->ideal_Opcode() == Op_ThreadLocal || ! check->as_Mach()->ideal_Opcode() == Op_CMoveP || ! check->as_Mach()->ideal_Opcode() == Op_CheckCastPP || ! #ifdef _LP64 ! UseCompressedOops && check->as_Mach()->ideal_Opcode() == Op_CastPP || ! UseCompressedOops && check->as_Mach()->ideal_Opcode() == Op_DecodeN || ! #endif ! check->as_Mach()->ideal_Opcode() == Op_LoadP || ! check->as_Mach()->ideal_Opcode() == Op_LoadKlass),"Bad base or derived pointer"); ! } else { ! assert(is_derived,"Bad base pointer"); ! assert(check->is_Mach() && check->as_Mach()->ideal_Opcode() == Op_AddP,"Bad derived pointer"); ! } ! k++; ! assert(k < 100000,"Derived pointer checking in infinite loop"); } // End while } } // End of check for derived pointers } // End of Kcheck for debug info } // End of if found a safepoint } // End of forall instructions in block
src/share/vm/opto/live.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File