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 };