< 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 >