< prev index next >
src/hotspot/share/opto/compile.cpp
Print this page
rev 54995 : 8224675: Late GC barrier insertion for ZGC
Reviewed-by:
@@ -2204,12 +2204,12 @@
BREAKPOINT;
}
#endif
-#ifdef ASSERT
BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
+#ifdef ASSERT
bs->verify_gc_barriers(this, BarrierSetC2::BeforeOptimize);
#endif
ResourceMark rm;
@@ -2364,27 +2364,20 @@
{
TracePhase tp("iterGVN2", &timers[_t_iterGVN2]);
igvn = ccp;
igvn.optimize();
}
-
print_method(PHASE_ITER_GVN2, 2);
if (failing()) return;
// Loop transforms on the ideal graph. Range Check Elimination,
// peeling, unrolling, etc.
if (!optimize_loops(igvn, LoopOptsDefault)) {
return;
}
-#if INCLUDE_ZGC
- if (UseZGC) {
- ZBarrierSetC2::find_dominating_barriers(igvn);
- }
-#endif
-
if (failing()) return;
// Ensure that major progress is now clear
C->clear_major_progress();
@@ -2400,32 +2393,37 @@
C->remove_range_check_casts(igvn);
igvn.optimize();
}
#ifdef ASSERT
- BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
- bs->verify_gc_barriers(this, BarrierSetC2::BeforeExpand);
+ bs->verify_gc_barriers(this, BarrierSetC2::BeforeLateInsertion);
+#endif
+
+ bs->barrier_insertion_phase(igvn);
+ if (failing()) return;
+
+#ifdef ASSERT
+ bs->verify_gc_barriers(this, BarrierSetC2::BeforeMacroExpand);
#endif
{
TracePhase tp("macroExpand", &timers[_t_macroExpand]);
PhaseMacroExpand mex(igvn);
- print_method(PHASE_BEFORE_MACRO_EXPANSION, 2);
if (mex.expand_macro_nodes()) {
assert(failing(), "must bail out w/ explicit message");
return;
}
+ print_method(PHASE_MACRO_EXPANSION, 2);
}
{
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;
}
+ print_method(PHASE_BARRIER_EXPANSION, 2);
}
if (opaque4_count() > 0) {
C->remove_opaque4_nodes(igvn);
igvn.optimize();
@@ -2817,11 +2815,11 @@
}
if (n->is_MemBar()) {
MemBarNode* mb = n->as_MemBar();
if (mb->trailing_store() || mb->trailing_load_store()) {
assert(mb->leading_membar()->trailing_membar() == mb, "bad membar pair");
- Node* mem = mb->in(MemBarNode::Precedent);
+ Node* mem = BarrierSet::barrier_set()->barrier_set_c2()->step_over_gc_barrier(mb->in(MemBarNode::Precedent));
assert((mb->trailing_store() && mem->is_Store() && mem->as_Store()->is_release()) ||
(mb->trailing_load_store() && mem->is_LoadStore()), "missing mem op");
} else if (mb->leading()) {
assert(mb->trailing_membar()->leading_membar() == mb, "bad membar pair");
}
< prev index next >