@Override protected CompilationResult createCompilationResult(String name, CompilationIdentifier compilationIdentifier, CompilableTruffleAST compilable) { return new SubstrateCompilationResult(compilationIdentifier, name); }
@Override public void emitCode(CompilationResultBuilder crb) { ((SubstrateCompilationResult) crb.compilationResult).setDeoptimizationSourcePositions(deoptimzationSourcePositions); }
for (CodeAnnotation codeAnnotation : compilation.getCodeAnnotations()) { if (codeAnnotation instanceof NativeImagePatcher) { patches.put(codeAnnotation.position, (NativeImagePatcher) codeAnnotation); ByteBuffer constantsBuffer = CTypeConversion.asByteBuffer(code.add(constantsOffset), compilation.getDataSection().getSectionSize()); compilation.getDataSection().buildDataSection(constantsBuffer, (position, constant) -> { objectConstants.add(new DataSectionPatcher(constantsOffset + position), (SubstrateObjectConstant) constant); });
private void patchData(Map<Integer, NativeImagePatcher> patcher, @SuppressWarnings("unused") ObjectConstantsHolder objectConstants) { for (DataPatch dataPatch : compilation.getDataPatches()) { NativeImagePatcher patch = patcher.get(dataPatch.pcOffset); if (dataPatch.reference instanceof DataSectionReference) { DataSectionReference ref = (DataSectionReference) dataPatch.reference; int pcDisplacement = constantsOffset + ref.getOffset() - dataPatch.pcOffset; patch.patch(dataPatch.pcOffset, pcDisplacement, compiledBytes); } else if (dataPatch.reference instanceof ConstantReference) { ConstantReference ref = (ConstantReference) dataPatch.reference; SubstrateObjectConstant refConst = (SubstrateObjectConstant) ref.getConstant(); objectConstants.add(patch, refConst); } } }
for (Infopoint infopoint : compilation.getInfopoints()) { if (infopoint instanceof Call && ((Call) infopoint).direct) { Call call = (Call) infopoint;
private void createCodeChunkInfos() { CodeInfoEncoder codeInfoEncoder = new CodeInfoEncoder(new FrameInfoEncoder.NamesFromImage(), metaInfoAllocator); codeInfoEncoder.addMethod(method, compilation, 0); codeInfoEncoder.encodeAll(); codeInfoEncoder.install(runtimeMethodInfo); assert codeInfoEncoder.verifyMethod(compilation, 0); DeoptimizationSourcePositionEncoder sourcePositionEncoder = new DeoptimizationSourcePositionEncoder(metaInfoAllocator); sourcePositionEncoder.encode(compilation.getDeoptimizationSourcePositions()); sourcePositionEncoder.install(runtimeMethodInfo); }
SubstrateCompilationResult result = new SubstrateCompilationResult(graph.compilationId(), method.format("%H.%n(%p)")); GraalCompiler.compileGraph(graph, method, backend.getProviders(), backend, null, optimisticOpts, null, suites, lirSuites, result, CompilationResultBuilderFactory.Default, false);