--- a/src/hotspot/share/opto/compile.cpp Mon Jun 10 05:09:52 2019 +0200
+++ b/src/hotspot/share/opto/compile.cpp Thu Feb 14 14:54:05 2019 +0100
@@ -2211,8 +2211,8 @@
#endif
+ BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
#ifdef ASSERT
- BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
bs->verify_gc_barriers(this, BarrierSetC2::BeforeOptimize);
#endif
@@ -2371,7 +2371,6 @@
igvn = ccp;
igvn.optimize();
}
-
print_method(PHASE_ITER_GVN2, 2);
if (failing()) return;
@@ -2382,12 +2381,6 @@
return;
}
-#if INCLUDE_ZGC
- if (UseZGC) {
- ZBarrierSetC2::find_dominating_barriers(igvn);
- }
-#endif
-
if (failing()) return;
// Ensure that major progress is now clear
@@ -2407,28 +2400,33 @@
}
#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(C, 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) {
@@ -2824,7 +2822,7 @@
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()) {