323 worklist.push(check); 324 uint k = 0; 325 while( k < worklist.size() ) { 326 check = worklist.at(k); 327 assert(check,"Bad base or derived pointer"); 328 // See PhaseChaitin::find_base_for_derived() for all cases. 329 int isc = check->is_Copy(); 330 if( isc ) { 331 worklist.push(check->in(isc)); 332 } else if( check->is_Phi() ) { 333 for (uint m = 1; m < check->req(); m++) 334 worklist.push(check->in(m)); 335 } else if( check->is_Con() ) { 336 if (is_derived) { 337 // Derived is NULL+offset 338 assert(!is_derived || check->bottom_type()->is_ptr()->ptr() == TypePtr::Null,"Bad derived pointer"); 339 } else { 340 assert(check->bottom_type()->is_ptr()->_offset == 0,"Bad base pointer"); 341 // Base either ConP(NULL) or loadConP 342 if (check->is_Mach()) { 343 assert(check->as_Mach()->ideal_Opcode() == Op_ConP,"Bad base pointer"); 344 } else { 345 assert(check->Opcode() == Op_ConP && 346 check->bottom_type()->is_ptr()->ptr() == TypePtr::Null,"Bad base pointer"); 347 } 348 } 349 } else if( check->bottom_type()->is_ptr()->_offset == 0 ) { 350 if(check->is_Proj() || check->is_Mach() && 351 (check->as_Mach()->ideal_Opcode() == Op_CreateEx || 352 check->as_Mach()->ideal_Opcode() == Op_ThreadLocal || 353 check->as_Mach()->ideal_Opcode() == Op_CMoveP || 354 check->as_Mach()->ideal_Opcode() == Op_CheckCastPP || 355 #ifdef _LP64 356 UseCompressedOops && check->as_Mach()->ideal_Opcode() == Op_CastPP || 357 UseCompressedOops && check->as_Mach()->ideal_Opcode() == Op_DecodeN || 358 UseCompressedClassPointers && check->as_Mach()->ideal_Opcode() == Op_DecodeNKlass || 359 #endif 360 check->as_Mach()->ideal_Opcode() == Op_LoadP || 361 check->as_Mach()->ideal_Opcode() == Op_LoadKlass)) { 362 // Valid nodes 363 } else { 364 check->dump(); 365 assert(false,"Bad base or derived pointer"); 366 } 367 } else { 368 assert(is_derived,"Bad base pointer"); 369 assert(check->is_Mach() && check->as_Mach()->ideal_Opcode() == Op_AddP,"Bad derived pointer"); 370 } 371 k++; 372 assert(k < 100000,"Derived pointer checking in infinite loop"); 373 } // End while 374 } 375 } // End of check for derived pointers 376 } // End of Kcheck for debug info 377 } // End of if found a safepoint 378 } // End of forall instructions in block 379 } // End of forall blocks 380 #endif 381 } 382 383 // Verify that graphs and base pointers are still sane. 384 void PhaseChaitin::verify( ResourceArea *a, bool verify_ifg ) const { 385 #ifdef ASSERT 386 if( VerifyOpto || VerifyRegisterAllocator ) { 387 _cfg.verify(); 388 verify_base_ptrs(a); 389 if(verify_ifg) | 323 worklist.push(check); 324 uint k = 0; 325 while( k < worklist.size() ) { 326 check = worklist.at(k); 327 assert(check,"Bad base or derived pointer"); 328 // See PhaseChaitin::find_base_for_derived() for all cases. 329 int isc = check->is_Copy(); 330 if( isc ) { 331 worklist.push(check->in(isc)); 332 } else if( check->is_Phi() ) { 333 for (uint m = 1; m < check->req(); m++) 334 worklist.push(check->in(m)); 335 } else if( check->is_Con() ) { 336 if (is_derived) { 337 // Derived is NULL+offset 338 assert(!is_derived || check->bottom_type()->is_ptr()->ptr() == TypePtr::Null,"Bad derived pointer"); 339 } else { 340 assert(check->bottom_type()->is_ptr()->_offset == 0,"Bad base pointer"); 341 // Base either ConP(NULL) or loadConP 342 if (check->is_Mach()) { 343 assert(check->as_Mach()->ideal_Opcode() == Opcodes::Op_ConP,"Bad base pointer"); 344 } else { 345 assert(check->Opcode() == Opcodes::Op_ConP && 346 check->bottom_type()->is_ptr()->ptr() == TypePtr::Null,"Bad base pointer"); 347 } 348 } 349 } else if( check->bottom_type()->is_ptr()->_offset == 0 ) { 350 if(check->is_Proj() || check->is_Mach() && 351 (check->as_Mach()->ideal_Opcode() == Opcodes::Op_CreateEx || 352 check->as_Mach()->ideal_Opcode() == Opcodes::Op_ThreadLocal || 353 check->as_Mach()->ideal_Opcode() == Opcodes::Op_CMoveP || 354 check->as_Mach()->ideal_Opcode() == Opcodes::Op_CheckCastPP || 355 #ifdef _LP64 356 UseCompressedOops && check->as_Mach()->ideal_Opcode() == Opcodes::Op_CastPP || 357 UseCompressedOops && check->as_Mach()->ideal_Opcode() == Opcodes::Op_DecodeN || 358 UseCompressedClassPointers && check->as_Mach()->ideal_Opcode() == Opcodes::Op_DecodeNKlass || 359 #endif 360 check->as_Mach()->ideal_Opcode() == Opcodes::Op_LoadP || 361 check->as_Mach()->ideal_Opcode() == Opcodes::Op_LoadKlass)) { 362 // Valid nodes 363 } else { 364 check->dump(); 365 assert(false,"Bad base or derived pointer"); 366 } 367 } else { 368 assert(is_derived,"Bad base pointer"); 369 assert(check->is_Mach() && check->as_Mach()->ideal_Opcode() == Opcodes::Op_AddP,"Bad derived pointer"); 370 } 371 k++; 372 assert(k < 100000,"Derived pointer checking in infinite loop"); 373 } // End while 374 } 375 } // End of check for derived pointers 376 } // End of Kcheck for debug info 377 } // End of if found a safepoint 378 } // End of forall instructions in block 379 } // End of forall blocks 380 #endif 381 } 382 383 // Verify that graphs and base pointers are still sane. 384 void PhaseChaitin::verify( ResourceArea *a, bool verify_ifg ) const { 385 #ifdef ASSERT 386 if( VerifyOpto || VerifyRegisterAllocator ) { 387 _cfg.verify(); 388 verify_base_ptrs(a); 389 if(verify_ifg) |