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 {
|