RFR(L): 8028468: Add inlining information into ciReplay
Roland Westrelin
roland.westrelin at oracle.com
Tue Jan 7 04:49:00 PST 2014
One more question:
When can the code below cause an early return from process_compile()? Can that really happen?
493 if (entry_bci != _entry_bci || comp_level != _comp_level) {
494 return;
495 }
496 const char* iklass_name = _imethod->method_holder()->name()->as_utf8();
497 const char* imethod_name = _imethod->name()->as_utf8();
498 const char* isignature = _imethod->signature()->as_utf8();
499 const char* klass_name = method->method_holder()->name()->as_utf8();
500 const char* method_name = method->name()->as_utf8();
501 const char* signature = method->signature()->as_utf8();
502 if (strcmp(iklass_name, klass_name) != 0 ||
503 strcmp(imethod_name, method_name) != 0 ||
504 strcmp(isignature, signature) != 0) {
505 return;
506 }
507 }
Roland.
On Jan 7, 2014, at 11:39 AM, Roland Westrelin <roland.westrelin at oracle.com> wrote:
>> http://cr.openjdk.java.net/~kvn/8028468/webrev/
>
> Should the agent/doc/cireplay.html be updated? Is there another doc on how to use the replay support somewhere (wiki)?
>
> ciReplay.cpp
> typos:
> // Use pointer because we may need to retirn inline records
>
> // Replay Inlinig
>
> vmError.cpp
> typo:
> // Do not overwite file during replay
>
> compile.hpp
> Shouldn’t _replay_inline_data be private with an accessor?
>
> 1183 // Dump inlining replay data to the stream.
> 1184 void dump_inline_data(outputStream* out);
> 1185 void* _replay_inline_data;
>
> ciReplay.cpp
> Why was this changed? Why was it there in the first place?
> 1052 // Make sure we don't run with background compilation
> 1053 // BackgroundCompilation = false;
>
> Existing fields in class CompileReplay that don’t start with _ make the code confusing:
>
> char* bufptr;
> char* buffer;
> int buffer_length;
> int buffer_end;
> int line_no;
>
> etc. Maybe it would be worthwhile to fix that as part of this change?
>
> Can buffer be a growableArray? If not factor this code and other similar code in a method?
> 437 if (pos + 1 >= buffer_length) {
> 438 int newl = buffer_length * 2;
> 439 char* newb = NEW_RESOURCE_ARRAY(char, newl);
> 440 memcpy(newb, buffer, pos);
> 441 buffer = newb;
> 442 buffer_length = newl;
> 443 }
>
> Same for:
> 445 // null terminate it, reset the pointer and process the line
> 446 buffer[pos] = '\0';
> 447 buffer_end = pos++;
> 448 bufptr = buffer;
>
> Shouldn’t the fields below be private?
> 422 ciKlass* _iklass;
> 423 Method* _imethod;
> 424 int _entry_bci;
> 425 int _comp_level;
>
> I think
> ciInlineRecord* find_ciInlineRecord(Method* method, int bci, int inline_depth)
> should be implemented by calling:
> static ciInlineRecord* find_ciInlineRecord(GrowableArray<ciInlineRecord*>* records, Method* method, int bci, int inline_depth)
> to avoid duplication of code.
>
> Roland.
More information about the serviceability-dev
mailing list