Mercurial > hg > truffle
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 }; |