Skip to content

Commit c5cb475

Browse files
committed
Promote useDeferredInitBarriers to BarrierSet and perform a few intellij cleanups
1 parent b4073b7 commit c5cb475

File tree

6 files changed

+89
-89
lines changed

6 files changed

+89
-89
lines changed

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/gc/BarrierSet.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,22 +67,32 @@
6767
public abstract class BarrierSet {
6868

6969
/**
70-
* The stage as which barriers should be inserted. May be {@code null} if no barriers are
70+
* The stage at which barriers should be inserted. May be {@code null} if no barriers are
7171
* required, {@link jdk.graal.compiler.nodes.GraphState.StageFlag#MID_TIER_BARRIER_ADDITION} or
7272
* {@link jdk.graal.compiler.nodes.GraphState.StageFlag#LOW_TIER_BARRIER_ADDITION}.
7373
*
7474
* @see jdk.graal.compiler.phases.common.WriteBarrierAdditionPhase
7575
*/
7676
private final GraphState.StageFlag barrierStage;
7777

78-
protected BarrierSet(GraphState.StageFlag barrierStage) {
78+
protected final boolean hasDeferredInitBarriers;
79+
80+
protected BarrierSet(GraphState.StageFlag barrierStage, boolean hasDeferredInitBarriers) {
7981
assert barrierStage == null || barrierStage == GraphState.StageFlag.MID_TIER_BARRIER_ADDITION || barrierStage == GraphState.StageFlag.LOW_TIER_BARRIER_ADDITION : barrierStage;
8082
this.barrierStage = barrierStage;
83+
this.hasDeferredInitBarriers = hasDeferredInitBarriers;
84+
}
85+
86+
/**
87+
* Return {@code true} if the last allocated object can elide all barriers.
88+
*/
89+
public boolean hasDeferredInitBarriers() {
90+
return hasDeferredInitBarriers;
8191
}
8292

8393
/**
84-
* Checks whether writing to {@link LocationIdentity#INIT_LOCATION} can be performed with an
85-
* intervening allocation.
94+
* Returns the barrier type to use when writing to {@link LocationIdentity#INIT_LOCATION} after
95+
* an intervening allocation.
8696
*/
8797
public BarrierType postAllocationInitBarrier(BarrierType original) {
8898
return original;

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/gc/CardTableBarrierSet.java

Lines changed: 59 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,10 @@
4949

5050
public 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) {

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/gc/G1BarrierSet.java

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,11 @@
4949
public class G1BarrierSet extends BarrierSet {
5050
private final ResolvedJavaType objectArrayType;
5151
private final ResolvedJavaField referentField;
52-
private final boolean useDeferredInitBarriers;
5352

54-
protected G1BarrierSet(ResolvedJavaType objectArrayType, ResolvedJavaField referentField, boolean useDeferredInitBarriers) {
55-
super(GraphState.StageFlag.MID_TIER_BARRIER_ADDITION);
53+
protected G1BarrierSet(ResolvedJavaType objectArrayType, ResolvedJavaField referentField, boolean hasDeferredInitBarriers) {
54+
super(GraphState.StageFlag.MID_TIER_BARRIER_ADDITION, hasDeferredInitBarriers);
5655
this.objectArrayType = objectArrayType;
5756
this.referentField = referentField;
58-
this.useDeferredInitBarriers = useDeferredInitBarriers;
5957
}
6058

6159
@Override
@@ -98,21 +96,15 @@ public BarrierType readWriteBarrier(ValueNode object, ValueNode value) {
9896

9997
@Override
10098
public void addBarriers(FixedAccessNode n, CoreProviders context) {
101-
if (n instanceof ReadNode) {
102-
addReadNodeBarriers((ReadNode) n);
103-
} else if (n instanceof WriteNode) {
104-
WriteNode write = (WriteNode) n;
105-
addWriteBarriers(write, write.value(), null, true);
106-
} else if (n instanceof LoweredAtomicReadAndWriteNode) {
107-
LoweredAtomicReadAndWriteNode atomic = (LoweredAtomicReadAndWriteNode) n;
108-
addWriteBarriers(atomic, atomic.getNewValue(), null, true);
109-
} else if (n instanceof AbstractCompareAndSwapNode) {
110-
AbstractCompareAndSwapNode cmpSwap = (AbstractCompareAndSwapNode) n;
111-
addWriteBarriers(cmpSwap, cmpSwap.getNewValue(), cmpSwap.getExpectedValue(), false);
112-
} else if (n instanceof ArrayRangeWrite) {
113-
addArrayRangeBarriers((ArrayRangeWrite) n);
114-
} else {
115-
GraalError.guarantee(n.getBarrierType() == BarrierType.NONE, "missed a node that requires a GC barrier: %s", n.getClass());
99+
switch (n) {
100+
case ReadNode readNode -> addReadNodeBarriers(readNode);
101+
case WriteNode write -> addWriteBarriers(write, write.value(), null, true);
102+
case LoweredAtomicReadAndWriteNode atomic -> addWriteBarriers(atomic, atomic.getNewValue(), null, true);
103+
case AbstractCompareAndSwapNode cmpSwap ->
104+
addWriteBarriers(cmpSwap, cmpSwap.getNewValue(), cmpSwap.getExpectedValue(), false);
105+
case ArrayRangeWrite arrayRangeWrite -> addArrayRangeBarriers(arrayRangeWrite);
106+
default ->
107+
GraalError.guarantee(n.getBarrierType() == BarrierType.NONE, "missed a node that requires a GC barrier: %s", n.getClass());
116108
}
117109
}
118110

@@ -184,7 +176,7 @@ protected boolean writeRequiresPostBarrier(FixedAccessNode node, ValueNode writt
184176
if (StampTool.isPointerAlwaysNull(writtenValue)) {
185177
return false;
186178
}
187-
return !useDeferredInitBarriers || !isWriteToNewObject(node);
179+
return !hasDeferredInitBarriers || !isWriteToNewObject(node);
188180
}
189181

190182
private void addArrayRangeBarriers(ArrayRangeWrite write) {
@@ -208,7 +200,7 @@ protected boolean arrayRangeWriteRequiresPostBarrier(ArrayRangeWrite write) {
208200
if (!write.writesObjectArray()) {
209201
return false;
210202
}
211-
return !useDeferredInitBarriers || !isWriteToNewObject(write.asFixedAccessNode());
203+
return !hasDeferredInitBarriers || !isWriteToNewObject(write.asFixedAccessNode());
212204
}
213205

214206
private void addG1PreWriteBarrier(FixedAccessNode node, AddressNode address, ValueNode value, boolean doLoad, StructuredGraph graph) {

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/gc/NoBarrierSet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
public class NoBarrierSet extends BarrierSet {
3939

4040
public NoBarrierSet() {
41-
super(null);
41+
super(null, false);
4242
}
4343

4444
@Override

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/gc/ZBarrierSet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public class ZBarrierSet extends BarrierSet {
6565
private final ResolvedJavaField referentField;
6666

6767
public ZBarrierSet(ResolvedJavaType objectArrayType, ResolvedJavaField referentField) {
68-
super(GraphState.StageFlag.LOW_TIER_BARRIER_ADDITION);
68+
super(GraphState.StageFlag.LOW_TIER_BARRIER_ADDITION, false);
6969
this.referentField = referentField;
7070
this.objectArrayType = objectArrayType;
7171
}

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/gc/shenandoah/ShenandoahBarrierSet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public class ShenandoahBarrierSet extends BarrierSet {
8787
protected boolean useCardBarrier;
8888

8989
public ShenandoahBarrierSet(ResolvedJavaType objectArrayType, ResolvedJavaField referentField) {
90-
super(GraphState.StageFlag.LOW_TIER_BARRIER_ADDITION);
90+
super(GraphState.StageFlag.LOW_TIER_BARRIER_ADDITION, false);
9191
this.referentField = referentField;
9292
this.objectArrayType = objectArrayType;
9393
this.useLoadRefBarrier = true;

0 commit comments

Comments
 (0)