Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -64,15 +64,6 @@ public interface SnippetReflectionProvider {
*/
<T> T asObject(Class<T> type, JavaConstant constant);

/**
* Get the wrapped constant object, if any. This is a temporary workaround required in Native
* Image to expand the use of ImageHeapConstant. It will be removed when all hosted phases
* support ImageHeapConstant by default and no unwrapping is necessary. (GR-48682)
*/
default JavaConstant unwrapConstant(JavaConstant constant) {
return constant;
}

/**
* Creates a boxed constant for the given kind from an Object. The object needs to be of the
* Java boxed type corresponding to the kind.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -693,7 +693,7 @@ public void visitBreakpointNode(BreakpointNode node) {

@Override
protected DebugInfoBuilder createDebugInfoBuilder(StructuredGraph graph, NodeValueMap nodeValueMap) {
return new SubstrateDebugInfoBuilder(graph, getProviders().getSnippetReflection(), gen.getProviders().getMetaAccessExtensionProvider(), nodeValueMap);
return new SubstrateDebugInfoBuilder(graph, gen.getProviders().getMetaAccessExtensionProvider(), nodeValueMap);
}

private boolean getDestroysCallerSavedRegisters(ResolvedJavaMethod targetMethod) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -869,7 +869,7 @@ public void visitBreakpointNode(BreakpointNode node) {

@Override
protected DebugInfoBuilder createDebugInfoBuilder(StructuredGraph graph, NodeValueMap nodeValueMap) {
return new SubstrateDebugInfoBuilder(graph, getProviders().getSnippetReflection(), gen.getProviders().getMetaAccessExtensionProvider(), nodeValueMap);
return new SubstrateDebugInfoBuilder(graph, gen.getProviders().getMetaAccessExtensionProvider(), nodeValueMap);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ public class NodeLLVMBuilder implements NodeLIRBuilderTool, SubstrateNodeLIRBuil
protected NodeLLVMBuilder(StructuredGraph graph, LLVMGenerator gen) {
this.gen = gen;
this.builder = gen.getBuilder();
this.debugInfoBuilder = new SubstrateDebugInfoBuilder(graph, gen.getProviders().getSnippetReflection(), gen.getProviders().getMetaAccessExtensionProvider(), this);
this.debugInfoBuilder = new SubstrateDebugInfoBuilder(graph, gen.getProviders().getMetaAccessExtensionProvider(), this);
setCompilationResultMethod(gen.getCompilationResult(), graph);

for (HIRBlock block : graph.getLastSchedule().getCFG().getBlocks()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
*/
package com.oracle.svm.core.code;

import jdk.graal.compiler.api.replacements.Fold;
import org.graalvm.nativeimage.c.function.CodePointer;
import org.graalvm.nativeimage.c.struct.SizeOf;
import org.graalvm.word.UnsignedWord;
Expand All @@ -37,13 +36,16 @@
import com.oracle.svm.core.c.NonmovableArray;
import com.oracle.svm.core.c.NonmovableArrays;
import com.oracle.svm.core.c.NonmovableObjectArray;
import com.oracle.svm.core.code.FrameInfoDecoder.ConstantAccess;
import com.oracle.svm.core.deopt.SubstrateInstalledCode;
import com.oracle.svm.core.graal.stackvalue.UnsafeStackValue;
import com.oracle.svm.core.heap.Heap;
import com.oracle.svm.core.log.Log;
import com.oracle.svm.core.thread.VMOperation;
import com.oracle.svm.core.util.VMError;

import jdk.graal.compiler.api.replacements.Fold;

/**
* Provides functionality to query information about a unit of compiled code from a {@link CodeInfo}
* object. This helper class is necessary to ensure that {@link CodeInfo} objects are used
Expand Down Expand Up @@ -258,8 +260,8 @@ public static String getName(CodeInfo info) {
return getObjectField(info, CodeInfoImpl.NAME_OBJFIELD);
}

public static long lookupDeoptimizationEntrypoint(CodeInfo info, long method, long encodedBci, CodeInfoQueryResult codeInfo) {
return CodeInfoDecoder.lookupDeoptimizationEntrypoint(info, method, encodedBci, codeInfo);
public static long lookupDeoptimizationEntrypoint(CodeInfo info, long method, long encodedBci, CodeInfoQueryResult codeInfo, ConstantAccess constantAccess) {
return CodeInfoDecoder.lookupDeoptimizationEntrypoint(info, method, encodedBci, codeInfo, constantAccess);
}

@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
Expand All @@ -280,7 +282,11 @@ public static long lookupStackReferenceMapIndex(CodeInfo info, long ip) {
}

public static void lookupCodeInfo(CodeInfo info, long ip, CodeInfoQueryResult codeInfoQueryResult) {
CodeInfoDecoder.lookupCodeInfo(info, ip, codeInfoQueryResult);
lookupCodeInfo(info, ip, codeInfoQueryResult, FrameInfoDecoder.SubstrateConstantAccess);
}

public static void lookupCodeInfo(CodeInfo info, long ip, CodeInfoQueryResult codeInfoQueryResult, ConstantAccess constantAccess) {
CodeInfoDecoder.lookupCodeInfo(info, ip, codeInfoQueryResult, constantAccess);
}

@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,6 @@

import static com.oracle.svm.core.util.VMError.shouldNotReachHereUnexpectedInput;

import jdk.graal.compiler.api.replacements.Fold;
import jdk.graal.compiler.core.common.util.TypeConversion;
import jdk.graal.compiler.options.Option;
import org.graalvm.nativeimage.ImageSingletons;
import org.graalvm.nativeimage.Platform;
import org.graalvm.nativeimage.Platforms;
Expand All @@ -37,12 +34,17 @@
import com.oracle.svm.core.AlwaysInline;
import com.oracle.svm.core.Uninterruptible;
import com.oracle.svm.core.c.NonmovableObjectArray;
import com.oracle.svm.core.code.FrameInfoDecoder.ConstantAccess;
import com.oracle.svm.core.heap.ReferenceMapIndex;
import com.oracle.svm.core.jdk.UninterruptibleUtils;
import com.oracle.svm.core.option.HostedOptionKey;
import com.oracle.svm.core.util.Counter;
import com.oracle.svm.core.util.NonmovableByteArrayReader;

import jdk.graal.compiler.api.replacements.Fold;
import jdk.graal.compiler.core.common.util.TypeConversion;
import jdk.graal.compiler.options.Option;

/**
* Decodes the metadata for compiled code. The data is an encoded byte stream to make it as compact
* as possible, but still allow fast constant time access.
Expand Down Expand Up @@ -132,7 +134,7 @@ private static long lookupCodeInfoEntryOffsetOrDefault(CodeInfo info, long ip) {
}
}

static void lookupCodeInfo(CodeInfo info, long ip, CodeInfoQueryResult codeInfoQueryResult) {
static void lookupCodeInfo(CodeInfo info, long ip, CodeInfoQueryResult codeInfoQueryResult, ConstantAccess constantAccess) {
long sizeEncoding = initialSizeEncoding();
long entryIP = lookupEntryIP(ip);
long entryOffset = loadEntryOffset(info, ip);
Expand All @@ -143,7 +145,7 @@ static void lookupCodeInfo(CodeInfo info, long ip, CodeInfoQueryResult codeInfoQ
codeInfoQueryResult.encodedFrameSize = sizeEncoding;
codeInfoQueryResult.exceptionOffset = loadExceptionOffset(info, entryOffset, entryFlags);
codeInfoQueryResult.referenceMapIndex = loadReferenceMapIndex(info, entryOffset, entryFlags);
codeInfoQueryResult.frameInfo = loadFrameInfo(info, entryOffset, entryFlags);
codeInfoQueryResult.frameInfo = loadFrameInfo(info, entryOffset, entryFlags, constantAccess);
return;
}

Expand Down Expand Up @@ -181,7 +183,7 @@ static void lookupCodeInfo(CodeInfo info, long ip, SimpleCodeInfoQueryResult cod
codeInfoQueryResult.setReferenceMapIndex(ReferenceMapIndex.NO_REFERENCE_MAP);
}

static long lookupDeoptimizationEntrypoint(CodeInfo info, long method, long encodedBci, CodeInfoQueryResult codeInfo) {
static long lookupDeoptimizationEntrypoint(CodeInfo info, long method, long encodedBci, CodeInfoQueryResult codeInfo, ConstantAccess constantAccess) {

long sizeEncoding = initialSizeEncoding();
long entryIP = lookupEntryIP(method);
Expand Down Expand Up @@ -216,7 +218,7 @@ static long lookupDeoptimizationEntrypoint(CodeInfo info, long method, long enco
codeInfo.encodedFrameSize = sizeEncoding;
codeInfo.exceptionOffset = loadExceptionOffset(info, entryOffset, entryFlags);
codeInfo.referenceMapIndex = loadReferenceMapIndex(info, entryOffset, entryFlags);
codeInfo.frameInfo = loadFrameInfo(info, entryOffset, entryFlags);
codeInfo.frameInfo = loadFrameInfo(info, entryOffset, entryFlags, constantAccess);
assert codeInfo.frameInfo.isDeoptEntry() && codeInfo.frameInfo.getCaller() == null : "Deoptimization entry must not have inlined frames";
return entryIP;
}
Expand Down Expand Up @@ -389,7 +391,7 @@ private static boolean isDeoptEntryPoint(CodeInfo info, long entryOffset, int en
}
}

private static FrameInfoQueryResult loadFrameInfo(CodeInfo info, long entryOffset, int entryFlags) {
private static FrameInfoQueryResult loadFrameInfo(CodeInfo info, long entryOffset, int entryFlags, ConstantAccess constantAccess) {
boolean isDeoptEntry;
switch (extractFI(entryFlags)) {
case FI_NO_DEOPT:
Expand All @@ -405,7 +407,7 @@ private static FrameInfoQueryResult loadFrameInfo(CodeInfo info, long entryOffse
throw shouldNotReachHereUnexpectedInput(entryFlags); // ExcludeFromJacocoGeneratedReport
}
int frameInfoIndex = NonmovableByteArrayReader.getS4(CodeInfoAccess.getCodeInfoEncodings(info), offsetFI(entryOffset, entryFlags));
return FrameInfoDecoder.decodeFrameInfo(isDeoptEntry, new ReusableTypeReader(CodeInfoAccess.getFrameInfoEncodings(info), frameInfoIndex), info);
return FrameInfoDecoder.decodeFrameInfo(isDeoptEntry, new ReusableTypeReader(CodeInfoAccess.getFrameInfoEncodings(info), frameInfoIndex), info, constantAccess);
}

@AlwaysInline("Make IP-lookup loop call free")
Expand Down Expand Up @@ -640,7 +642,8 @@ private void decodeNextEntry() {
singleShotFrameInfoQueryResultAllocator.reload();
int entryFlags = loadEntryFlags(info, state.entryOffset);
boolean isDeoptEntry = extractFI(entryFlags) == FI_DEOPT_ENTRY_INDEX_S4;
result = FrameInfoDecoder.decodeFrameInfo(isDeoptEntry, frameInfoReader, info, singleShotFrameInfoQueryResultAllocator, DummyValueInfoAllocator.SINGLETON, state);
result = FrameInfoDecoder.decodeFrameInfo(isDeoptEntry, frameInfoReader, info, singleShotFrameInfoQueryResultAllocator, DummyValueInfoAllocator.SINGLETON,
FrameInfoDecoder.SubstrateConstantAccess, state);
if (result == null) {
/* No more entries. */
canDecode = false;
Expand Down Expand Up @@ -741,7 +744,7 @@ public FrameInfoQueryResult.ValueInfo[][] newValueInfoArrayArray(int len) {

@Override
@Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true)
public void decodeConstant(FrameInfoQueryResult.ValueInfo valueInfo, NonmovableObjectArray<?> frameInfoObjectConstants) {
public void decodeConstant(FrameInfoQueryResult.ValueInfo valueInfo, NonmovableObjectArray<?> frameInfoObjectConstants, ConstantAccess constantAccess) {
}
}
}
Expand Down
Loading