comparison src/share/vm/opto/callnode.hpp @ 903:15bbd3f505c0

Merge
author kvn
date Thu, 06 Aug 2009 09:37:26 -0700
parents bd02caa94611 9987d9d5eb0e
children 7c57aead6d3e
comparison
equal deleted inserted replaced
891:703065c670fa 903:15bbd3f505c0
176 // plus GC roots, for all active calls at some call site in this compilation 176 // plus GC roots, for all active calls at some call site in this compilation
177 // unit. (If there is no inlining, then the list has exactly one link.) 177 // unit. (If there is no inlining, then the list has exactly one link.)
178 // This provides a way to map the optimized program back into the interpreter, 178 // This provides a way to map the optimized program back into the interpreter,
179 // or to let the GC mark the stack. 179 // or to let the GC mark the stack.
180 class JVMState : public ResourceObj { 180 class JVMState : public ResourceObj {
181 public:
182 typedef enum {
183 Reexecute_Undefined = -1, // not defined -- will be translated into false later
184 Reexecute_False = 0, // false -- do not reexecute
185 Reexecute_True = 1 // true -- reexecute the bytecode
186 } ReexecuteState; //Reexecute State
187
181 private: 188 private:
182 JVMState* _caller; // List pointer for forming scope chains 189 JVMState* _caller; // List pointer for forming scope chains
183 uint _depth; // One mroe than caller depth, or one. 190 uint _depth; // One mroe than caller depth, or one.
184 uint _locoff; // Offset to locals in input edge mapping 191 uint _locoff; // Offset to locals in input edge mapping
185 uint _stkoff; // Offset to stack in input edge mapping 192 uint _stkoff; // Offset to stack in input edge mapping
186 uint _monoff; // Offset to monitors in input edge mapping 193 uint _monoff; // Offset to monitors in input edge mapping
187 uint _scloff; // Offset to fields of scalar objs in input edge mapping 194 uint _scloff; // Offset to fields of scalar objs in input edge mapping
188 uint _endoff; // Offset to end of input edge mapping 195 uint _endoff; // Offset to end of input edge mapping
189 uint _sp; // Jave Expression Stack Pointer for this state 196 uint _sp; // Jave Expression Stack Pointer for this state
190 int _bci; // Byte Code Index of this JVM point 197 int _bci; // Byte Code Index of this JVM point
198 ReexecuteState _reexecute; // Whether this bytecode need to be re-executed
191 ciMethod* _method; // Method Pointer 199 ciMethod* _method; // Method Pointer
192 SafePointNode* _map; // Map node associated with this scope 200 SafePointNode* _map; // Map node associated with this scope
193 public: 201 public:
194 friend class Compile; 202 friend class Compile;
203 friend class PreserveReexecuteState;
195 204
196 // Because JVMState objects live over the entire lifetime of the 205 // Because JVMState objects live over the entire lifetime of the
197 // Compile object, they are allocated into the comp_arena, which 206 // Compile object, they are allocated into the comp_arena, which
198 // does not get resource marked or reset during the compile process 207 // does not get resource marked or reset during the compile process
199 void *operator new( size_t x, Compile* C ) { return C->comp_arena()->Amalloc(x); } 208 void *operator new( size_t x, Compile* C ) { return C->comp_arena()->Amalloc(x); }
220 bool is_loc(uint i) const { return i >= _locoff && i < _stkoff; } 229 bool is_loc(uint i) const { return i >= _locoff && i < _stkoff; }
221 bool is_stk(uint i) const { return i >= _stkoff && i < _monoff; } 230 bool is_stk(uint i) const { return i >= _stkoff && i < _monoff; }
222 bool is_mon(uint i) const { return i >= _monoff && i < _scloff; } 231 bool is_mon(uint i) const { return i >= _monoff && i < _scloff; }
223 bool is_scl(uint i) const { return i >= _scloff && i < _endoff; } 232 bool is_scl(uint i) const { return i >= _scloff && i < _endoff; }
224 233
225 uint sp() const { return _sp; } 234 uint sp() const { return _sp; }
226 int bci() const { return _bci; } 235 int bci() const { return _bci; }
227 bool has_method() const { return _method != NULL; } 236 bool should_reexecute() const { return _reexecute==Reexecute_True; }
228 ciMethod* method() const { assert(has_method(), ""); return _method; } 237 bool is_reexecute_undefined() const { return _reexecute==Reexecute_Undefined; }
229 JVMState* caller() const { return _caller; } 238 bool has_method() const { return _method != NULL; }
230 SafePointNode* map() const { return _map; } 239 ciMethod* method() const { assert(has_method(), ""); return _method; }
231 uint depth() const { return _depth; } 240 JVMState* caller() const { return _caller; }
232 uint debug_start() const; // returns locoff of root caller 241 SafePointNode* map() const { return _map; }
233 uint debug_end() const; // returns endoff of self 242 uint depth() const { return _depth; }
234 uint debug_size() const { 243 uint debug_start() const; // returns locoff of root caller
244 uint debug_end() const; // returns endoff of self
245 uint debug_size() const {
235 return loc_size() + sp() + mon_size() + scl_size(); 246 return loc_size() + sp() + mon_size() + scl_size();
236 } 247 }
237 uint debug_depth() const; // returns sum of debug_size values at all depths 248 uint debug_depth() const; // returns sum of debug_size values at all depths
238 249
239 // Returns the JVM state at the desired depth (1 == root). 250 // Returns the JVM state at the desired depth (1 == root).
265 void set_offsets(uint off) { 276 void set_offsets(uint off) {
266 _locoff = _stkoff = _monoff = _scloff = _endoff = off; 277 _locoff = _stkoff = _monoff = _scloff = _endoff = off;
267 } 278 }
268 void set_map(SafePointNode *map) { _map = map; } 279 void set_map(SafePointNode *map) { _map = map; }
269 void set_sp(uint sp) { _sp = sp; } 280 void set_sp(uint sp) { _sp = sp; }
270 void set_bci(int bci) { _bci = bci; } 281 // _reexecute is initialized to "undefined" for a new bci
282 void set_bci(int bci) {if(_bci != bci)_reexecute=Reexecute_Undefined; _bci = bci; }
283 void set_should_reexecute(bool reexec) {_reexecute = reexec ? Reexecute_True : Reexecute_False;}
271 284
272 // Miscellaneous utility functions 285 // Miscellaneous utility functions
273 JVMState* clone_deep(Compile* C) const; // recursively clones caller chain 286 JVMState* clone_deep(Compile* C) const; // recursively clones caller chain
274 JVMState* clone_shallow(Compile* C) const; // retains uncloned caller 287 JVMState* clone_shallow(Compile* C) const; // retains uncloned caller
275 288