< prev index next >

src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp

Print this page
rev 52560 : 8213615: GC/C2 abstraction for escape analysis

*** 22,31 **** --- 22,32 ---- */ #include "precompiled.hpp" #include "opto/compile.hpp" #include "opto/castnode.hpp" + #include "opto/escape.hpp" #include "opto/graphKit.hpp" #include "opto/idealKit.hpp" #include "opto/loopnode.hpp" #include "opto/macro.hpp" #include "opto/node.hpp"
*** 1569,1573 **** --- 1570,1615 ---- } } } #endif + + bool ZBarrierSetC2::escape_add_to_con_graph(ConnectionGraph* conn_graph, PhaseGVN* gvn, Unique_Node_List* delayed_worklist, Node* n, uint opcode) const { + switch (opcode) { + case Op_LoadBarrierSlowReg: + case Op_LoadBarrierWeakSlowReg: + conn_graph->add_objload_to_connection_graph(n, delayed_worklist); + return true; + case Op_Proj: + if (n->as_Proj()->_con == LoadBarrierNode::Oop && n->in(0)->is_LoadBarrier()) { + conn_graph->add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(0)->in(LoadBarrierNode::Oop), + delayed_worklist); + return true; + } + default: + break; + } + return false; + } + + bool ZBarrierSetC2::escape_add_final_edges(ConnectionGraph* conn_graph, PhaseGVN* gvn, Node* n, uint opcode) const { + switch (opcode) { + case Op_LoadBarrierSlowReg: + case Op_LoadBarrierWeakSlowReg: { + const Type *t = gvn->type(n); + if (t->make_ptr() != NULL) { + Node *adr = n->in(MemNode::Address); + conn_graph->add_local_var_and_edge(n, PointsToNode::NoEscape, adr, NULL); + return true; + } + } + case Op_Proj: { + if (n->as_Proj()->_con == LoadBarrierNode::Oop && n->in(0)->is_LoadBarrier()) { + conn_graph->add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(0)->in(LoadBarrierNode::Oop), NULL); + return true; + } + } + default: + break; + } + return false; + } \ No newline at end of file
< prev index next >