src/share/vm/opto/escape.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6689060 Cdiff src/share/vm/opto/escape.cpp

src/share/vm/opto/escape.cpp

Print this page

        

*** 213,232 **** void ConnectionGraph::PointsTo(VectorSet &ptset, Node * n, PhaseTransform *phase) { VectorSet visited(Thread::current()->resource_area()); GrowableArray<uint> worklist; n = n->uncast(); PointsToNode npt = _nodes->at_grow(n->_idx); // If we have a JavaObject, return just that object if (npt.node_type() == PointsToNode::JavaObject) { ptset.set(n->_idx); return; } assert(npt._node != NULL, "unregistered node"); ! worklist.push(n->_idx); while(worklist.length() > 0) { int ni = worklist.pop(); PointsToNode pn = _nodes->at_grow(ni); if (!visited.test_set(ni)) { --- 213,242 ---- void ConnectionGraph::PointsTo(VectorSet &ptset, Node * n, PhaseTransform *phase) { VectorSet visited(Thread::current()->resource_area()); GrowableArray<uint> worklist; + #ifdef ASSERT + Node *orig_n = n; + #endif + n = n->uncast(); PointsToNode npt = _nodes->at_grow(n->_idx); // If we have a JavaObject, return just that object if (npt.node_type() == PointsToNode::JavaObject) { ptset.set(n->_idx); return; } + #ifdef ASSERT + if (npt._node == NULL) { + if (orig_n != n) + orig_n->dump(); + n->dump(); assert(npt._node != NULL, "unregistered node"); ! } ! #endif worklist.push(n->_idx); while(worklist.length() > 0) { int ni = worklist.pop(); PointsToNode pn = _nodes->at_grow(ni); if (!visited.test_set(ni)) {
*** 264,283 **** uint i = 0; PointsToNode *ptn = ptnode_adr(ni); // Mark current edges as visited and move deferred edges to separate array. ! for (; i < ptn->edge_count(); i++) { uint t = ptn->edge_target(i); #ifdef ASSERT assert(!visited->test_set(t), "expecting no duplications"); #else visited->set(t); #endif if (ptn->edge_type(i) == PointsToNode::DeferredEdge) { ptn->remove_edge(t, PointsToNode::DeferredEdge); deferred_edges->append(t); } } for (int next = 0; next < deferred_edges->length(); ++next) { uint t = deferred_edges->at(next); PointsToNode *ptt = ptnode_adr(t); --- 274,295 ---- uint i = 0; PointsToNode *ptn = ptnode_adr(ni); // Mark current edges as visited and move deferred edges to separate array. ! while (i < ptn->edge_count()) { uint t = ptn->edge_target(i); #ifdef ASSERT assert(!visited->test_set(t), "expecting no duplications"); #else visited->set(t); #endif if (ptn->edge_type(i) == PointsToNode::DeferredEdge) { ptn->remove_edge(t, PointsToNode::DeferredEdge); deferred_edges->append(t); + } else { + i++; } } for (int next = 0; next < deferred_edges->length(); ++next) { uint t = deferred_edges->at(next); PointsToNode *ptt = ptnode_adr(t);
*** 1714,1723 **** --- 1726,1737 ---- add_node(n, PointsToNode::JavaObject, PointsToNode::GlobalEscape, true); break; } case Op_CastPP: case Op_CheckCastPP: + case Op_EncodeP: + case Op_DecodeN: { add_node(n, PointsToNode::LocalVar, PointsToNode::UnknownEscape, false); int ti = n->in(1)->_idx; PointsToNode::NodeType nt = _nodes->adr_at(ti)->node_type(); if (nt == PointsToNode::UnknownType) {
*** 1741,1756 **** es = PointsToNode::GlobalEscape; add_node(n, PointsToNode::JavaObject, es, true); break; } - case Op_CreateEx: - { - // assume that all exception objects globally escape - add_node(n, PointsToNode::JavaObject, PointsToNode::GlobalEscape, true); - break; - } case Op_ConN: { // assume all narrow oop constants globally escape except for null PointsToNode::EscapeState es; if (phase->type(n) == TypeNarrowOop::NULL_PTR) --- 1755,1764 ----
*** 1759,1768 **** --- 1767,1782 ---- es = PointsToNode::GlobalEscape; add_node(n, PointsToNode::JavaObject, es, true); break; } + case Op_CreateEx: + { + // assume that all exception objects globally escape + add_node(n, PointsToNode::JavaObject, PointsToNode::GlobalEscape, true); + break; + } case Op_LoadKlass: { add_node(n, PointsToNode::JavaObject, PointsToNode::GlobalEscape, true); break; }
*** 1974,1987 **** { assert(false, "Op_LoadKlass"); break; } case Op_LoadP: { const Type *t = phase->type(n); #ifdef ASSERT ! if (t->isa_ptr() == NULL) assert(false, "Op_LoadP"); #endif Node* adr = n->in(MemNode::Address)->uncast(); const Type *adr_type = phase->type(adr); --- 1988,2002 ---- { assert(false, "Op_LoadKlass"); break; } case Op_LoadP: + case Op_LoadN: { const Type *t = phase->type(n); #ifdef ASSERT ! if (!t->isa_narrowoop() && t->isa_ptr() == NULL) assert(false, "Op_LoadP"); #endif Node* adr = n->in(MemNode::Address)->uncast(); const Type *adr_type = phase->type(adr);
*** 2058,2072 **** --- 2073,2092 ---- } _processed.set(n->_idx); break; } case Op_StoreP: + case Op_StoreN: case Op_StorePConditional: case Op_CompareAndSwapP: + case Op_CompareAndSwapN: { Node *adr = n->in(MemNode::Address); const Type *adr_type = phase->type(adr); + if (adr_type->isa_narrowoop()) { + adr_type = adr_type->is_narrowoop()->make_oopptr(); + } #ifdef ASSERT if (!adr_type->isa_oopptr()) assert(phase->type(adr) == TypeRawPtr::NOTNULL, "Op_StoreP"); #endif
src/share/vm/opto/escape.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File