RFR(L): 8028468: Add inlining information into ciReplay (original) (raw)

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 replayinlinedata be private with an accessor? 1183 // Dump inlining replay data to the stream. 1184 void dumpinlinedata(outputStream* out); 1185 void* replayinlinedata; 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 bufferlength; int bufferend; int lineno; 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 >= bufferlength) { 438 int newl = bufferlength * 2; 439 char* newb = NEWRESOURCEARRAY(char, newl); 440 memcpy(newb, buffer, pos); 441 buffer = newb; 442 bufferlength = newl; 443 } Same for: 445 // null terminate it, reset the pointer and process the line 446 buffer[pos] = '\0'; 447 bufferend = pos++; 448 bufptr = buffer; Shouldn’t the fields below be private? 422 ciKlass* iklass; 423 Method* imethod; 424 int entrybci; 425 int complevel; I think ciInlineRecord* findciInlineRecord(Method* method, int bci, int inlinedepth) should be implemented by calling: static ciInlineRecord* findciInlineRecord(GrowableArray<ciInlineRecord*>* records, Method* method, int bci, int inlinedepth) to avoid duplication of code. Roland.



More information about the hotspot-compiler-dev mailing list