@@ -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 }
0 commit comments