Skip to content

Commit d9d52b5

Browse files
committed
[GR-54517] Get rid of FrameInstance#getFrame(READ_WRITE) in Sulong.
PullRequest: graal/17959
2 parents 5432eac + c112370 commit d9d52b5

35 files changed

+464
-396
lines changed

sulong/projects/com.oracle.truffle.llvm.runtime/src/com/oracle/truffle/llvm/runtime/CommonNodeFactory.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2019, 2023, Oracle and/or its affiliates.
2+
* Copyright (c) 2019, 2024, Oracle and/or its affiliates.
33
*
44
* All rights reserved.
55
*
@@ -184,7 +184,7 @@
184184
import com.oracle.truffle.llvm.runtime.nodes.memory.store.LLVMI64StoreNodeGen.LLVMI64OffsetStoreNodeGen;
185185
import com.oracle.truffle.llvm.runtime.nodes.memory.store.LLVMI8StoreNode.LLVMI8OffsetStoreNode;
186186
import com.oracle.truffle.llvm.runtime.nodes.memory.store.LLVMI8StoreNodeGen.LLVMI8OffsetStoreNodeGen;
187-
import com.oracle.truffle.llvm.runtime.nodes.memory.store.LLVMOffsetStoreNode;
187+
import com.oracle.truffle.llvm.runtime.nodes.memory.store.LLVMOffsetStoreNode.LLVMPrimitiveOffsetStoreNode;
188188
import com.oracle.truffle.llvm.runtime.nodes.memory.store.LLVMPointerStoreNode.LLVMPointerOffsetStoreNode;
189189
import com.oracle.truffle.llvm.runtime.nodes.memory.store.LLVMPointerStoreNodeGen.LLVMPointerOffsetStoreNodeGen;
190190
import com.oracle.truffle.llvm.runtime.nodes.op.LLVMAbstractCompareNode;
@@ -367,7 +367,7 @@ public static LLVMOffsetLoadNode getUncachedOffsetLoadNode(LLVMInteropType.Value
367367
}
368368
}
369369

370-
public static LLVMOffsetStoreNode createOffsetStoreNode(LLVMInteropType.ValueKind kind) {
370+
public static LLVMPrimitiveOffsetStoreNode createOffsetStoreNode(LLVMInteropType.ValueKind kind) {
371371
switch (kind) {
372372
case I1:
373373
return LLVMI1OffsetStoreNode.create();
@@ -390,7 +390,7 @@ public static LLVMOffsetStoreNode createOffsetStoreNode(LLVMInteropType.ValueKin
390390
}
391391
}
392392

393-
public static LLVMOffsetStoreNode getUncachedOffsetStoreNode(LLVMInteropType.ValueKind kind) {
393+
public static LLVMPrimitiveOffsetStoreNode getUncachedOffsetStoreNode(LLVMInteropType.ValueKind kind) {
394394
switch (kind) {
395395
case I1:
396396
return LLVMI1OffsetStoreNodeGen.getUncached();

sulong/projects/com.oracle.truffle.llvm.runtime/src/com/oracle/truffle/llvm/runtime/interop/export/LLVMForeignWriteNode.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, 2021, Oracle and/or its affiliates.
2+
* Copyright (c) 2018, 2024, Oracle and/or its affiliates.
33
*
44
* All rights reserved.
55
*
@@ -39,7 +39,7 @@
3939
import com.oracle.truffle.llvm.runtime.interop.access.LLVMInteropType.ValueKind;
4040
import com.oracle.truffle.llvm.runtime.interop.convert.ForeignToLLVM;
4141
import com.oracle.truffle.llvm.runtime.nodes.api.LLVMNode;
42-
import com.oracle.truffle.llvm.runtime.nodes.memory.store.LLVMOffsetStoreNode;
42+
import com.oracle.truffle.llvm.runtime.nodes.memory.store.LLVMOffsetStoreNode.LLVMPrimitiveOffsetStoreNode;
4343
import com.oracle.truffle.llvm.runtime.pointer.LLVMPointer;
4444

4545
@GenerateUncached
@@ -53,7 +53,7 @@ public abstract class LLVMForeignWriteNode extends LLVMNode {
5353
@GenerateAOT.Exclude
5454
static void doValue(LLVMPointer ptr, LLVMInteropType.Value type, Object value,
5555
@Cached(value = "type.kind", allowUncached = true) @SuppressWarnings("unused") LLVMInteropType.ValueKind cachedKind,
56-
@Cached(parameters = "cachedKind") LLVMOffsetStoreNode store,
56+
@Cached(parameters = "cachedKind") LLVMPrimitiveOffsetStoreNode store,
5757
@Cached(value = "createForeignToLLVM(type)", uncached = "getSlowPath()") ForeignToLLVM toLLVM) {
5858
Object llvmValue = toLLVM.executeWithForeignToLLVMType(value, type.baseType, cachedKind.foreignToLLVMType);
5959
store.executeWithTargetGeneric(ptr, 0, llvmValue);

sulong/projects/com.oracle.truffle.llvm.runtime/src/com/oracle/truffle/llvm/runtime/library/internal/LLVMCopyTargetLibrary.java

-64
This file was deleted.

sulong/projects/com.oracle.truffle.llvm.runtime/src/com/oracle/truffle/llvm/runtime/memory/LLVMMemMoveNode.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2018, Oracle and/or its affiliates.
2+
* Copyright (c) 2017, 2024, Oracle and/or its affiliates.
33
*
44
* All rights reserved.
55
*
@@ -29,8 +29,10 @@
2929
*/
3030
package com.oracle.truffle.llvm.runtime.memory;
3131

32+
import com.oracle.truffle.api.frame.VirtualFrame;
3233
import com.oracle.truffle.api.nodes.NodeInterface;
3334

3435
public interface LLVMMemMoveNode extends NodeInterface {
35-
void executeWithTarget(Object target, Object source, long length);
36+
37+
void executeWithTarget(VirtualFrame frame, Object target, Object source, long length);
3638
}

sulong/projects/com.oracle.truffle.llvm.runtime/src/com/oracle/truffle/llvm/runtime/nodes/api/LLVMStoreNode.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2016, 2020, Oracle and/or its affiliates.
2+
* Copyright (c) 2016, 2024, Oracle and/or its affiliates.
33
*
44
* All rights reserved.
55
*
@@ -30,12 +30,13 @@
3030
package com.oracle.truffle.llvm.runtime.nodes.api;
3131

3232
import com.oracle.truffle.api.dsl.NodeChild;
33+
import com.oracle.truffle.api.frame.VirtualFrame;
3334

3435
@NodeChild(value = "address", type = LLVMExpressionNode.class)
3536
@NodeChild(value = "value", type = LLVMExpressionNode.class)
3637
public abstract class LLVMStoreNode extends LLVMStatementNode {
3738

3839
public static final LLVMStoreNode[] NO_STORES = {};
3940

40-
public abstract void executeWithTarget(Object address, Object value);
41+
public abstract void executeWithTarget(VirtualFrame frame, Object address, Object value);
4142
}

sulong/projects/com.oracle.truffle.llvm.runtime/src/com/oracle/truffle/llvm/runtime/nodes/control/LLVMRetNode.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2016, 2023, Oracle and/or its affiliates.
2+
* Copyright (c) 2016, 2024, Oracle and/or its affiliates.
33
*
44
* All rights reserved.
55
*
@@ -253,7 +253,7 @@ protected Object doOp(VirtualFrame frame, LLVMPointer retResult) {
253253

254254
private Object returnStruct(VirtualFrame frame, Object retResult) {
255255
Object retStructAddress = argIdx1.executeGeneric(frame);
256-
memMove.executeWithTarget(retStructAddress, retResult, getStructSize());
256+
memMove.executeWithTarget(frame, retStructAddress, retResult, getStructSize());
257257
return retStructAddress;
258258
}
259259
}

sulong/projects/com.oracle.truffle.llvm.runtime/src/com/oracle/truffle/llvm/runtime/nodes/intrinsics/c/LLVMMemIntrinsic.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2021, Oracle and/or its affiliates.
2+
* Copyright (c) 2017, 2024, Oracle and/or its affiliates.
33
*
44
* All rights reserved.
55
*
@@ -31,6 +31,7 @@
3131

3232
import com.oracle.truffle.api.dsl.NodeChild;
3333
import com.oracle.truffle.api.dsl.Specialization;
34+
import com.oracle.truffle.api.frame.VirtualFrame;
3435
import com.oracle.truffle.llvm.runtime.memory.LLVMMemMoveNode;
3536
import com.oracle.truffle.llvm.runtime.memory.LLVMMemSetNode;
3637
import com.oracle.truffle.llvm.runtime.nodes.api.LLVMExpressionNode;
@@ -85,14 +86,14 @@ public LLVMLibcMemMove(LLVMMemMoveNode memmove) {
8586
}
8687

8788
@Specialization
88-
protected Object op(Object dst, Object src, int len) {
89-
memmove.executeWithTarget(dst, src, len);
89+
protected Object op(VirtualFrame frame, Object dst, Object src, int len) {
90+
memmove.executeWithTarget(frame, dst, src, len);
9091
return dst;
9192
}
9293

9394
@Specialization
94-
protected Object op(Object dst, Object src, long len) {
95-
memmove.executeWithTarget(dst, src, len);
95+
protected Object op(VirtualFrame frame, Object dst, Object src, long len) {
96+
memmove.executeWithTarget(frame, dst, src, len);
9697
return dst;
9798
}
9899
}

sulong/projects/com.oracle.truffle.llvm.runtime/src/com/oracle/truffle/llvm/runtime/nodes/intrinsics/llvm/LLVMMemCopy.java

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2016, 2023, Oracle and/or its affiliates.
2+
* Copyright (c) 2016, 2024, Oracle and/or its affiliates.
33
*
44
* All rights reserved.
55
*
@@ -32,6 +32,7 @@
3232
import com.oracle.truffle.api.dsl.Cached;
3333
import com.oracle.truffle.api.dsl.NodeChild;
3434
import com.oracle.truffle.api.dsl.Specialization;
35+
import com.oracle.truffle.api.frame.VirtualFrame;
3536
import com.oracle.truffle.llvm.runtime.NodeFactory;
3637
import com.oracle.truffle.llvm.runtime.except.LLVMParserException;
3738
import com.oracle.truffle.llvm.runtime.memory.LLVMMemMoveNode;
@@ -69,19 +70,19 @@ public static LLVMExpressionNode createIntrinsic(LLVMExpressionNode[] args, LLVM
6970
}
7071

7172
@Specialization
72-
protected Object doVoid(LLVMPointer target, LLVMPointer source, int length, boolean isVolatile) {
73-
return doVoid(target, source, (long) length, isVolatile);
73+
protected Object doVoid(VirtualFrame frame, LLVMPointer target, LLVMPointer source, int length, boolean isVolatile) {
74+
return doVoid(frame, target, source, (long) length, isVolatile);
7475
}
7576

7677
@Specialization
77-
protected Object doVoid(LLVMPointer target, LLVMPointer source, long length, @SuppressWarnings("unused") boolean isVolatile) {
78-
memMove.executeWithTarget(target, source, length);
78+
protected Object doVoid(VirtualFrame frame, LLVMPointer target, LLVMPointer source, long length, @SuppressWarnings("unused") boolean isVolatile) {
79+
memMove.executeWithTarget(frame, target, source, length);
7980
return null;
8081
}
8182

8283
@Specialization
83-
protected Object doVoid(LLVMPointer target, LLVMPointer source, LLVMPointer length, boolean isVolatile,
84+
protected Object doVoid(VirtualFrame frame, LLVMPointer target, LLVMPointer source, LLVMPointer length, boolean isVolatile,
8485
@Cached LLVMToNativeNode toNative) {
85-
return doVoid(target, source, toNative.executeWithTarget(length).asNative(), isVolatile);
86+
return doVoid(frame, target, source, toNative.executeWithTarget(length).asNative(), isVolatile);
8687
}
8788
}

sulong/projects/com.oracle.truffle.llvm.runtime/src/com/oracle/truffle/llvm/runtime/nodes/intrinsics/llvm/LLVMMemMove.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2016, 2022, Oracle and/or its affiliates.
2+
* Copyright (c) 2016, 2024, Oracle and/or its affiliates.
33
*
44
* All rights reserved.
55
*
@@ -31,6 +31,7 @@
3131

3232
import com.oracle.truffle.api.dsl.NodeChild;
3333
import com.oracle.truffle.api.dsl.Specialization;
34+
import com.oracle.truffle.api.frame.VirtualFrame;
3435
import com.oracle.truffle.llvm.runtime.NodeFactory;
3536
import com.oracle.truffle.llvm.runtime.except.LLVMParserException;
3637
import com.oracle.truffle.llvm.runtime.memory.LLVMMemMoveNode;
@@ -76,8 +77,8 @@ public static LLVMExpressionNode createIntrinsic(LLVMExpressionNode[] args, LLVM
7677
* @see LLVMMemMoveI64
7778
*/
7879
@Specialization
79-
protected Object doVoid(LLVMPointer dest, LLVMPointer source, long length, boolean isVolatile) {
80-
memMove.executeWithTarget(dest, source, length);
80+
protected Object doVoid(VirtualFrame frame, LLVMPointer dest, LLVMPointer source, long length, boolean isVolatile) {
81+
memMove.executeWithTarget(frame, dest, source, length);
8182
return null;
8283
}
8384
}

sulong/projects/com.oracle.truffle.llvm.runtime/src/com/oracle/truffle/llvm/runtime/nodes/intrinsics/llvm/aarch64/darwin/LLVMDarwinAarch64VaListStorage.java

+14-3
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
import com.oracle.truffle.llvm.runtime.library.internal.LLVMManagedReadLibrary;
5050
import com.oracle.truffle.llvm.runtime.nodes.intrinsics.llvm.va.LLVMVaListLibrary;
5151
import com.oracle.truffle.llvm.runtime.nodes.intrinsics.llvm.va.LLVMVaListStorage;
52-
import com.oracle.truffle.llvm.runtime.nodes.memory.NativeProfiledMemMove;
52+
import com.oracle.truffle.llvm.runtime.nodes.memory.NativeProfiledMemMoveToNative;
5353
import com.oracle.truffle.llvm.runtime.nodes.memory.load.LLVMDoubleLoadNode.LLVMDoubleOffsetLoadNode;
5454
import com.oracle.truffle.llvm.runtime.nodes.memory.load.LLVMI16LoadNode.LLVMI16OffsetLoadNode;
5555
import com.oracle.truffle.llvm.runtime.nodes.memory.load.LLVMI32LoadNode.LLVMI32OffsetLoadNode;
@@ -62,6 +62,7 @@
6262
import com.oracle.truffle.llvm.runtime.nodes.memory.store.LLVMPointerStoreNode.LLVMPointerOffsetStoreNode;
6363
import com.oracle.truffle.llvm.runtime.pointer.LLVMManagedPointer;
6464
import com.oracle.truffle.llvm.runtime.pointer.LLVMMaybeVaPointer;
65+
import com.oracle.truffle.llvm.runtime.pointer.LLVMNativePointer;
6566
import com.oracle.truffle.llvm.runtime.pointer.LLVMPointer;
6667
import com.oracle.truffle.llvm.runtime.types.PointerType;
6768
import com.oracle.truffle.llvm.runtime.types.PrimitiveType;
@@ -255,13 +256,23 @@ void toNative(@Cached LLVMI64OffsetStoreNode i64RegSaveAreaStore,
255256
@Cached LLVMI32OffsetStoreNode i32RegSaveAreaStore,
256257
@Cached LLVM80BitFloatOffsetStoreNode fp80bitRegSaveAreaStore,
257258
@Cached LLVMPointerOffsetStoreNode pointerRegSaveAreaStore,
258-
@Cached NativeProfiledMemMove memMove,
259+
@Cached NativeProfiledMemMoveToNative memMove,
259260
@Cached BranchProfile nativizedProfile) {
260261

261262
if (isNativized()) {
262263
nativizedProfile.enter();
263264
return;
264265
}
266+
267+
if (!LLVMNativePointer.isInstance(vaListStackPtr)) {
268+
/*
269+
* We don't have native memory pre-reserved on the stack. Maybe we have no access to
270+
* native memory? In this case, the toNative transition fails.
271+
*/
272+
return;
273+
}
274+
LLVMNativePointer nativeStackPtr = LLVMNativePointer.cast(vaListStackPtr);
275+
265276
nativized = true;
266277

267278
/* Reconstruct the native memory according to darwin-aarch64 ABI. */
@@ -272,7 +283,7 @@ void toNative(@Cached LLVMI64OffsetStoreNode i64RegSaveAreaStore,
272283
for (int i = numberOfExplicitArguments; i < realArguments.length; i++) {
273284
final Object object = realArguments[i];
274285

275-
long size = storeArgument(vaListStackPtr, offset, memMove, i64RegSaveAreaStore, i32RegSaveAreaStore, fp80bitRegSaveAreaStore, pointerRegSaveAreaStore, object, Integer.BYTES);
286+
long size = storeArgument(nativeStackPtr, offset, memMove, i64RegSaveAreaStore, i32RegSaveAreaStore, fp80bitRegSaveAreaStore, pointerRegSaveAreaStore, object, Integer.BYTES);
276287
assert size <= Long.BYTES;
277288
offset += Long.BYTES;
278289
}

0 commit comments

Comments
 (0)