# HG changeset patch # User rkennke # Date 1564691270 -7200 # Thu Aug 01 22:27:50 2019 +0200 # Node ID 5925a47197e3931fb1b4a2a53a9021de626c92ce # Parent 98d166146cd03c3671f18835cee1c0f5b87a97dd Proper fix for C2-unrolled-clone with Shenandoah LRB diff --git a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp --- a/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp +++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp @@ -748,7 +748,7 @@ } bool ShenandoahBarrierSetC2::array_copy_requires_gc_barriers(BasicType type) const { - return type == T_OBJECT || type == T_ARRAY; + return false; } bool ShenandoahBarrierSetC2::clone_needs_postbarrier(ArrayCopyNode *ac, PhaseIterGVN& igvn) { diff --git a/src/hotspot/share/opto/arraycopynode.cpp b/src/hotspot/share/opto/arraycopynode.cpp --- a/src/hotspot/share/opto/arraycopynode.cpp +++ b/src/hotspot/share/opto/arraycopynode.cpp @@ -154,6 +154,9 @@ #if INCLUDE_SHENANDOAHGC Node* ArrayCopyNode::shenandoah_add_storeval_barrier(PhaseGVN *phase, bool can_reshape, Node* v, MergeMemNode* mem, Node*& ctl) { + if (ShenandoahLoadRefBarrier) { + return phase->transform(new ShenandoahLoadReferenceBarrierNode(NULL, v)); + } if (ShenandoahStoreValEnqueueBarrier) { return phase->transform(new ShenandoahEnqueueBarrierNode(v)); }