Skip to content

Commit ade7796

Browse files
author
Y. Srinivas Ramakrishna
committed
8315247: GenShen: Condition calls to post-write barrier code generation by a flag
Reviewed-by: wkemper, kdnilsen
1 parent 72009f4 commit ade7796

15 files changed

+85
-58
lines changed

src/hotspot/cpu/aarch64/gc/shenandoah/c1/shenandoahBarrierSetC1_aarch64.cpp

+7-3
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,16 @@ LIR_Opr ShenandoahBarrierSetC1::atomic_cmpxchg_at_resolved(LIRAccess& access, LI
9090

9191
__ append(new LIR_OpShenandoahCompareAndSwap(addr, cmp_value.result(), new_value.result(), t1, t2, result));
9292

93-
post_barrier(access, access.resolved_addr(), new_value.result());
93+
if (ShenandoahCardBarrier) {
94+
post_barrier(access, access.resolved_addr(), new_value.result());
95+
}
9496
return result;
9597
}
9698
}
9799

98100
LIR_Opr result = BarrierSetC1::atomic_cmpxchg_at_resolved(access, cmp_value, new_value);
99101

100-
if (access.is_oop()) {
102+
if (ShenandoahCardBarrier && access.is_oop()) {
101103
post_barrier(access, access.resolved_addr(), new_value.result());
102104
}
103105

@@ -129,7 +131,9 @@ LIR_Opr ShenandoahBarrierSetC1::atomic_xchg_at_resolved(LIRAccess& access, LIRIt
129131
pre_barrier(access.gen(), access.access_emit_info(), access.decorators(), LIR_OprFact::illegalOpr,
130132
result /* pre_val */);
131133
}
132-
post_barrier(access, access.resolved_addr(), result);
134+
if (ShenandoahCardBarrier) {
135+
post_barrier(access, access.resolved_addr(), result);
136+
}
133137
}
134138

135139
return result;

src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp

+6-8
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ void ShenandoahBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, Dec
8181

8282
void ShenandoahBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop,
8383
Register start, Register count, Register tmp, RegSet saved_regs) {
84-
if (is_oop) {
84+
if (ShenandoahCardBarrier && is_oop) {
8585
gen_write_ref_array_post_barrier(masm, decorators, start, count, tmp, saved_regs);
8686
}
8787
}
@@ -385,9 +385,7 @@ void ShenandoahBarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet d
385385
}
386386

387387
void ShenandoahBarrierSetAssembler::store_check(MacroAssembler* masm, Register obj) {
388-
if (!ShenandoahHeap::heap()->mode()->is_generational()) {
389-
return;
390-
}
388+
assert(ShenandoahCardBarrier, "Did you mean to enable ShenandoahCardBarrier?");
391389

392390
__ lsr(obj, obj, CardTable::card_shift());
393391

@@ -442,7 +440,9 @@ void ShenandoahBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet
442440
__ mov(new_val, val);
443441
}
444442
BarrierSetAssembler::store_at(masm, decorators, type, Address(tmp3, 0), val, noreg, noreg, noreg);
445-
store_check(masm, r3);
443+
if (ShenandoahCardBarrier) {
444+
store_check(masm, r3);
445+
}
446446
}
447447

448448
}
@@ -629,9 +629,7 @@ void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm,
629629

630630
void ShenandoahBarrierSetAssembler::gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators,
631631
Register start, Register count, Register scratch, RegSet saved_regs) {
632-
if (!ShenandoahHeap::heap()->mode()->is_generational()) {
633-
return;
634-
}
632+
assert(ShenandoahCardBarrier, "Did you mean to enable ShenandoahCardBarrier?");
635633

636634
Label L_loop, L_done;
637635
const Register end = count;

src/hotspot/cpu/ppc/gc/shenandoah/c1/shenandoahBarrierSetC1_ppc.cpp

+7-3
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,9 @@ LIR_Opr ShenandoahBarrierSetC1::atomic_cmpxchg_at_resolved(LIRAccess &access, LI
104104

105105
__ append(new LIR_OpShenandoahCompareAndSwap(addr, cmp_value.result(), new_value.result(), t1, t2, result));
106106

107-
post_barrier(access, access.resolved_addr(), new_value.result());
107+
if (ShenandoahCardBarrier) {
108+
post_barrier(access, access.resolved_addr(), new_value.result());
109+
}
108110

109111
if (support_IRIW_for_not_multiple_copy_atomic_cpu) {
110112
__ membar_acquire();
@@ -118,7 +120,7 @@ LIR_Opr ShenandoahBarrierSetC1::atomic_cmpxchg_at_resolved(LIRAccess &access, LI
118120

119121
LIR_Opr result = BarrierSetC1::atomic_cmpxchg_at_resolved(access, cmp_value, new_value);
120122

121-
if (access.is_oop()) {
123+
if (ShenandoahCardBarrier && access.is_oop()) {
122124
post_barrier(access, access.resolved_addr(), new_value.result());
123125
}
124126

@@ -159,7 +161,9 @@ LIR_Opr ShenandoahBarrierSetC1::atomic_xchg_at_resolved(LIRAccess &access, LIRIt
159161
pre_barrier(access.gen(), access.access_emit_info(), access.decorators(), LIR_OprFact::illegalOpr, result);
160162
}
161163

162-
post_barrier(access, access.resolved_addr(), result);
164+
if (ShenandoahCardBarrier) {
165+
post_barrier(access, access.resolved_addr(), result);
166+
}
163167
}
164168

165169
if (support_IRIW_for_not_multiple_copy_atomic_cpu) {

src/hotspot/cpu/ppc/gc/shenandoah/shenandoahBarrierSetAssembler_ppc.cpp

+4-8
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ void ShenandoahBarrierSetAssembler::arraycopy_prologue(MacroAssembler *masm, Dec
190190
void ShenandoahBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
191191
Register dst, Register count,
192192
Register preserve) {
193-
if (is_reference_type(type)) {
193+
if (ShenandoahCardBarrier && is_reference_type(type)) {
194194
__ block_comment("arraycopy_epilogue (shenandoahgc) {");
195195
gen_write_ref_array_post_barrier(masm, decorators, dst, count, preserve);
196196
__ block_comment("} arraycopy_epilogue (shenandoahgc)");
@@ -597,9 +597,7 @@ void ShenandoahBarrierSetAssembler::load_at(
597597
}
598598

599599
void ShenandoahBarrierSetAssembler::store_check(MacroAssembler* masm, Register base, RegisterOrConstant ind_or_offs, Register tmp) {
600-
if (!ShenandoahHeap::heap()->mode()->is_generational()) {
601-
return;
602-
}
600+
assert(ShenandoahCardBarrier, "Did you mean to enable ShenandoahCardBarrier?");
603601

604602
ShenandoahBarrierSet* ctbs = ShenandoahBarrierSet::barrier_set();
605603
CardTable* ct = ctbs->card_table();
@@ -641,7 +639,7 @@ void ShenandoahBarrierSetAssembler::store_at(MacroAssembler *masm, DecoratorSet
641639
preservation_level);
642640

643641
// No need for post barrier if storing NULL
644-
if (is_reference_type(type) && val != noreg) {
642+
if (ShenandoahCardBarrier && is_reference_type(type) && val != noreg) {
645643
store_check(masm, base, ind_or_offs, tmp1);
646644
}
647645
}
@@ -795,9 +793,7 @@ void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler *masm, Register b
795793

796794
void ShenandoahBarrierSetAssembler::gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators,
797795
Register addr, Register count, Register preserve) {
798-
if (!ShenandoahHeap::heap()->mode()->is_generational()) {
799-
return;
800-
}
796+
assert(ShenandoahCardBarrier, "Did you mean to enable ShenandoahCardBarrier?");
801797

802798
ShenandoahBarrierSet* bs = ShenandoahBarrierSet::barrier_set();
803799
CardTable* ct = bs->card_table();

src/hotspot/cpu/x86/gc/shenandoah/c1/shenandoahBarrierSetC1_x86.cpp

+7-3
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,16 @@ LIR_Opr ShenandoahBarrierSetC1::atomic_cmpxchg_at_resolved(LIRAccess& access, LI
8989

9090
__ append(new LIR_OpShenandoahCompareAndSwap(addr, cmp_value.result(), new_value.result(), t1, t2, result));
9191

92-
post_barrier(access, access.resolved_addr(), new_value.result());
92+
if (ShenandoahCardBarrier) {
93+
post_barrier(access, access.resolved_addr(), new_value.result());
94+
}
9395
return result;
9496
}
9597
}
9698

9799
LIR_Opr result = BarrierSetC1::atomic_cmpxchg_at_resolved(access, cmp_value, new_value);
98100

99-
if (access.is_oop()) {
101+
if (ShenandoahCardBarrier && access.is_oop()) {
100102
post_barrier(access, access.resolved_addr(), new_value.result());
101103
}
102104

@@ -130,7 +132,9 @@ LIR_Opr ShenandoahBarrierSetC1::atomic_xchg_at_resolved(LIRAccess& access, LIRIt
130132
pre_barrier(access.gen(), access.access_emit_info(), access.decorators(), LIR_OprFact::illegalOpr,
131133
result /* pre_val */);
132134
}
133-
post_barrier(access, access.resolved_addr(), result);
135+
if (ShenandoahCardBarrier) {
136+
post_barrier(access, access.resolved_addr(), result);
137+
}
134138
}
135139

136140
return result;

src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp

+12-14
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ void ShenandoahBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, Dec
122122
bool dest_uninitialized = (decorators & IS_DEST_UNINITIALIZED) != 0;
123123

124124
if (is_reference_type(type)) {
125-
if (ShenandoahHeap::heap()->mode()->is_generational()) {
125+
if (ShenandoahCardBarrier) {
126126
bool checkcast = (decorators & ARRAYCOPY_CHECKCAST) != 0;
127127
bool disjoint = (decorators & ARRAYCOPY_DISJOINT) != 0;
128128
bool obj_int = type == T_OBJECT LP64_ONLY(&& UseCompressedOops);
@@ -208,12 +208,13 @@ void ShenandoahBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, Dec
208208

209209
void ShenandoahBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
210210
Register src, Register dst, Register count) {
211-
bool checkcast = (decorators & ARRAYCOPY_CHECKCAST) != 0;
212-
bool disjoint = (decorators & ARRAYCOPY_DISJOINT) != 0;
213-
bool obj_int = type == T_OBJECT LP64_ONLY(&& UseCompressedOops);
214-
Register tmp = rax;
215211

216-
if (is_reference_type(type)) {
212+
if (ShenandoahCardBarrier && is_reference_type(type)) {
213+
bool checkcast = (decorators & ARRAYCOPY_CHECKCAST) != 0;
214+
bool disjoint = (decorators & ARRAYCOPY_DISJOINT) != 0;
215+
bool obj_int = type == T_OBJECT LP64_ONLY(&& UseCompressedOops);
216+
Register tmp = rax;
217+
217218
#ifdef _LP64
218219
if (!checkcast) {
219220
if (!obj_int) {
@@ -645,9 +646,7 @@ void ShenandoahBarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet d
645646
}
646647

647648
void ShenandoahBarrierSetAssembler::store_check(MacroAssembler* masm, Register obj) {
648-
if (!ShenandoahHeap::heap()->mode()->is_generational()) {
649-
return;
650-
}
649+
assert(ShenandoahCardBarrier, "Did you mean to enable ShenandoahCardBarrier?");
651650

652651
// Does a store check for the oop in register obj. The content of
653652
// register obj is destroyed afterwards.
@@ -730,9 +729,10 @@ void ShenandoahBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet
730729
BarrierSetAssembler::store_at(masm, decorators, type, Address(tmp1, 0), val, noreg, noreg, noreg);
731730
} else {
732731
iu_barrier(masm, val, tmp3);
733-
// TODO: store_check missing in upstream
734732
BarrierSetAssembler::store_at(masm, decorators, type, Address(tmp1, 0), val, noreg, noreg, noreg);
735-
store_check(masm, tmp1);
733+
if (ShenandoahCardBarrier) {
734+
store_check(masm, tmp1);
735+
}
736736
}
737737
NOT_LP64(imasm->restore_bcp());
738738
} else {
@@ -941,9 +941,7 @@ void ShenandoahBarrierSetAssembler::cmpxchg_oop(MacroAssembler* masm,
941941
void ShenandoahBarrierSetAssembler::gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators,
942942
Register addr, Register count,
943943
Register tmp) {
944-
if (!ShenandoahHeap::heap()->mode()->is_generational()) {
945-
return;
946-
}
944+
assert(ShenandoahCardBarrier, "Did you mean to enable ShenandoahCardBarrier?");
947945

948946
ShenandoahBarrierSet* bs = ShenandoahBarrierSet::barrier_set();
949947
CardTable* ct = bs->card_table();

src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ void ShenandoahBarrierSetC1::store_at_resolved(LIRAccess& access, LIR_Opr value)
196196
}
197197
BarrierSetC1::store_at_resolved(access, value);
198198

199-
if (access.is_oop()) {
199+
if (ShenandoahCardBarrier && access.is_oop()) {
200200
DecoratorSet decorators = access.decorators();
201201
bool is_array = (decorators & IS_ARRAY) != 0;
202202
bool on_anonymous = (decorators & ON_UNKNOWN_OOP_REF) != 0;
@@ -305,9 +305,7 @@ void ShenandoahBarrierSetC1::generate_c1_runtime_stubs(BufferBlob* buffer_blob)
305305
}
306306

307307
void ShenandoahBarrierSetC1::post_barrier(LIRAccess& access, LIR_Opr addr, LIR_Opr new_val) {
308-
if (!ShenandoahHeap::heap()->mode()->is_generational()) {
309-
return;
310-
}
308+
assert(ShenandoahCardBarrier, "Did you mean to enable ShenandoahCardBarrier?");
311309

312310
DecoratorSet decorators = access.decorators();
313311
LIRGenerator* gen = access.gen();

src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp

+21-15
Original file line numberDiff line numberDiff line change
@@ -472,9 +472,7 @@ void ShenandoahBarrierSetC2::post_barrier(GraphKit* kit,
472472
Node* val,
473473
BasicType bt,
474474
bool use_precise) const {
475-
if (!ShenandoahHeap::heap()->mode()->is_generational()) {
476-
return;
477-
}
475+
assert(ShenandoahCardBarrier, "Did you mean to enable ShenandoahCardBarrier?");
478476

479477
// No store check needed if we're storing a null.
480478
if (val != nullptr && val->is_Con()) {
@@ -604,11 +602,13 @@ Node* ShenandoahBarrierSetC2::store_at_resolved(C2Access& access, C2AccessValue&
604602

605603
Node* result = BarrierSetC2::store_at_resolved(access, val);
606604

607-
bool anonymous = (decorators & ON_UNKNOWN_OOP_REF) != 0;
608-
bool is_array = (decorators & IS_ARRAY) != 0;
609-
bool use_precise = is_array || anonymous;
610-
post_barrier(kit, kit->control(), access.raw_access(), access.base(),
611-
adr, adr_idx, val.node(), access.type(), use_precise);
605+
if (ShenandoahCardBarrier) {
606+
const bool anonymous = (decorators & ON_UNKNOWN_OOP_REF) != 0;
607+
const bool is_array = (decorators & IS_ARRAY) != 0;
608+
const bool use_precise = is_array || anonymous;
609+
post_barrier(kit, kit->control(), access.raw_access(), access.base(),
610+
adr, adr_idx, val.node(), access.type(), use_precise);
611+
}
612612
return result;
613613
} else {
614614
assert(access.is_opt_access(), "only for optimization passes");
@@ -734,8 +734,10 @@ Node* ShenandoahBarrierSetC2::atomic_cmpxchg_val_at_resolved(C2AtomicParseAccess
734734
}
735735
#endif
736736
load_store = kit->gvn().transform(new ShenandoahLoadReferenceBarrierNode(nullptr, load_store, access.decorators()));
737-
post_barrier(kit, kit->control(), access.raw_access(), access.base(),
738-
access.addr().node(), access.alias_idx(), new_val, T_OBJECT, true);
737+
if (ShenandoahCardBarrier) {
738+
post_barrier(kit, kit->control(), access.raw_access(), access.base(),
739+
access.addr().node(), access.alias_idx(), new_val, T_OBJECT, true);
740+
}
739741
return load_store;
740742
}
741743
return BarrierSetC2::atomic_cmpxchg_val_at_resolved(access, expected_val, new_val, value_type);
@@ -791,8 +793,10 @@ Node* ShenandoahBarrierSetC2::atomic_cmpxchg_bool_at_resolved(C2AtomicParseAcces
791793
}
792794
access.set_raw_access(load_store);
793795
pin_atomic_op(access);
794-
post_barrier(kit, kit->control(), access.raw_access(), access.base(),
795-
access.addr().node(), access.alias_idx(), new_val, T_OBJECT, true);
796+
if (ShenandoahCardBarrier) {
797+
post_barrier(kit, kit->control(), access.raw_access(), access.base(),
798+
access.addr().node(), access.alias_idx(), new_val, T_OBJECT, true);
799+
}
796800
return load_store;
797801
}
798802
return BarrierSetC2::atomic_cmpxchg_bool_at_resolved(access, expected_val, new_val, value_type);
@@ -809,8 +813,10 @@ Node* ShenandoahBarrierSetC2::atomic_xchg_at_resolved(C2AtomicParseAccess& acces
809813
shenandoah_write_barrier_pre(kit, false /* do_load */,
810814
nullptr, nullptr, max_juint, nullptr, nullptr,
811815
result /* pre_val */, T_OBJECT);
812-
post_barrier(kit, kit->control(), access.raw_access(), access.base(),
813-
access.addr().node(), access.alias_idx(), val, T_OBJECT, true);
816+
if (ShenandoahCardBarrier) {
817+
post_barrier(kit, kit->control(), access.raw_access(), access.base(),
818+
access.addr().node(), access.alias_idx(), val, T_OBJECT, true);
819+
}
814820
}
815821
return result;
816822
}
@@ -1013,7 +1019,7 @@ void ShenandoahBarrierSetC2::eliminate_gc_barrier(PhaseMacroExpand* macro, Node*
10131019
if (is_shenandoah_wb_pre_call(node)) {
10141020
shenandoah_eliminate_wb_pre(node, &macro->igvn());
10151021
}
1016-
if (node->Opcode() == Op_CastP2X && ShenandoahHeap::heap()->mode()->is_generational()) {
1022+
if (ShenandoahCardBarrier && node->Opcode() == Op_CastP2X) {
10171023
Node* shift = node->unique_out();
10181024
Node* addp = shift->unique_out();
10191025
for (DUIterator_Last jmin, j = addp->last_outs(jmin); j >= jmin; --j) {

src/hotspot/share/gc/shenandoah/mode/shenandoahGenerationalMode.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ void ShenandoahGenerationalMode::initialize_flags() const {
3636
vm_exit_during_initialization("Shenandoah Generational GC is not supported on this platform.");
3737
#endif
3838

39+
// Exit if the user has asked ShenandoahCardBarrier to be disabled
40+
if (!FLAG_IS_DEFAULT(ShenandoahCardBarrier)) {
41+
SHENANDOAH_CHECK_FLAG_SET(ShenandoahCardBarrier);
42+
}
43+
44+
// Enable card-marking post-write barrier for tracking old to young pointers
45+
FLAG_SET_DEFAULT(ShenandoahCardBarrier, true);
46+
3947
if (ClassUnloading) {
4048
FLAG_SET_DEFAULT(ShenandoahSuspendibleWorkers, true);
4149
FLAG_SET_DEFAULT(VerifyBeforeExit, false);
@@ -55,4 +63,5 @@ void ShenandoahGenerationalMode::initialize_flags() const {
5563
SHENANDOAH_CHECK_FLAG_SET(ShenandoahSATBBarrier);
5664
SHENANDOAH_CHECK_FLAG_SET(ShenandoahCASBarrier);
5765
SHENANDOAH_CHECK_FLAG_SET(ShenandoahCloneBarrier);
66+
SHENANDOAH_CHECK_FLAG_SET(ShenandoahCardBarrier);
5867
}

src/hotspot/share/gc/shenandoah/mode/shenandoahIUMode.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,5 @@ void ShenandoahIUMode::initialize_flags() const {
5858
SHENANDOAH_CHECK_FLAG_SET(ShenandoahCloneBarrier);
5959
SHENANDOAH_CHECK_FLAG_SET(ShenandoahNMethodBarrier);
6060
SHENANDOAH_CHECK_FLAG_SET(ShenandoahStackWatermarkBarrier);
61+
SHENANDOAH_CHECK_FLAG_UNSET(ShenandoahCardBarrier);
6162
}

src/hotspot/share/gc/shenandoah/mode/shenandoahMode.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#ifndef SHARE_GC_SHENANDOAH_MODE_SHENANDOAHMODE_HPP
2727
#define SHARE_GC_SHENANDOAH_MODE_SHENANDOAHMODE_HPP
2828

29+
#include "gc/shared/gc_globals.hpp"
2930
#include "memory/allocation.hpp"
3031
#include "runtime/java.hpp"
3132
#include "utilities/formatBuffer.hpp"

src/hotspot/share/gc/shenandoah/mode/shenandoahPassiveMode.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ void ShenandoahPassiveMode::initialize_flags() const {
5353
SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahCloneBarrier);
5454
SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahNMethodBarrier);
5555
SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahStackWatermarkBarrier);
56+
SHENANDOAH_ERGO_DISABLE_FLAG(ShenandoahCardBarrier);
5657

5758
// Final configuration checks
5859
// No barriers are required to run.

src/hotspot/share/gc/shenandoah/mode/shenandoahSATBMode.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,6 @@ void ShenandoahSATBMode::initialize_flags() const {
4646
SHENANDOAH_CHECK_FLAG_SET(ShenandoahCloneBarrier);
4747
SHENANDOAH_CHECK_FLAG_SET(ShenandoahNMethodBarrier);
4848
SHENANDOAH_CHECK_FLAG_SET(ShenandoahStackWatermarkBarrier);
49+
assert(strcmp(ShenandoahGCMode, "generational") != 0, "Error");
50+
SHENANDOAH_CHECK_FLAG_UNSET(ShenandoahCardBarrier);
4951
}

src/hotspot/share/gc/shenandoah/shenandoahArguments.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ void ShenandoahArguments::initialize() {
5151
FLAG_SET_DEFAULT(ShenandoahLoadRefBarrier, false);
5252
FLAG_SET_DEFAULT(ShenandoahIUBarrier, false);
5353
FLAG_SET_DEFAULT(ShenandoahCASBarrier, false);
54+
FLAG_SET_DEFAULT(ShenandoahCardBarrier, false);
5455
FLAG_SET_DEFAULT(ShenandoahCloneBarrier, false);
5556

5657
FLAG_SET_DEFAULT(ShenandoahVerifyOptoBarriers, false);

0 commit comments

Comments
 (0)