Skip to content

Commit f1aa5d0

Browse files
committed
Use ReferenceAdjuster in DeoptimizationSourcePositionEncoder.
1 parent 3b10026 commit f1aa5d0

File tree

2 files changed

+27
-26
lines changed

2 files changed

+27
-26
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/DeoptimizationSourcePositionEncoder.java

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -48,36 +48,36 @@ public DeoptimizationSourcePositionEncoder() {
4848
this.objectConstants = FrequencyEncoder.createIdentityEncoder();
4949
}
5050

51-
public void encodeAndInstall(List<NodeSourcePosition> deoptimzationSourcePositions, CodeInfo target) {
52-
addObjectConstants(deoptimzationSourcePositions);
51+
public void encodeAndInstall(List<NodeSourcePosition> deoptSourcePositions, CodeInfo target, ReferenceAdjuster adjuster) {
52+
addObjectConstants(deoptSourcePositions);
5353
Object[] encodedObjectConstants = objectConstants.encodeAll(new Object[objectConstants.getLength()]);
5454

5555
UnsafeArrayTypeWriter encodingBuffer = UnsafeArrayTypeWriter.create(ByteArrayReader.supportsUnalignedMemoryAccess());
5656
EconomicMap<NodeSourcePosition, Long> sourcePositionStartOffsets = EconomicMap.create(Equivalence.IDENTITY_WITH_SYSTEM_HASHCODE);
57-
NonmovableArray<Integer> deoptimizationStartOffsets = NonmovableArrays.createIntArray(deoptimzationSourcePositions.size());
57+
NonmovableArray<Integer> deoptStartOffsets = NonmovableArrays.createIntArray(deoptSourcePositions.size());
5858

59-
encodeSourcePositions(deoptimzationSourcePositions, sourcePositionStartOffsets, deoptimizationStartOffsets, encodingBuffer);
60-
NonmovableArray<Byte> deoptimizationEncodings = NonmovableArrays.createByteArray(TypeConversion.asS4(encodingBuffer.getBytesWritten()));
61-
encodingBuffer.toByteBuffer(NonmovableArrays.asByteBuffer(deoptimizationEncodings));
59+
encodeSourcePositions(deoptSourcePositions, sourcePositionStartOffsets, deoptStartOffsets, encodingBuffer);
60+
NonmovableArray<Byte> deoptEncodings = NonmovableArrays.createByteArray(TypeConversion.asS4(encodingBuffer.getBytesWritten()));
61+
encodingBuffer.toByteBuffer(NonmovableArrays.asByteBuffer(deoptEncodings));
6262

63-
install(target, deoptimizationStartOffsets, deoptimizationEncodings, encodedObjectConstants, deoptimzationSourcePositions);
63+
install(target, deoptStartOffsets, deoptEncodings, encodedObjectConstants, deoptSourcePositions, adjuster);
6464
}
6565

6666
@Uninterruptible(reason = "Nonmovable object arrays are not visible to GC until installed in target.")
67-
private static void install(CodeInfo target, NonmovableArray<Integer> deoptimizationStartOffsets, NonmovableArray<Byte> deoptimizationEncodings,
68-
Object[] encodedObjectConstants, List<NodeSourcePosition> deoptimizationSourcePositions) {
67+
private static void install(CodeInfo target, NonmovableArray<Integer> deoptStartOffsets, NonmovableArray<Byte> deoptEncodings,
68+
Object[] encodedObjectConstants, List<NodeSourcePosition> deoptSourcePositions, ReferenceAdjuster adjuster) {
6969

70-
NonmovableObjectArray<Object> deoptimizationObjectConstants = NonmovableArrays.copyOfObjectArray(encodedObjectConstants);
71-
RuntimeCodeInfoAccess.setDeoptimizationMetadata(target, deoptimizationStartOffsets, deoptimizationEncodings, deoptimizationObjectConstants);
70+
NonmovableObjectArray<Object> deoptObjectConstants = adjuster.copyOfObjectArray(encodedObjectConstants);
71+
RuntimeCodeInfoAccess.setDeoptimizationMetadata(target, deoptStartOffsets, deoptEncodings, deoptObjectConstants);
7272

73-
afterInstallation(deoptimizationStartOffsets, deoptimizationEncodings, deoptimizationSourcePositions, deoptimizationObjectConstants);
73+
afterInstallation(deoptStartOffsets, deoptEncodings, deoptSourcePositions, deoptObjectConstants, adjuster);
7474
}
7575

7676
@Uninterruptible(reason = "Safe for GC, but called from uninterruptible code.", calleeMustBe = false)
77-
private static void afterInstallation(NonmovableArray<Integer> deoptimizationStartOffsets, NonmovableArray<Byte> deoptimizationEncodings,
78-
List<NodeSourcePosition> deoptimizationSourcePositions, NonmovableObjectArray<Object> deoptimizationObjectConstants) {
77+
private static void afterInstallation(NonmovableArray<Integer> deoptStartOffsets, NonmovableArray<Byte> deoptEncodings,
78+
List<NodeSourcePosition> deoptSourcePositions, NonmovableObjectArray<Object> deoptObjectConstants, ReferenceAdjuster adjuster) {
7979

80-
verifyEncoding(deoptimizationSourcePositions, deoptimizationStartOffsets, deoptimizationEncodings, deoptimizationObjectConstants);
80+
assert !adjuster.isFinished() || verifyEncoding(deoptSourcePositions, deoptStartOffsets, deoptEncodings, deoptObjectConstants);
8181
}
8282

8383
private void addObjectConstants(List<NodeSourcePosition> deoptimzationSourcePositions) {
@@ -97,18 +97,18 @@ private void addObjectConstants(NodeSourcePosition sourcePosition, EconomicSet<N
9797
processedPositions.add(sourcePosition);
9898
}
9999

100-
private void encodeSourcePositions(List<NodeSourcePosition> deoptimzationSourcePositions, EconomicMap<NodeSourcePosition, Long> sourcePositionStartOffsets,
101-
NonmovableArray<Integer> deoptimizationStartOffsets, UnsafeArrayTypeWriter encodingBuffer) {
102-
for (int i = 0; i < deoptimzationSourcePositions.size(); i++) {
103-
NodeSourcePosition sourcePosition = deoptimzationSourcePositions.get(i);
100+
private void encodeSourcePositions(List<NodeSourcePosition> deoptSourcePositions, EconomicMap<NodeSourcePosition, Long> sourcePositionStartOffsets,
101+
NonmovableArray<Integer> deoptStartOffsets, UnsafeArrayTypeWriter encodingBuffer) {
102+
for (int i = 0; i < deoptSourcePositions.size(); i++) {
103+
NodeSourcePosition sourcePosition = deoptSourcePositions.get(i);
104104
int startOffset;
105105
if (sourcePosition == null) {
106106
startOffset = DeoptimizationSourcePositionDecoder.NO_SOURCE_POSITION;
107107
} else {
108108
startOffset = TypeConversion.asS4(encodeSourcePositions(sourcePosition, sourcePositionStartOffsets, encodingBuffer));
109109
assert startOffset > DeoptimizationSourcePositionDecoder.NO_SOURCE_POSITION;
110110
}
111-
NonmovableArrays.setInt(deoptimizationStartOffsets, i, startOffset);
111+
NonmovableArrays.setInt(deoptStartOffsets, i, startOffset);
112112
}
113113
}
114114

@@ -139,11 +139,12 @@ private long encodeSourcePositions(NodeSourcePosition sourcePosition, EconomicMa
139139
return startAbsoluteOffset;
140140
}
141141

142-
private static boolean verifyEncoding(List<NodeSourcePosition> deoptimzationSourcePositions, NonmovableArray<Integer> deoptimizationStartOffsets,
143-
NonmovableArray<Byte> deoptimizationEncodings, NonmovableObjectArray<Object> deoptimizationObjectConstants) {
144-
for (int i = 0; i < deoptimzationSourcePositions.size(); i++) {
145-
NodeSourcePosition originalSourcePosition = deoptimzationSourcePositions.get(i);
146-
NodeSourcePosition decodedSourcePosition = DeoptimizationSourcePositionDecoder.decode(i, deoptimizationStartOffsets, deoptimizationEncodings, deoptimizationObjectConstants);
142+
private static boolean verifyEncoding(List<NodeSourcePosition> deoptSourcePositions, NonmovableArray<Integer> deoptStartOffsets,
143+
NonmovableArray<Byte> deoptEncodings, NonmovableObjectArray<Object> deoptObjectConstants) {
144+
145+
for (int i = 0; i < deoptSourcePositions.size(); i++) {
146+
NodeSourcePosition originalSourcePosition = deoptSourcePositions.get(i);
147+
NodeSourcePosition decodedSourcePosition = DeoptimizationSourcePositionDecoder.decode(i, deoptStartOffsets, deoptEncodings, deoptObjectConstants);
147148

148149
verifySourcePosition(originalSourcePosition, decodedSourcePosition);
149150
}

substratevm/src/com.oracle.svm.graal/src/com/oracle/svm/graal/meta/RuntimeCodeInstaller.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ private void createCodeChunkInfos(CodeInfo runtimeMethodInfo, ReferenceAdjuster
328328
assert !adjuster.isFinished() || codeInfoEncoder.verifyFrameInfo(runtimeMethodInfo);
329329

330330
DeoptimizationSourcePositionEncoder sourcePositionEncoder = new DeoptimizationSourcePositionEncoder();
331-
sourcePositionEncoder.encodeAndInstall(compilation.getDeoptimizationSourcePositions(), runtimeMethodInfo);
331+
sourcePositionEncoder.encodeAndInstall(compilation.getDeoptimizationSourcePositions(), runtimeMethodInfo, adjuster);
332332
}
333333

334334
private void patchData(Map<Integer, NativeImagePatcher> patcher, @SuppressWarnings("unused") ObjectConstantsHolder objectConstants) {

0 commit comments

Comments
 (0)