Skip to content

Commit beb4a37

Browse files
author
Christian Wimmer
committed
[GR-20416] Refactor allocation snippets.
PullRequest: graal/7061
2 parents 68ba352 + 09b81c2 commit beb4a37

File tree

7 files changed

+36
-29
lines changed

7 files changed

+36
-29
lines changed

compiler/src/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/HotSpotAllocationSnippets.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ protected final int getMinimalBulkZeroingSize() {
474474
}
475475

476476
@Override
477-
protected final void initializeObjectHeader(Word memory, Word hub, Word prototypeMarkWord, boolean isArray) {
477+
public final void initializeObjectHeader(Word memory, Word hub, Word prototypeMarkWord, boolean isArray) {
478478
KlassPointer klassPtr = KlassPointer.fromWord(hub);
479479
Word markWord = prototypeMarkWord;
480480
if (!isArray && HotSpotReplacementsUtil.useBiasedLocking(INJECTED_VMCONFIG)) {
@@ -490,7 +490,7 @@ protected final int instanceHeaderSize() {
490490
}
491491

492492
@Override
493-
protected final int arrayLengthOffset() {
493+
public final int arrayLengthOffset() {
494494
return HotSpotReplacementsUtil.arrayLengthOffset(INJECTED_VMCONFIG);
495495
}
496496

@@ -500,7 +500,7 @@ protected final int objectAlignment() {
500500
}
501501

502502
@Override
503-
protected final boolean useTLAB() {
503+
public final boolean useTLAB() {
504504
return HotSpotReplacementsUtil.useTLAB(INJECTED_VMCONFIG);
505505
}
506506

@@ -516,7 +516,7 @@ protected final boolean shouldAllocateInTLAB(UnsignedWord allocationSize, boolea
516516
}
517517

518518
@Override
519-
protected final Word getTLABInfo() {
519+
public final Word getTLABInfo() {
520520
return getThread();
521521
}
522522

@@ -525,17 +525,17 @@ private Word getThread() {
525525
}
526526

527527
@Override
528-
protected final Word readTlabEnd(Word thread) {
528+
public final Word readTlabEnd(Word thread) {
529529
return HotSpotReplacementsUtil.readTlabEnd(thread);
530530
}
531531

532532
@Override
533-
protected final Word readTlabTop(Word thread) {
533+
public final Word readTlabTop(Word thread) {
534534
return HotSpotReplacementsUtil.readTlabTop(thread);
535535
}
536536

537537
@Override
538-
protected final void writeTlabTop(Word thread, Word newTop) {
538+
public final void writeTlabTop(Word thread, Word newTop) {
539539
HotSpotReplacementsUtil.writeTlabTop(thread, newTop);
540540
}
541541

compiler/src/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/StoreIndexedNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public void virtualize(VirtualizerTool tool) {
104104
VirtualArrayNode virtual = (VirtualArrayNode) alias;
105105
if (idx >= 0 && idx < virtual.entryCount()) {
106106
ResolvedJavaType componentType = virtual.type().getComponentType();
107-
if (componentType.isPrimitive() || StampTool.isPointerAlwaysNull(value) || componentType.isJavaLangObject() ||
107+
if (elementKind.isPrimitive() || StampTool.isPointerAlwaysNull(value) || componentType.isJavaLangObject() ||
108108
(StampTool.typeReferenceOrNull(value) != null && componentType.isAssignableFrom(StampTool.typeOrNull(value)))) {
109109
tool.setVirtualEntry(virtual, idx, value());
110110
tool.delete();

compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/AllocationSnippets.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ protected Object formatArray(Word hub,
285285
return memory.toObjectNonNull();
286286
}
287287

288-
protected void emitPrefetchAllocate(Word address, boolean isArray) {
288+
public void emitPrefetchAllocate(Word address, boolean isArray) {
289289
if (getPrefetchStyle() > 0) {
290290
// Insert a prefetch for each allocation only on the fast-path
291291
// Generate several prefetch instructions.
@@ -308,21 +308,21 @@ protected void emitPrefetchAllocate(Word address, boolean isArray) {
308308

309309
protected abstract int getPrefetchDistance();
310310

311-
protected abstract boolean useTLAB();
311+
public abstract boolean useTLAB();
312312

313313
protected abstract boolean shouldAllocateInTLAB(UnsignedWord allocationSize, boolean isArray);
314314

315-
protected abstract Word getTLABInfo();
315+
public abstract Word getTLABInfo();
316316

317-
protected abstract Word readTlabTop(Word tlabInfo);
317+
public abstract Word readTlabTop(Word tlabInfo);
318318

319-
protected abstract Word readTlabEnd(Word tlabInfo);
319+
public abstract Word readTlabEnd(Word tlabInfo);
320320

321-
protected abstract void writeTlabTop(Word tlabInfo, Word newTop);
321+
public abstract void writeTlabTop(Word tlabInfo, Word newTop);
322322

323323
protected abstract int instanceHeaderSize();
324324

325-
protected abstract void initializeObjectHeader(Word memory, Word hub, Word prototypeMarkWord, boolean isArray);
325+
public abstract void initializeObjectHeader(Word memory, Word hub, Word prototypeMarkWord, boolean isArray);
326326

327327
protected abstract Object callNewInstanceStub(Word hub);
328328

@@ -336,7 +336,7 @@ protected void emitPrefetchAllocate(Word address, boolean isArray) {
336336

337337
protected abstract Object verifyOop(Object obj);
338338

339-
protected abstract int arrayLengthOffset();
339+
public abstract int arrayLengthOffset();
340340

341341
protected abstract int objectAlignment();
342342

compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/DefaultJavaLoweringProvider.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@
166166
import jdk.vm.ci.meta.DeoptimizationReason;
167167
import jdk.vm.ci.meta.JavaConstant;
168168
import jdk.vm.ci.meta.JavaKind;
169+
import jdk.vm.ci.meta.JavaType;
169170
import jdk.vm.ci.meta.MetaAccessProvider;
170171
import jdk.vm.ci.meta.ResolvedJavaField;
171172
import jdk.vm.ci.meta.ResolvedJavaMethod;
@@ -458,7 +459,11 @@ public AddressNode createFieldAddress(StructuredGraph graph, ValueNode object, R
458459
}
459460

460461
public final JavaKind getStorageKind(ResolvedJavaField field) {
461-
return metaAccessExtensionProvider.getStorageKind(field.getType());
462+
return getStorageKind(field.getType());
463+
}
464+
465+
public final JavaKind getStorageKind(JavaType type) {
466+
return metaAccessExtensionProvider.getStorageKind(type);
462467
}
463468

464469
protected void lowerLoadFieldNode(LoadFieldNode loadField, LoweringTool tool) {

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/graal/GenScavengeAllocationSnippets.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.graalvm.compiler.replacements.SnippetTemplate.Arguments;
4343
import org.graalvm.compiler.replacements.SnippetTemplate.SnippetInfo;
4444
import org.graalvm.compiler.word.Word;
45+
import org.graalvm.nativeimage.ImageSingletons;
4546
import org.graalvm.word.UnsignedWord;
4647
import org.graalvm.word.WordFactory;
4748

@@ -71,7 +72,7 @@ public static void registerForeignCalls(Providers providers, SubstrateForeignCal
7172

7273
public static void registerLowering(OptionValues options, Iterable<DebugHandlersFactory> factories, Providers providers, SnippetReflectionProvider snippetReflection,
7374
Map<Class<? extends Node>, NodeLoweringProvider<?>> lowerings) {
74-
GenScavengeAllocationSnippets snippetReceiver = new GenScavengeAllocationSnippets();
75+
SubstrateAllocationSnippets snippetReceiver = ImageSingletons.lookup(SubstrateAllocationSnippets.class);
7576
GenScavengeAllocationSnippets.Templates allocationSnippets = new GenScavengeAllocationSnippets.Templates(
7677
snippetReceiver, options, factories, SnippetCounter.Group.NullFactory, providers, snippetReflection);
7778
allocationSnippets.registerLowerings(lowerings);
@@ -104,12 +105,12 @@ private static Word encodeAsObjectHeader(DynamicHub hub, boolean rememberedSet,
104105
}
105106

106107
@Override
107-
protected void initializeObjectHeader(Word memory, Word objectHeader, Word prototypeMarkWord, boolean isArray) {
108+
public void initializeObjectHeader(Word memory, Word objectHeader, Word prototypeMarkWord, boolean isArray) {
108109
ObjectHeaderImpl.initializeHeaderOfNewObject(memory, objectHeader, isArray);
109110
}
110111

111112
@Override
112-
protected boolean useTLAB() {
113+
public boolean useTLAB() {
113114
return true;
114115
}
115116

@@ -119,22 +120,22 @@ protected boolean shouldAllocateInTLAB(UnsignedWord size, boolean isArray) {
119120
}
120121

121122
@Override
122-
protected Word getTLABInfo() {
123+
public Word getTLABInfo() {
123124
return (Word) ThreadLocalAllocation.regularTLAB.getAddress();
124125
}
125126

126127
@Override
127-
protected Word readTlabTop(Word tlabInfo) {
128+
public Word readTlabTop(Word tlabInfo) {
128129
return ((Descriptor) tlabInfo).getAllocationTop(TLAB_TOP_IDENTITY);
129130
}
130131

131132
@Override
132-
protected Word readTlabEnd(Word tlabInfo) {
133+
public Word readTlabEnd(Word tlabInfo) {
133134
return ((Descriptor) tlabInfo).getAllocationEnd(TLAB_END_IDENTITY);
134135
}
135136

136137
@Override
137-
protected void writeTlabTop(Word tlabInfo, Word newTop) {
138+
public void writeTlabTop(Word tlabInfo, Word newTop) {
138139
((Descriptor) tlabInfo).setAllocationTop(newTop, TLAB_TOP_IDENTITY);
139140
}
140141

@@ -152,7 +153,7 @@ public static class Templates extends SubstrateAllocationSnippets.Templates {
152153
private final SnippetInfo formatObject;
153154
private final SnippetInfo formatArray;
154155

155-
Templates(GenScavengeAllocationSnippets receiver, OptionValues options, Iterable<DebugHandlersFactory> factories,
156+
Templates(SubstrateAllocationSnippets receiver, OptionValues options, Iterable<DebugHandlersFactory> factories,
156157
SnippetCounter.Group.Factory groupFactory, Providers providers, SnippetReflectionProvider snippetReflection) {
157158
super(receiver, options, factories, groupFactory, providers, snippetReflection);
158159

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/graal/HeapFeature.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import com.oracle.svm.core.graal.meta.RuntimeConfiguration;
5050
import com.oracle.svm.core.graal.meta.SubstrateForeignCallsProvider;
5151
import com.oracle.svm.core.graal.snippets.NodeLoweringProvider;
52+
import com.oracle.svm.core.graal.snippets.SubstrateAllocationSnippets;
5253
import com.oracle.svm.core.heap.Heap;
5354
import com.oracle.svm.core.image.ImageHeapLayouter;
5455
import com.oracle.svm.core.jdk.RuntimeFeature;
@@ -71,6 +72,7 @@ public List<Class<? extends Feature>> getRequiredFeatures() {
7172
@Override
7273
public void afterRegistration(AfterRegistrationAccess access) {
7374
ImageSingletons.add(Heap.class, new HeapImpl(access));
75+
ImageSingletons.add(SubstrateAllocationSnippets.class, new GenScavengeAllocationSnippets());
7476

7577
ManagementSupport managementSupport = ManagementSupport.getSingleton();
7678
managementSupport.addPlatformManagedObjectSingleton(java.lang.management.MemoryMXBean.class, new HeapImplMemoryMXBean());

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/graal/snippets/SubstrateAllocationSnippets.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ private static Object newMultiArrayRecursion(DynamicHub hub, int rank, Word dime
201201
return result;
202202
}
203203

204-
private static DynamicHub checkHub(DynamicHub hub) {
204+
public static DynamicHub checkHub(DynamicHub hub) {
205205
if (probability(LUDICROUSLY_FAST_PATH_PROBABILITY, hub != null)) {
206206
DynamicHub nonNullHub = (DynamicHub) PiNode.piCastNonNull(hub, SnippetAnchorNode.anchor());
207207
if (probability(LUDICROUSLY_FAST_PATH_PROBABILITY, nonNullHub.isInstantiated())) {
@@ -283,7 +283,6 @@ protected final int getPrefetchStyle() {
283283
return SubstrateOptions.AllocatePrefetchStyle.getValue();
284284
}
285285

286-
@Fold
287286
@Override
288287
protected int getPrefetchLines(boolean isArray) {
289288
if (isArray) {
@@ -330,7 +329,7 @@ protected final Object verifyOop(Object obj) {
330329
}
331330

332331
@Override
333-
protected final int arrayLengthOffset() {
332+
public final int arrayLengthOffset() {
334333
return ConfigurationValues.getObjectLayout().getArrayLengthOffset();
335334
}
336335

@@ -343,7 +342,7 @@ protected static int getArrayBaseOffset(int layoutEncoding) {
343342
return (int) LayoutEncoding.getArrayBaseOffset(layoutEncoding).rawValue();
344343
}
345344

346-
private static Word encodeAsTLABObjectHeader(DynamicHub hub) {
345+
public static Word encodeAsTLABObjectHeader(DynamicHub hub) {
347346
return Heap.getHeap().getObjectHeader().encodeAsTLABObjectHeader(hub);
348347
}
349348

0 commit comments

Comments
 (0)