< prev index next >

src/hotspot/share/opto/macro.cpp

Print this page
rev 53307 : Backport Shenadoah GC

*** 45,57 **** --- 45,61 ---- #include "opto/rootnode.hpp" #include "opto/runtime.hpp" #include "opto/subnode.hpp" #include "opto/type.hpp" #include "runtime/sharedRuntime.hpp" + #include "utilities/macros.hpp" #if INCLUDE_G1GC #include "gc/g1/g1ThreadLocalData.hpp" #endif // INCLUDE_G1GC + #if INCLUDE_SHENANDOAHGC + #include "gc/shenandoah/c2/shenandoahBarrierSetC2.hpp" + #endif // // Replace any references to "oldref" in inputs to "use" with "newref". // Returns the number of replacements made.
*** 456,466 **** return NULL; // can't find a value on this path } if (val == mem) { values.at_put(j, mem); } else if (val->is_Store()) { ! values.at_put(j, val->in(MemNode::ValueIn)); } else if(val->is_Proj() && val->in(0) == alloc) { values.at_put(j, _igvn.zerocon(ft)); } else if (val->is_Phi()) { val = value_from_mem_phi(val, ft, phi_type, adr_t, alloc, value_phis, level-1); if (val == NULL) { --- 460,477 ---- return NULL; // can't find a value on this path } if (val == mem) { values.at_put(j, mem); } else if (val->is_Store()) { ! Node* n = val->in(MemNode::ValueIn); ! #if INCLUDE_SHENANDOAHGC ! if (UseShenandoahGC) { ! BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2(); ! n = bs->step_over_gc_barrier(n); ! } ! #endif ! values.at_put(j, n); } else if(val->is_Proj() && val->in(0) == alloc) { values.at_put(j, _igvn.zerocon(ft)); } else if (val->is_Phi()) { val = value_from_mem_phi(val, ft, phi_type, adr_t, alloc, value_phis, level-1); if (val == NULL) {
*** 567,577 **** if (mem != NULL) { if (mem == start_mem || mem == alloc_mem) { // hit a sentinel, return appropriate 0 value return _igvn.zerocon(ft); } else if (mem->is_Store()) { ! return mem->in(MemNode::ValueIn); } else if (mem->is_Phi()) { // attempt to produce a Phi reflecting the values on the input paths of the Phi Node_Stack value_phis(a, 8); Node * phi = value_from_mem_phi(mem, ft, ftype, adr_t, alloc, &value_phis, ValueSearchLimit); if (phi != NULL) { --- 578,595 ---- if (mem != NULL) { if (mem == start_mem || mem == alloc_mem) { // hit a sentinel, return appropriate 0 value return _igvn.zerocon(ft); } else if (mem->is_Store()) { ! Node* n = mem->in(MemNode::ValueIn); ! #if INCLUDE_SHENANDOAHGC ! if (UseShenandoahGC) { ! BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2(); ! n = bs->step_over_gc_barrier(n); ! } ! #endif ! return n; } else if (mem->is_Phi()) { // attempt to produce a Phi reflecting the values on the input paths of the Phi Node_Stack value_phis(a, 8); Node * phi = value_from_mem_phi(mem, ft, ftype, adr_t, alloc, &value_phis, ValueSearchLimit); if (phi != NULL) {
*** 644,653 **** --- 662,672 ---- } for (DUIterator_Fast kmax, k = use->fast_outs(kmax); k < kmax && can_eliminate; k++) { Node* n = use->fast_out(k); if (!n->is_Store() && n->Opcode() != Op_CastP2X && + SHENANDOAHGC_ONLY((!UseShenandoahGC || !ShenandoahBarrierSetC2::is_shenandoah_wb_pre_call(n)) &&) !(n->is_ArrayCopy() && n->as_ArrayCopy()->is_clonebasic() && n->in(ArrayCopyNode::Dest) == use)) { DEBUG_ONLY(disq_node = n;) if (n->is_Load() || n->is_LoadStore()) {
< prev index next >