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