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

Roland Westrelin roland.westrelin at oracle.com
Tue Jan 7 02:39:54 PST 2014

> 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)?

// Use pointer because we may need to retirn inline records

// Replay Inlinig

// Do not overwite file during replay

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;

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.


More information about the hotspot-compiler-dev mailing list