hotspot/src/share/vm/ci/bcEscapeAnalyzer.hpp
changeset 218 a0e996680b05
parent 1 489c9b5090e2
child 251 cb2e73f71205
--- a/hotspot/src/share/vm/ci/bcEscapeAnalyzer.hpp	Tue Mar 11 11:25:13 2008 -0700
+++ b/hotspot/src/share/vm/ci/bcEscapeAnalyzer.hpp	Tue Mar 11 19:00:38 2008 -0700
@@ -46,9 +46,12 @@
   BitMap            _arg_stack;
   BitMap            _arg_returned;
   BitMap            _dirty;
+  enum{ ARG_OFFSET_MAX = 31};
+  uint              *_arg_modified;
 
   bool              _return_local;
   bool              _allocated_escapes;
+  bool              _unknown_modified;
   bool              _return_allocated;
 
   ciObjectList     _dependencies;
@@ -80,6 +83,7 @@
   void set_method_escape(ArgumentMap vars);
   void set_global_escape(ArgumentMap vars);
   void set_dirty(ArgumentMap vars);
+  void set_modified(ArgumentMap vars, int offs, int size);
 
   bool is_recursive_call(ciMethod* callee);
   void add_dependence(ciKlass *klass, ciMethod *meth);
@@ -140,6 +144,13 @@
     return !_conservative && _return_allocated && !_allocated_escapes;
   }
 
+  // Tracking of argument modification
+
+  enum {OFFSET_ANY = -1};
+  bool is_arg_modified(int arg, int offset, int size_in_bytes);
+  void set_arg_modified(int arg, int offset, int size_in_bytes);
+  bool has_non_arg_side_affects()    { return _unknown_modified; }
+
   // Copy dependencies from this analysis into "deps"
   void copy_dependencies(Dependencies *deps);
 };