< prev index next >

src/hotspot/share/opto/loopnode.cpp

Print this page

        

*** 23,32 **** --- 23,34 ---- */ #include "precompiled.hpp" #include "ci/ciMethodData.hpp" #include "compiler/compileLog.hpp" + #include "gc/shared/barrierSet.hpp" + #include "gc/shared/c2/barrierSetC2.hpp" #include "libadt/vectset.hpp" #include "memory/allocation.inline.hpp" #include "memory/resourceArea.hpp" #include "opto/addnode.hpp" #include "opto/callnode.hpp"
*** 211,221 **** } if (nb_ctl_proj > 1) { break; } ! assert(parent_ctl->is_Start() || parent_ctl->is_MemBar() || parent_ctl->is_Call(), "unexpected node"); assert(idom(ctl) == parent_ctl, "strange"); next = idom(parent_ctl); } } else { next = idom(ctl); --- 213,224 ---- } if (nb_ctl_proj > 1) { break; } ! assert(parent_ctl->is_Start() || parent_ctl->is_MemBar() || parent_ctl->is_Call() || ! BarrierSet::barrier_set()->barrier_set_c2()->is_gc_barrier_node(parent_ctl), "unexpected node"); assert(idom(ctl) == parent_ctl, "strange"); next = idom(parent_ctl); } } else { next = idom(ctl);
*** 2633,2643 **** //============================================================================= //----------------------------build_and_optimize------------------------------- // Create a PhaseLoop. Build the ideal Loop tree. Map each Ideal Node to // its corresponding LoopNode. If 'optimize' is true, do some loop cleanups. ! void PhaseIdealLoop::build_and_optimize(bool do_split_ifs, bool skip_loop_opts) { ResourceMark rm; int old_progress = C->major_progress(); uint orig_worklist_size = _igvn._worklist.size(); --- 2636,2646 ---- //============================================================================= //----------------------------build_and_optimize------------------------------- // Create a PhaseLoop. Build the ideal Loop tree. Map each Ideal Node to // its corresponding LoopNode. If 'optimize' is true, do some loop cleanups. ! void PhaseIdealLoop::build_and_optimize(bool do_split_ifs, bool skip_loop_opts, bool last_round) { ResourceMark rm; int old_progress = C->major_progress(); uint orig_worklist_size = _igvn._worklist.size();
*** 2880,2891 **** // Check for aggressive application of split-if and other transforms // that require basic-block info (like cloning through Phi's) if( SplitIfBlocks && do_split_ifs ) { visited.Clear(); ! split_if_with_blocks( visited, nstack ); NOT_PRODUCT( if( VerifyLoopOptimizations ) verify(); ); } if (!C->major_progress() && do_expensive_nodes && process_expensive_nodes()) { C->set_major_progress(); } --- 2883,2897 ---- // Check for aggressive application of split-if and other transforms // that require basic-block info (like cloning through Phi's) if( SplitIfBlocks && do_split_ifs ) { visited.Clear(); ! split_if_with_blocks( visited, nstack, last_round ); NOT_PRODUCT( if( VerifyLoopOptimizations ) verify(); ); + if (last_round) { + C->set_major_progress(); + } } if (!C->major_progress() && do_expensive_nodes && process_expensive_nodes()) { C->set_major_progress(); }
*** 4134,4143 **** --- 4140,4151 ---- case Op_LoadKlass: case Op_LoadNKlass: case Op_LoadL: case Op_LoadS: case Op_LoadP: + case Op_LoadBarrierSlowReg: + case Op_LoadBarrierWeakSlowReg: case Op_LoadN: case Op_LoadRange: case Op_LoadD_unaligned: case Op_LoadL_unaligned: case Op_StrComp: // Does a bunch of load-like effects
< prev index next >