--- a/hotspot/src/share/vm/opto/parseHelper.cpp Mon Feb 01 23:18:47 2010 +0100
+++ b/hotspot/src/share/vm/opto/parseHelper.cpp Mon Feb 01 16:49:49 2010 -0800
@@ -414,8 +414,6 @@
void Parse::profile_call(Node* receiver) {
if (!method_data_update()) return;
- profile_generic_call();
-
switch (bc()) {
case Bytecodes::_invokevirtual:
case Bytecodes::_invokeinterface:
@@ -424,6 +422,7 @@
case Bytecodes::_invokestatic:
case Bytecodes::_invokedynamic:
case Bytecodes::_invokespecial:
+ profile_generic_call();
break;
default: fatal("unexpected call bytecode");
}
@@ -444,13 +443,16 @@
void Parse::profile_receiver_type(Node* receiver) {
assert(method_data_update(), "must be generating profile code");
- // Skip if we aren't tracking receivers
- if (TypeProfileWidth < 1) return;
-
ciMethodData* md = method()->method_data();
assert(md != NULL, "expected valid ciMethodData");
ciProfileData* data = md->bci_to_data(bci());
assert(data->is_ReceiverTypeData(), "need ReceiverTypeData here");
+
+ // Skip if we aren't tracking receivers
+ if (TypeProfileWidth < 1) {
+ increment_md_counter_at(md, data, CounterData::count_offset());
+ return;
+ }
ciReceiverTypeData* rdata = (ciReceiverTypeData*)data->as_ReceiverTypeData();
Node* method_data = method_data_addressing(md, rdata, in_ByteSize(0));