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