Mercurial > hg > graal-compiler
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. |