< prev index next >

src/hotspot/share/opto/compile.hpp

Print this page
*** 257,11 ***
  
    // Control of this compilation.
    int                   _max_inline_size;       // Max inline size for this compilation
    int                   _freq_inline_size;      // Max hot method inline size for this compilation
    int                   _fixed_slots;           // count of frame slots not allocated by the register
!                                                 // allocator i.e. locks, original deopt pc, etc.
    uintx                 _max_node_limit;        // Max unique node count during a single compilation.
  
    int                   _major_progress;        // Count of something big happening
    bool                  _inlining_progress;     // progress doing incremental inlining?
    bool                  _inlining_incrementally;// Are we doing incremental inlining (post parse)
--- 257,11 ---
  
    // Control of this compilation.
    int                   _max_inline_size;       // Max inline size for this compilation
    int                   _freq_inline_size;      // Max hot method inline size for this compilation
    int                   _fixed_slots;           // count of frame slots not allocated by the register
!                                                 // allocator i.e. locks, original deopt pc, stack allocated objects, etc.
    uintx                 _max_node_limit;        // Max unique node count during a single compilation.
  
    int                   _major_progress;        // Count of something big happening
    bool                  _inlining_progress;     // progress doing incremental inlining?
    bool                  _inlining_incrementally;// Are we doing incremental inlining (post parse)

*** 298,10 ***
--- 298,14 ---
    // JSR 292
    bool                  _has_method_handle_invokes; // True if this method has MethodHandle invokes.
    RTMState              _rtm_state;             // State of Restricted Transactional Memory usage
    int                   _loop_opts_cnt;         // loop opts round
    bool                  _clinit_barrier_on_entry; // True if clinit barrier is needed on nmethod entry
+   int                   _stack_allocated_slots; // count of frame slots potentially taken by stack allocated objects.
+                                                 // Going over the limit disables stack allocation of objects pointing
+                                                 // to other stack allocated objects.
+   bool                  _fail_stack_allocation_with_references;
  
    // Compilation environment.
    Arena                 _comp_arena;            // Arena with lifetime equivalent to Compile
    void*                 _barrier_set_state;     // Potential GC barrier state for Compile
    ciEnv*                _env;                   // CI interface

*** 504,11 ***
    /** Do boxing elimination. */
    bool              eliminate_boxing() const    { return _eliminate_boxing; }
    /** Do aggressive boxing elimination. */
    bool              aggressive_unboxing() const { return _eliminate_boxing && AggressiveUnboxing; }
    bool              save_argument_registers() const { return _save_argument_registers; }
! 
  
    // Other fixed compilation parameters.
    ciMethod*         method() const              { return _method; }
    int               entry_bci() const           { return _entry_bci; }
    bool              is_osr_compilation() const  { return _entry_bci != InvocationEntryBci; }
--- 508,12 ---
    /** Do boxing elimination. */
    bool              eliminate_boxing() const    { return _eliminate_boxing; }
    /** Do aggressive boxing elimination. */
    bool              aggressive_unboxing() const { return _eliminate_boxing && AggressiveUnboxing; }
    bool              save_argument_registers() const { return _save_argument_registers; }
!   /** Do stack allocation */
+   bool              do_stack_allocation() const { return UseStackAllocation || _directive->UseStackAllocationOption; }
  
    // Other fixed compilation parameters.
    ciMethod*         method() const              { return _method; }
    int               entry_bci() const           { return _entry_bci; }
    bool              is_osr_compilation() const  { return _entry_bci != InvocationEntryBci; }

*** 590,10 ***
--- 595,14 ---
    bool          profile_rtm() const              { return _rtm_state == ProfileRTM; }
    uint              max_node_limit() const       { return (uint)_max_node_limit; }
    void          set_max_node_limit(uint n)       { _max_node_limit = n; }
    bool              clinit_barrier_on_entry()       { return _clinit_barrier_on_entry; }
    void          set_clinit_barrier_on_entry(bool z) { _clinit_barrier_on_entry = z; }
+   int               stack_allocated_slots() const { assert(_stack_allocated_slots >= 0, ""); return _stack_allocated_slots; }
+   void          set_stack_allocated_slots(int n)  { _stack_allocated_slots = n; }
+   bool               fail_stack_allocation_with_references() const { return _fail_stack_allocation_with_references; }
+   void          set_fail_stack_allocation_with_references(bool b)  { _fail_stack_allocation_with_references = b; }
  
    // check the CompilerOracle for special behaviours for this compile
    bool          method_has_option(const char * option) {
      return method() != NULL && method()->has_option(option);
    }
< prev index next >