comparison src/share/vm/ci/bcEscapeAnalyzer.hpp @ 45:48a3fa21394b

6667615: (Escape Analysis) extend MDO to cache arguments escape state Summary: Use MDO to cache arguments escape state determined by the byte code escape analyzer. Reviewed-by: never
author kvn
date Tue, 11 Mar 2008 19:00:38 -0700
parents a61af66fc99e
children e1e86702e43e
comparison
equal deleted inserted replaced
44:52fed2ec0afb 45:48a3fa21394b
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 };