equal
deleted
inserted
replaced
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 }; |