hotspot/src/share/vm/ci/bcEscapeAnalyzer.hpp
changeset 218 a0e996680b05
parent 1 489c9b5090e2
child 251 cb2e73f71205
equal deleted inserted replaced
217:c646ef2f5d58 218:a0e996680b05
    44 
    44 
    45   BitMap            _arg_local;
    45   BitMap            _arg_local;
    46   BitMap            _arg_stack;
    46   BitMap            _arg_stack;
    47   BitMap            _arg_returned;
    47   BitMap            _arg_returned;
    48   BitMap            _dirty;
    48   BitMap            _dirty;
       
    49   enum{ ARG_OFFSET_MAX = 31};
       
    50   uint              *_arg_modified;
    49 
    51 
    50   bool              _return_local;
    52   bool              _return_local;
    51   bool              _allocated_escapes;
    53   bool              _allocated_escapes;
       
    54   bool              _unknown_modified;
    52   bool              _return_allocated;
    55   bool              _return_allocated;
    53 
    56 
    54   ciObjectList     _dependencies;
    57   ciObjectList     _dependencies;
    55 
    58 
    56   ciMethodBlocks   *_methodBlocks;
    59   ciMethodBlocks   *_methodBlocks;
    78   bool is_arg_stack(ArgumentMap vars);
    81   bool is_arg_stack(ArgumentMap vars);
    79   void clear_bits(ArgumentMap vars, BitMap &bs);
    82   void clear_bits(ArgumentMap vars, BitMap &bs);
    80   void set_method_escape(ArgumentMap vars);
    83   void set_method_escape(ArgumentMap vars);
    81   void set_global_escape(ArgumentMap vars);
    84   void set_global_escape(ArgumentMap vars);
    82   void set_dirty(ArgumentMap vars);
    85   void set_dirty(ArgumentMap vars);
       
    86   void set_modified(ArgumentMap vars, int offs, int size);
    83 
    87 
    84   bool is_recursive_call(ciMethod* callee);
    88   bool is_recursive_call(ciMethod* callee);
    85   void add_dependence(ciKlass *klass, ciMethod *meth);
    89   void add_dependence(ciKlass *klass, ciMethod *meth);
    86   void propagate_dependencies(ciMethod *meth);
    90   void propagate_dependencies(ciMethod *meth);
    87   void invoke(StateInfo &state, Bytecodes::Code code, ciMethod* target, ciKlass* holder);
    91   void invoke(StateInfo &state, Bytecodes::Code code, ciMethod* target, ciKlass* holder);
   138   // True iff only newly allocated unescaped objects are returned.
   142   // True iff only newly allocated unescaped objects are returned.
   139   bool is_return_allocated() const {
   143   bool is_return_allocated() const {
   140     return !_conservative && _return_allocated && !_allocated_escapes;
   144     return !_conservative && _return_allocated && !_allocated_escapes;
   141   }
   145   }
   142 
   146 
       
   147   // Tracking of argument modification
       
   148 
       
   149   enum {OFFSET_ANY = -1};
       
   150   bool is_arg_modified(int arg, int offset, int size_in_bytes);
       
   151   void set_arg_modified(int arg, int offset, int size_in_bytes);
       
   152   bool has_non_arg_side_affects()    { return _unknown_modified; }
       
   153 
   143   // Copy dependencies from this analysis into "deps"
   154   // Copy dependencies from this analysis into "deps"
   144   void copy_dependencies(Dependencies *deps);
   155   void copy_dependencies(Dependencies *deps);
   145 };
   156 };