< prev index next >
src/hotspot/share/opto/compile.cpp
Print this page
@@ -1120,11 +1120,11 @@
set_clear_upper_avx(false); //false as default for clear upper bits of ymm registers
Copy::zero_to_bytes(_trap_hist, sizeof(_trap_hist));
set_decompile_count(0);
set_do_freq_based_layout(_directive->BlockLayoutByFrequencyOption);
- set_num_loop_opts(LoopOptsCount);
+ _loop_opts_cnt = LoopOptsCount;
set_do_inlining(Inline);
set_max_inline_size(MaxInlineSize);
set_freq_inline_size(FreqInlineSize);
set_do_scheduling(OptoScheduling);
set_do_count_invocations(false);
@@ -2167,18 +2167,18 @@
set_inlining_incrementally(false);
}
-bool Compile::optimize_loops(int& loop_opts_cnt, PhaseIterGVN& igvn, LoopOptsMode mode) {
- if(loop_opts_cnt > 0) {
+bool Compile::optimize_loops(PhaseIterGVN& igvn, LoopOptsMode mode) {
+ if(_loop_opts_cnt > 0) {
debug_only( int cnt = 0; );
- while(major_progress() && (loop_opts_cnt > 0)) {
+ while(major_progress() && (_loop_opts_cnt > 0)) {
TracePhase tp("idealLoop", &timers[_t_idealLoop]);
assert( cnt++ < 40, "infinite cycle in loop optimization" );
PhaseIdealLoop ideal_loop(igvn, mode);
- loop_opts_cnt--;
+ _loop_opts_cnt--;
if (failing()) return false;
if (major_progress()) print_method(PHASE_PHASEIDEALLOOP_ITERATIONS, 2);
}
}
return true;
@@ -2200,11 +2200,10 @@
BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
bs->verify_gc_barriers(this, BarrierSetC2::BeforeOptimize);
#endif
ResourceMark rm;
- int loop_opts_cnt;
print_inlining_reinit();
NOT_PRODUCT( verify_graph_edges(); )
@@ -2303,32 +2302,31 @@
// Loop transforms on the ideal graph. Range Check Elimination,
// peeling, unrolling, etc.
// Set loop opts counter
- loop_opts_cnt = num_loop_opts();
- if((loop_opts_cnt > 0) && (has_loops() || has_split_ifs())) {
+ if((_loop_opts_cnt > 0) && (has_loops() || has_split_ifs())) {
{
TracePhase tp("idealLoop", &timers[_t_idealLoop]);
PhaseIdealLoop ideal_loop(igvn, LoopOptsDefault);
- loop_opts_cnt--;
+ _loop_opts_cnt--;
if (major_progress()) print_method(PHASE_PHASEIDEALLOOP1, 2);
if (failing()) return;
}
// Loop opts pass if partial peeling occurred in previous pass
- if(PartialPeelLoop && major_progress() && (loop_opts_cnt > 0)) {
+ if(PartialPeelLoop && major_progress() && (_loop_opts_cnt > 0)) {
TracePhase tp("idealLoop", &timers[_t_idealLoop]);
PhaseIdealLoop ideal_loop(igvn, LoopOptsSkipSplitIf);
- loop_opts_cnt--;
+ _loop_opts_cnt--;
if (major_progress()) print_method(PHASE_PHASEIDEALLOOP2, 2);
if (failing()) return;
}
// Loop opts pass for loop-unrolling before CCP
- if(major_progress() && (loop_opts_cnt > 0)) {
+ if(major_progress() && (_loop_opts_cnt > 0)) {
TracePhase tp("idealLoop", &timers[_t_idealLoop]);
PhaseIdealLoop ideal_loop(igvn, LoopOptsSkipSplitIf);
- loop_opts_cnt--;
+ _loop_opts_cnt--;
if (major_progress()) print_method(PHASE_PHASEIDEALLOOP3, 2);
}
if (!failing()) {
// Verify that last round of loop opts produced a valid graph
TracePhase tp("idealLoopVerify", &timers[_t_idealLoopVerify]);
@@ -2359,11 +2357,11 @@
if (failing()) return;
// Loop transforms on the ideal graph. Range Check Elimination,
// peeling, unrolling, etc.
- if (!optimize_loops(loop_opts_cnt, igvn, LoopOptsDefault)) {
+ if (!optimize_loops(igvn, LoopOptsDefault)) {
return;
}
#if INCLUDE_ZGC
if (UseZGC) {
@@ -2402,10 +2400,20 @@
assert(failing(), "must bail out w/ explicit message");
return;
}
}
+ {
+ TracePhase tp("barrierExpand", &timers[_t_barrierExpand]);
+ print_method(PHASE_BEFORE_BARRIER_EXPAND, 2);
+ BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
+ if (bs->expand_barriers(this, igvn)) {
+ assert(failing(), "must bail out w/ explicit message");
+ return;
+ }
+ }
+
if (opaque4_count() > 0) {
C->remove_opaque4_nodes(igvn);
igvn.optimize();
}
< prev index next >