< prev index next >

src/hotspot/share/opto/loopopts.cpp

Print this page

        

*** 38,47 **** --- 38,51 ---- #include "opto/mulnode.hpp" #include "opto/movenode.hpp" #include "opto/opaquenode.hpp" #include "opto/rootnode.hpp" #include "opto/subnode.hpp" + #include "utilities/macros.hpp" + #if INCLUDE_ZGC + #include "gc/z/c2/zBarrierSetC2.hpp" + #endif //============================================================================= //------------------------------split_thru_phi--------------------------------- // Split Node 'n' through merge point if there is enough win. Node *PhaseIdealLoop::split_thru_phi( Node *n, Node *region, int policy ) {
*** 1124,1138 **** //------------------------------split_if_with_blocks_post---------------------- // Do the real work in a non-recursive function. CFG hackery wants to be // in the post-order, so it can dirty the I-DOM info and not use the dirtied // info. ! void PhaseIdealLoop::split_if_with_blocks_post(Node *n) { // Cloning Cmp through Phi's involves the split-if transform. // FastLock is not used by an If ! if (n->is_Cmp() && !n->is_FastLock()) { Node *n_ctrl = get_ctrl(n); // Determine if the Node has inputs from some local Phi. // Returns the block to clone thru. Node *n_blk = has_local_phi_input(n); if (n_blk != n_ctrl) { --- 1128,1142 ---- //------------------------------split_if_with_blocks_post---------------------- // Do the real work in a non-recursive function. CFG hackery wants to be // in the post-order, so it can dirty the I-DOM info and not use the dirtied // info. ! void PhaseIdealLoop::split_if_with_blocks_post(Node *n, bool last_round) { // Cloning Cmp through Phi's involves the split-if transform. // FastLock is not used by an If ! if (n->is_Cmp() && !n->is_FastLock() && !last_round) { Node *n_ctrl = get_ctrl(n); // Determine if the Node has inputs from some local Phi. // Returns the block to clone thru. Node *n_blk = has_local_phi_input(n); if (n_blk != n_ctrl) {
*** 1375,1390 **** if( n_op == Op_Opaque2 && n->in(1) != NULL && get_loop(get_ctrl(n)) == get_loop(get_ctrl(n->in(1))) ) { _igvn.replace_node( n, n->in(1) ); } } //------------------------------split_if_with_blocks--------------------------- // Check for aggressive application of 'split-if' optimization, // using basic block level info. ! void PhaseIdealLoop::split_if_with_blocks( VectorSet &visited, Node_Stack &nstack ) { Node *n = C->root(); visited.set(n->_idx); // first, mark node as visited // Do pre-visit work for root n = split_if_with_blocks_pre( n ); uint cnt = n->outcnt(); --- 1379,1400 ---- if( n_op == Op_Opaque2 && n->in(1) != NULL && get_loop(get_ctrl(n)) == get_loop(get_ctrl(n->in(1))) ) { _igvn.replace_node( n, n->in(1) ); } + + #if INCLUDE_ZGC + if (UseZGC) { + ZBarrierSetC2::loop_optimize_gc_barrier(this, n, last_round); + } + #endif } //------------------------------split_if_with_blocks--------------------------- // Check for aggressive application of 'split-if' optimization, // using basic block level info. ! void PhaseIdealLoop::split_if_with_blocks(VectorSet &visited, Node_Stack &nstack, bool last_round) { Node *n = C->root(); visited.set(n->_idx); // first, mark node as visited // Do pre-visit work for root n = split_if_with_blocks_pre( n ); uint cnt = n->outcnt();
*** 1405,1415 **** } else { // All of n's children have been processed, complete post-processing. if (cnt != 0 && !n->is_Con()) { assert(has_node(n), "no dead nodes"); ! split_if_with_blocks_post( n ); } if (nstack.is_empty()) { // Finished all nodes on stack. break; } --- 1415,1425 ---- } else { // All of n's children have been processed, complete post-processing. if (cnt != 0 && !n->is_Con()) { assert(has_node(n), "no dead nodes"); ! split_if_with_blocks_post( n, last_round ); } if (nstack.is_empty()) { // Finished all nodes on stack. break; }
< prev index next >