comparison src/share/vm/opto/parseHelper.cpp @ 1206:87684f1a88b5

6614597: Performance variability in jvm2008 xml.validation Summary: Fix incorrect marking of methods as not compilable. Reviewed-by: never
author kvn
date Mon, 01 Feb 2010 16:49:49 -0800
parents 7c57aead6d3e
children c18cbe5936b8
comparison
equal deleted inserted replaced
1205:5fcfaa1ad96f 1206:87684f1a88b5
412 412
413 //---------------------------------profile_call-------------------------------- 413 //---------------------------------profile_call--------------------------------
414 void Parse::profile_call(Node* receiver) { 414 void Parse::profile_call(Node* receiver) {
415 if (!method_data_update()) return; 415 if (!method_data_update()) return;
416 416
417 profile_generic_call();
418
419 switch (bc()) { 417 switch (bc()) {
420 case Bytecodes::_invokevirtual: 418 case Bytecodes::_invokevirtual:
421 case Bytecodes::_invokeinterface: 419 case Bytecodes::_invokeinterface:
422 profile_receiver_type(receiver); 420 profile_receiver_type(receiver);
423 break; 421 break;
424 case Bytecodes::_invokestatic: 422 case Bytecodes::_invokestatic:
425 case Bytecodes::_invokedynamic: 423 case Bytecodes::_invokedynamic:
426 case Bytecodes::_invokespecial: 424 case Bytecodes::_invokespecial:
425 profile_generic_call();
427 break; 426 break;
428 default: fatal("unexpected call bytecode"); 427 default: fatal("unexpected call bytecode");
429 } 428 }
430 } 429 }
431 430
442 441
443 //-----------------------------profile_receiver_type--------------------------- 442 //-----------------------------profile_receiver_type---------------------------
444 void Parse::profile_receiver_type(Node* receiver) { 443 void Parse::profile_receiver_type(Node* receiver) {
445 assert(method_data_update(), "must be generating profile code"); 444 assert(method_data_update(), "must be generating profile code");
446 445
447 // Skip if we aren't tracking receivers
448 if (TypeProfileWidth < 1) return;
449
450 ciMethodData* md = method()->method_data(); 446 ciMethodData* md = method()->method_data();
451 assert(md != NULL, "expected valid ciMethodData"); 447 assert(md != NULL, "expected valid ciMethodData");
452 ciProfileData* data = md->bci_to_data(bci()); 448 ciProfileData* data = md->bci_to_data(bci());
453 assert(data->is_ReceiverTypeData(), "need ReceiverTypeData here"); 449 assert(data->is_ReceiverTypeData(), "need ReceiverTypeData here");
450
451 // Skip if we aren't tracking receivers
452 if (TypeProfileWidth < 1) {
453 increment_md_counter_at(md, data, CounterData::count_offset());
454 return;
455 }
454 ciReceiverTypeData* rdata = (ciReceiverTypeData*)data->as_ReceiverTypeData(); 456 ciReceiverTypeData* rdata = (ciReceiverTypeData*)data->as_ReceiverTypeData();
455 457
456 Node* method_data = method_data_addressing(md, rdata, in_ByteSize(0)); 458 Node* method_data = method_data_addressing(md, rdata, in_ByteSize(0));
457 459
458 // Using an adr_type of TypePtr::BOTTOM to work around anti-dep problems. 460 // Using an adr_type of TypePtr::BOTTOM to work around anti-dep problems.