< prev index next >

src/hotspot/share/opto/escape.cpp

Print this page

        

*** 36,48 **** --- 36,52 ---- #include "opto/compile.hpp" #include "opto/escape.hpp" #include "opto/phaseX.hpp" #include "opto/movenode.hpp" #include "opto/rootnode.hpp" + #include "utilities/macros.hpp" #if INCLUDE_G1GC #include "gc/g1/g1ThreadLocalData.hpp" #endif // INCLUDE_G1GC + #if INCLUDE_ZGC + #include "gc/z/c2/zBarrierSetC2.hpp" + #endif ConnectionGraph::ConnectionGraph(Compile * C, PhaseIterGVN *igvn) : _nodes(C->comp_arena(), C->unique(), C->unique(), NULL), _in_worklist(C->comp_arena()), _next_pidx(0),
*** 447,456 **** --- 451,464 ---- // Unknown class is loaded map_ideal_node(n, phantom_obj); break; } case Op_LoadP: + #if INCLUDE_ZGC + case Op_LoadBarrierSlowReg: + case Op_LoadBarrierWeakSlowReg: + #endif case Op_LoadN: case Op_LoadPLocked: { add_objload_to_connection_graph(n, delayed_worklist); break; }
*** 481,490 **** --- 489,505 ---- if (n->as_Proj()->_con == TypeFunc::Parms && n->in(0)->is_Call() && n->in(0)->as_Call()->returns_pointer()) { add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(0), delayed_worklist); } + #if INCLUDE_ZGC + else if (UseZGC) { + if (n->as_Proj()->_con == LoadBarrierNode::Oop && n->in(0)->is_LoadBarrier()) { + add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(0)->in(LoadBarrierNode::Oop), delayed_worklist); + } + } + #endif break; } case Op_Rethrow: // Exception object escapes case Op_Return: { if (n->req() > TypeFunc::Parms &&
*** 649,658 **** --- 664,677 ---- add_edge(n_ptn, ptn); } break; } case Op_LoadP: + #if INCLUDE_ZGC + case Op_LoadBarrierSlowReg: + case Op_LoadBarrierWeakSlowReg: + #endif case Op_LoadN: case Op_LoadPLocked: { // Using isa_ptr() instead of isa_oopptr() for LoadP and Phi because // ThreadLocal has RawPtr type. const Type* t = _igvn->type(n);
*** 688,697 **** --- 707,724 ---- if (n->as_Proj()->_con == TypeFunc::Parms && n->in(0)->is_Call() && n->in(0)->as_Call()->returns_pointer()) { add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(0), NULL); break; } + #if INCLUDE_ZGC + else if (UseZGC) { + if (n->as_Proj()->_con == LoadBarrierNode::Oop && n->in(0)->is_LoadBarrier()) { + add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(0)->in(LoadBarrierNode::Oop), NULL); + break; + } + } + #endif ELSE_FAIL("Op_Proj"); } case Op_Rethrow: // Exception object escapes case Op_Return: { if (n->req() > TypeFunc::Parms &&
*** 3161,3171 **** memnode_worklist.append_if_missing(use); } else if (!(op == Op_CmpP || op == Op_Conv2B || op == Op_CastP2X || op == Op_StoreCM || op == Op_FastLock || op == Op_AryEq || op == Op_StrComp || op == Op_HasNegatives || op == Op_StrCompressedCopy || op == Op_StrInflatedCopy || ! op == Op_StrEquals || op == Op_StrIndexOf || op == Op_StrIndexOfChar)) { n->dump(); use->dump(); assert(false, "EA: missing allocation reference path"); } #endif --- 3188,3199 ---- memnode_worklist.append_if_missing(use); } else if (!(op == Op_CmpP || op == Op_Conv2B || op == Op_CastP2X || op == Op_StoreCM || op == Op_FastLock || op == Op_AryEq || op == Op_StrComp || op == Op_HasNegatives || op == Op_StrCompressedCopy || op == Op_StrInflatedCopy || ! op == Op_StrEquals || op == Op_StrIndexOf || op == Op_StrIndexOfChar || ! BarrierSet::barrier_set()->barrier_set_c2()->is_gc_barrier_node(use))) { n->dump(); use->dump(); assert(false, "EA: missing allocation reference path"); } #endif
< prev index next >