4949
5050public class CardTableBarrierSet extends BarrierSet {
5151 private final ResolvedJavaType objectArrayType ;
52- private final boolean useDeferredInitBarriers ;
5352
54- public CardTableBarrierSet (ResolvedJavaType objectArrayType , boolean useDeferredInitBarriers ) {
55- super (GraphState .StageFlag .MID_TIER_BARRIER_ADDITION );
53+ public CardTableBarrierSet (ResolvedJavaType objectArrayType , boolean hasDeferredInitBarriers ) {
54+ super (GraphState .StageFlag .MID_TIER_BARRIER_ADDITION , hasDeferredInitBarriers );
5655 this .objectArrayType = objectArrayType ;
57- this .useDeferredInitBarriers = useDeferredInitBarriers ;
5856 }
5957
6058 @ Override
@@ -82,58 +80,64 @@ public BarrierType readWriteBarrier(ValueNode object, ValueNode value) {
8280
8381 @ Override
8482 public void addBarriers (FixedAccessNode n , CoreProviders context ) {
85- if (n instanceof ReadNode ) {
86- // nothing to do
87- } else if (n instanceof WriteNode write ) {
88- addWriteBarrier (write , write .value (), context );
89- } else if (n instanceof LoweredAtomicReadAndWriteNode atomic ) {
90- addWriteBarrier (atomic , atomic .getNewValue (), context );
91- } else if (n instanceof AbstractCompareAndSwapNode cmpSwap ) {
92- addWriteBarrier (cmpSwap , cmpSwap .getNewValue (), context );
93- } else if (n instanceof ArrayRangeWrite rangeWrite ) {
94- addArrayRangeBarriers (rangeWrite , context );
95- } else {
96- GraalError .guarantee (n .getBarrierType () == BarrierType .NONE , "missed a node that requires a GC barrier: %s" , n .getClass ());
83+ switch (n ) {
84+ case ReadNode readNode -> {
85+ // nothing to do
86+ }
87+ case WriteNode write -> addWriteBarrier (write , write .value (), context );
88+ case LoweredAtomicReadAndWriteNode atomic -> addWriteBarrier (atomic , atomic .getNewValue (), context );
89+ case AbstractCompareAndSwapNode cmpSwap -> addWriteBarrier (cmpSwap , cmpSwap .getNewValue (), context );
90+ case ArrayRangeWrite rangeWrite -> addArrayRangeBarriers (rangeWrite , context );
91+ default ->
92+ GraalError .guarantee (n .getBarrierType () == BarrierType .NONE , "missed a node that requires a GC barrier: %s" , n .getClass ());
9793 }
9894 }
9995
10096 public boolean needsBarrier (FixedAccessNode n ) {
101- if (n instanceof ReadNode ) {
102- return false ;
103- } else if (n instanceof WriteNode ) {
104- WriteNode write = (WriteNode ) n ;
105- return needsWriteBarrier (write , write .value ());
106- } else if (n instanceof LoweredAtomicReadAndWriteNode ) {
107- LoweredAtomicReadAndWriteNode atomic = (LoweredAtomicReadAndWriteNode ) n ;
108- return needsWriteBarrier (atomic , atomic .getNewValue ());
109- } else if (n instanceof AbstractCompareAndSwapNode ) {
110- AbstractCompareAndSwapNode cmpSwap = (AbstractCompareAndSwapNode ) n ;
111- return needsWriteBarrier (cmpSwap , cmpSwap .getNewValue ());
112- } else if (n instanceof ArrayRangeWrite ) {
113- return arrayRangeWriteRequiresBarrier ((ArrayRangeWrite ) n );
114- } else {
115- GraalError .guarantee (n .getBarrierType () == BarrierType .NONE , "missed a node that requires a GC barrier: %s" , n .getClass ());
116- return false ;
97+ switch (n ) {
98+ case ReadNode readNode -> {
99+ return false ;
100+ }
101+ case WriteNode write -> {
102+ return needsWriteBarrier (write , write .value ());
103+ }
104+ case LoweredAtomicReadAndWriteNode atomic -> {
105+ return needsWriteBarrier (atomic , atomic .getNewValue ());
106+ }
107+ case AbstractCompareAndSwapNode cmpSwap -> {
108+ return needsWriteBarrier (cmpSwap , cmpSwap .getNewValue ());
109+ }
110+ case ArrayRangeWrite arrayRangeWrite -> {
111+ return arrayRangeWriteRequiresBarrier (arrayRangeWrite );
112+ }
113+ default -> {
114+ GraalError .guarantee (n .getBarrierType () == BarrierType .NONE , "missed a node that requires a GC barrier: %s" , n .getClass ());
115+ return false ;
116+ }
117117 }
118118 }
119119
120120 public boolean hasBarrier (FixedAccessNode n ) {
121- if (n instanceof ReadNode ) {
122- return false ;
123- } else if (n instanceof WriteNode ) {
124- WriteNode write = (WriteNode ) n ;
125- return hasWriteBarrier (write );
126- } else if (n instanceof LoweredAtomicReadAndWriteNode ) {
127- LoweredAtomicReadAndWriteNode atomic = (LoweredAtomicReadAndWriteNode ) n ;
128- return hasWriteBarrier (atomic );
129- } else if (n instanceof AbstractCompareAndSwapNode ) {
130- AbstractCompareAndSwapNode cmpSwap = (AbstractCompareAndSwapNode ) n ;
131- return hasWriteBarrier (cmpSwap );
132- } else if (n instanceof ArrayRangeWrite ) {
133- return hasWriteBarrier ((ArrayRangeWrite ) n );
134- } else {
135- GraalError .guarantee (n .getBarrierType () == BarrierType .NONE , "missed a node that requires a GC barrier: %s" , n .getClass ());
136- return false ;
121+ switch (n ) {
122+ case ReadNode readNode -> {
123+ return false ;
124+ }
125+ case WriteNode write -> {
126+ return hasWriteBarrier (write );
127+ }
128+ case LoweredAtomicReadAndWriteNode atomic -> {
129+ return hasWriteBarrier (atomic );
130+ }
131+ case AbstractCompareAndSwapNode cmpSwap -> {
132+ return hasWriteBarrier (cmpSwap );
133+ }
134+ case ArrayRangeWrite arrayRangeWrite -> {
135+ return hasWriteBarrier (arrayRangeWrite );
136+ }
137+ default -> {
138+ GraalError .guarantee (n .getBarrierType () == BarrierType .NONE , "missed a node that requires a GC barrier: %s" , n .getClass ());
139+ return false ;
140+ }
137141 }
138142 }
139143
@@ -164,17 +168,11 @@ private void addWriteBarrier(FixedAccessNode node, ValueNode writtenValue, CoreP
164168 public boolean needsWriteBarrier (FixedAccessNode node , ValueNode writtenValue ) {
165169 assert !(node instanceof ArrayRangeWrite ) : Assertions .errorMessageContext ("node" , node , "val" , writtenValue );
166170 BarrierType barrierType = node .getBarrierType ();
167- switch (barrierType ) {
168- case NONE :
169- return false ;
170- case FIELD :
171- case AS_NO_KEEPALIVE_WRITE :
172- case ARRAY :
173- case UNKNOWN :
174- return writeRequiresBarrier (node , writtenValue );
175- default :
176- throw new GraalError ("unexpected barrier type: " + barrierType );
177- }
171+ return switch (barrierType ) {
172+ case NONE -> false ;
173+ case FIELD , AS_NO_KEEPALIVE_WRITE , ARRAY , UNKNOWN -> writeRequiresBarrier (node , writtenValue );
174+ default -> throw new GraalError ("unexpected barrier type: " + barrierType );
175+ };
178176 }
179177
180178 @ SuppressWarnings ("unused" )
@@ -185,14 +183,14 @@ protected boolean writeRequiresBarrier(FixedAccessNode node, ValueNode writtenVa
185183 if (StampTool .isPointerAlwaysNull (writtenValue )) {
186184 return false ;
187185 }
188- return !useDeferredInitBarriers || !isWriteToNewObject (node );
186+ return !hasDeferredInitBarriers || !isWriteToNewObject (node );
189187 }
190188
191189 protected boolean arrayRangeWriteRequiresBarrier (ArrayRangeWrite write ) {
192190 if (!write .writesObjectArray ()) {
193191 return false ;
194192 }
195- return !useDeferredInitBarriers || !isWriteToNewObject (write .asFixedAccessNode ());
193+ return !hasDeferredInitBarriers || !isWriteToNewObject (write .asFixedAccessNode ());
196194 }
197195
198196 private static boolean hasWriteBarrier (FixedAccessNode node ) {
0 commit comments