8214362: C2: gc interface entry point for split if

Reviewed-by: rkennke, thartmann
This commit is contained in:
Roland Westrelin 2018-11-27 14:49:13 +01:00
parent 8849b1c7b7
commit cd0aafe76a
2 changed files with 7 additions and 1 deletions

View File

@ -60,8 +60,8 @@ class ConnectionGraph;
class GraphKit;
class IdealKit;
class Node;
class PhaseIdealLoop;
class PhaseGVN;
class PhaseIdealLoop;
class PhaseMacroExpand;
class Type;
class TypePtr;
@ -313,6 +313,7 @@ public:
virtual void igvn_add_users_to_worklist(PhaseIterGVN* igvn, Node* use) const {}
virtual void ccp_analyze(PhaseCCP* ccp, Unique_Node_List& worklist, Node* use) const {}
virtual Node* split_if_pre(PhaseIdealLoop* phase, Node* n) const { return NULL; }
};
#endif // SHARE_GC_SHARED_C2_BARRIERSETC2_HPP

View File

@ -887,6 +887,11 @@ void PhaseIdealLoop::try_move_store_after_loop(Node* n) {
// Do the real work in a non-recursive function. Data nodes want to be
// cloned in the pre-order so they can feed each other nicely.
Node *PhaseIdealLoop::split_if_with_blocks_pre( Node *n ) {
BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
Node* bs_res = bs->split_if_pre(this, n);
if (bs_res != NULL) {
return bs_res;
}
// Cloning these guys is unlikely to win
int n_op = n->Opcode();
if( n_op == Op_MergeMem ) return n;