< prev index next >

src/hotspot/share/opto/output.hpp

Print this page
@@ -180,17 +180,36 @@
    void       set_in_scratch_emit_size(bool x)   {        _in_scratch_emit_size = x; }
    bool           in_scratch_emit_size() const   { return _in_scratch_emit_size;     }
  
    BufferSizingData* buffer_sizing_data()        { return &_buf_sizes; }
  
+   // SCCache::write_nmethod bails when nmethod buffer is expanded.
+   // Large methods would routinely expand the buffer, making themselves
+   // ineligible for SCCache stores. In order to minimize this effect,
+   // we default to larger default sizes. We do this only when SCC dumping
+   // is active, to avoid impact on default configuration.
+   //
+   // Additionally, GC barrier stubs expand up to MAX_inst_size in mainline,
+   // which also forced resizes often. Current code replaces it with
+   // max_inst_gcstub_size, which equals to old MAX_inst_size, so GC stubs
+   // still fit nicely, and do not force the resizes too often.
+   //
+   // The old enum is renamed, so direct misuse in new code from mainline would
+   // be caught as build failure.
+   //
+   // TODO: Revert this back to mainline once SCCache is fixed.
    enum ScratchBufferBlob {
-     MAX_inst_size       = 2048,
+     mainline_MAX_inst_size = 2048,
      MAX_locs_size       = 128, // number of relocInfo elements
      MAX_const_size      = 128,
      MAX_stubs_size      = 128
    };
  
+   // Current uses of MAX_inst_size should be replaced with these getters:
+   static int max_inst_size();
+   static int max_inst_gcstub_size();
+ 
    int               frame_slots() const         { return _frame_slots; }
    int               frame_size_in_words() const; // frame_slots in units of the polymorphic 'words'
    int               frame_size_in_bytes() const { return _frame_slots << LogBytesPerInt; }
  
    int               bang_size_in_bytes() const;
< prev index next >