84 void clear_bits(ArgumentMap vars, VectorSet &bs); 85 void set_method_escape(ArgumentMap vars); 86 void set_global_escape(ArgumentMap vars, bool merge = false); 87 void set_dirty(ArgumentMap vars); 88 void set_modified(ArgumentMap vars, int offs, int size); 89 90 bool is_recursive_call(ciMethod* callee); 91 void add_dependence(ciKlass *klass, ciMethod *meth); 92 void propagate_dependencies(ciMethod *meth); 93 void invoke(StateInfo &state, Bytecodes::Code code, ciMethod* target, ciKlass* holder); 94 95 void iterate_one_block(ciBlock *blk, StateInfo &state, GrowableArray<ciBlock *> &successors); 96 void iterate_blocks(Arena *); 97 void merge_block_states(StateInfo *blockstates, ciBlock *dest, StateInfo *s_state); 98 99 // analysis 100 void initialize(); 101 void clear_escape_info(); 102 void compute_escape_info(); 103 vmIntrinsics::ID known_intrinsic(); 104 bool compute_escape_for_intrinsic(vmIntrinsics::ID iid); 105 bool do_analysis(); 106 107 void read_escape_info(); 108 109 bool contains(uint arg_set1, uint arg_set2); 110 111 public: 112 BCEscapeAnalyzer(ciMethod* method, BCEscapeAnalyzer* parent = NULL); 113 114 // accessors 115 ciMethod* method() const { return _method; } 116 ciMethodData* methodData() const { return _methodData; } 117 BCEscapeAnalyzer* parent() const { return _parent; } 118 int level() const { return _level; } 119 GrowableArray<ciMetadata *>* dependencies() { return &_dependencies; } 120 bool has_dependencies() const { return !_dependencies.is_empty(); } 121 122 // retrieval of interprocedural escape information 123 124 // The given argument does not escape the callee. 125 bool is_arg_local(int i) const { | 84 void clear_bits(ArgumentMap vars, VectorSet &bs); 85 void set_method_escape(ArgumentMap vars); 86 void set_global_escape(ArgumentMap vars, bool merge = false); 87 void set_dirty(ArgumentMap vars); 88 void set_modified(ArgumentMap vars, int offs, int size); 89 90 bool is_recursive_call(ciMethod* callee); 91 void add_dependence(ciKlass *klass, ciMethod *meth); 92 void propagate_dependencies(ciMethod *meth); 93 void invoke(StateInfo &state, Bytecodes::Code code, ciMethod* target, ciKlass* holder); 94 95 void iterate_one_block(ciBlock *blk, StateInfo &state, GrowableArray<ciBlock *> &successors); 96 void iterate_blocks(Arena *); 97 void merge_block_states(StateInfo *blockstates, ciBlock *dest, StateInfo *s_state); 98 99 // analysis 100 void initialize(); 101 void clear_escape_info(); 102 void compute_escape_info(); 103 vmIntrinsics::ID known_intrinsic(); 104 void compute_escape_for_intrinsic(vmIntrinsics::ID iid); 105 void do_analysis(); 106 107 void read_escape_info(); 108 109 bool contains(uint arg_set1, uint arg_set2); 110 111 public: 112 BCEscapeAnalyzer(ciMethod* method, BCEscapeAnalyzer* parent = NULL); 113 114 // accessors 115 ciMethod* method() const { return _method; } 116 ciMethodData* methodData() const { return _methodData; } 117 BCEscapeAnalyzer* parent() const { return _parent; } 118 int level() const { return _level; } 119 GrowableArray<ciMetadata *>* dependencies() { return &_dependencies; } 120 bool has_dependencies() const { return !_dependencies.is_empty(); } 121 122 // retrieval of interprocedural escape information 123 124 // The given argument does not escape the callee. 125 bool is_arg_local(int i) const { |