src/share/vm/ci/bcEscapeAnalyzer.hpp

changeset 480
48a3fa21394b
parent 435
a61af66fc99e
child 513
e1e86702e43e
     1.1 --- a/src/share/vm/ci/bcEscapeAnalyzer.hpp	Tue Mar 11 11:25:13 2008 -0700
     1.2 +++ b/src/share/vm/ci/bcEscapeAnalyzer.hpp	Tue Mar 11 19:00:38 2008 -0700
     1.3 @@ -46,9 +46,12 @@
     1.4    BitMap            _arg_stack;
     1.5    BitMap            _arg_returned;
     1.6    BitMap            _dirty;
     1.7 +  enum{ ARG_OFFSET_MAX = 31};
     1.8 +  uint              *_arg_modified;
     1.9  
    1.10    bool              _return_local;
    1.11    bool              _allocated_escapes;
    1.12 +  bool              _unknown_modified;
    1.13    bool              _return_allocated;
    1.14  
    1.15    ciObjectList     _dependencies;
    1.16 @@ -80,6 +83,7 @@
    1.17    void set_method_escape(ArgumentMap vars);
    1.18    void set_global_escape(ArgumentMap vars);
    1.19    void set_dirty(ArgumentMap vars);
    1.20 +  void set_modified(ArgumentMap vars, int offs, int size);
    1.21  
    1.22    bool is_recursive_call(ciMethod* callee);
    1.23    void add_dependence(ciKlass *klass, ciMethod *meth);
    1.24 @@ -140,6 +144,13 @@
    1.25      return !_conservative && _return_allocated && !_allocated_escapes;
    1.26    }
    1.27  
    1.28 +  // Tracking of argument modification
    1.29 +
    1.30 +  enum {OFFSET_ANY = -1};
    1.31 +  bool is_arg_modified(int arg, int offset, int size_in_bytes);
    1.32 +  void set_arg_modified(int arg, int offset, int size_in_bytes);
    1.33 +  bool has_non_arg_side_affects()    { return _unknown_modified; }
    1.34 +
    1.35    // Copy dependencies from this analysis into "deps"
    1.36    void copy_dependencies(Dependencies *deps);
    1.37  };

mercurial