src/share/vm/opto/callnode.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/callnode.hpp	Fri Jul 24 10:17:20 2009
--- new/src/share/vm/opto/callnode.hpp	Fri Jul 24 10:17:20 2009

*** 176,185 **** --- 176,192 ---- // plus GC roots, for all active calls at some call site in this compilation // unit. (If there is no inlining, then the list has exactly one link.) // This provides a way to map the optimized program back into the interpreter, // or to let the GC mark the stack. class JVMState : public ResourceObj { + public: + typedef enum { + Reexecute_Undefined = -1, // not defined -- will be translated into false later + Reexecute_False = 0, // false -- do not reexecute + Reexecute_True = 1 // true -- reexecute the bytecode + } ReexecuteState; //Reexecute State + private: JVMState* _caller; // List pointer for forming scope chains uint _depth; // One mroe than caller depth, or one. uint _locoff; // Offset to locals in input edge mapping uint _stkoff; // Offset to stack in input edge mapping
*** 186,199 **** --- 193,208 ---- uint _monoff; // Offset to monitors in input edge mapping uint _scloff; // Offset to fields of scalar objs in input edge mapping uint _endoff; // Offset to end of input edge mapping uint _sp; // Jave Expression Stack Pointer for this state int _bci; // Byte Code Index of this JVM point + ReexecuteState _reexecute; // Whether this bytecode need to be re-executed ciMethod* _method; // Method Pointer SafePointNode* _map; // Map node associated with this scope public: friend class Compile; + friend class PreserveReexecuteState; // Because JVMState objects live over the entire lifetime of the // Compile object, they are allocated into the comp_arena, which // does not get resource marked or reset during the compile process void *operator new( size_t x, Compile* C ) { return C->comp_arena()->Amalloc(x); }
*** 222,231 **** --- 231,242 ---- bool is_mon(uint i) const { return i >= _monoff && i < _scloff; } bool is_scl(uint i) const { return i >= _scloff && i < _endoff; } uint sp() const { return _sp; } int bci() const { return _bci; } + bool should_reexecute() const { return _reexecute==Reexecute_True; } + bool is_reexecute_undefined() const { return _reexecute==Reexecute_Undefined; } bool has_method() const { return _method != NULL; } ciMethod* method() const { assert(has_method(), ""); return _method; } JVMState* caller() const { return _caller; } SafePointNode* map() const { return _map; } uint depth() const { return _depth; }
*** 265,275 **** --- 276,289 ---- void set_offsets(uint off) { _locoff = _stkoff = _monoff = _scloff = _endoff = off; } void set_map(SafePointNode *map) { _map = map; } void set_sp(uint sp) { _sp = sp; } void set_bci(int bci) { _bci = bci; } + //Note: _reexecute should always be undefined when a new _bci is set + void set_bci(int bci) {assert(_reexecute==Reexecute_Undefined || _bci==bci, "sanity check"); _bci = bci; } + void set_should_reexecute(bool reexec) {_reexecute = reexec ? Reexecute_True : Reexecute_False;} + void set_reexecute_undefined() {_reexecute = Reexecute_Undefined; } // Miscellaneous utility functions JVMState* clone_deep(Compile* C) const; // recursively clones caller chain JVMState* clone_shallow(Compile* C) const; // retains uncloned caller

src/share/vm/opto/callnode.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File