6671807: (Escape Analysis) Add new ideal node to represent the state of a scalarized object at a safepoint

Values of non-static fields of a scalarized object should be saved in debug info to reallocate the object during deoptimization.

Reviewed-by: never
This commit is contained in:
Vladimir Kozlov 2008-03-13 16:06:34 -07:00
parent 1931e94bad
commit 000ac830a0
9 changed files with 322 additions and 26 deletions

View file

@ -606,8 +606,20 @@ class Compile : public Phase {
// Build OopMaps for each GC point
void BuildOopMaps();
// Append debug info for the node to the array
void FillLocArray( int idx, Node *local, GrowableArray<ScopeValue*> *array );
// Append debug info for the node "local" at safepoint node "sfpt" to the
// "array", May also consult and add to "objs", which describes the
// scalar-replaced objects.
void FillLocArray( int idx, MachSafePointNode* sfpt,
Node *local, GrowableArray<ScopeValue*> *array,
GrowableArray<ScopeValue*> *objs );
// If "objs" contains an ObjectValue whose id is "id", returns it, else NULL.
static ObjectValue* sv_for_node_id(GrowableArray<ScopeValue*> *objs, int id);
// Requres that "objs" does not contains an ObjectValue whose id matches
// that of "sv. Appends "sv".
static void set_sv_for_object_node(GrowableArray<ScopeValue*> *objs,
ObjectValue* sv );
// Process an OopMap Element while emitting nodes
void Process_OopMap_Node(MachNode *mach, int code_offset);