private void dequeueInlinedCallSites(TruffleInlining parentDecision) { for (TruffleInliningDecision decision : parentDecision) { if (decision.isInline()) { OptimizedCallTarget target = decision.getTarget(); target.cancelInstalledTask( decision.getProfile().getCallNode(), "Inlining caller compiled."); dequeueInlinedCallSites(decision); } } }
public OptimizedCallTarget cloneUninitialized() { ensureCloned(); RootNode copiedRoot = cloneRootNode(uninitializedRootNode); if (copiedRoot == null) { return null; } OptimizedCallTarget splitTarget = (OptimizedCallTarget) runtime.createClonedCallTarget(this, copiedRoot); splitTarget.cloneIndex = cloneIndex++; return splitTarget; }
@Override public void notifyCompilationTruffleTierFinished( OptimizedCallTarget target, TruffleInlining inliningDecision, StructuredGraph graph) { compilationLocal.get().truffleTierFinished = System.nanoTime(); nodeStatistics.accept( target.nodeStream(inliningDecision).filter(n -> n != null).map(node -> node.getClass())); CallTargetNodeStatistics callTargetStat = new CallTargetNodeStatistics(target, inliningDecision); nodeCount.accept(callTargetStat.getNodeCount()); nodeCountTrivial.accept(callTargetStat.getNodeCountTrivial()); nodeCountNonTrivial.accept(callTargetStat.getNodeCountNonTrivial()); nodeCountMonomorphic.accept(callTargetStat.getNodeCountMonomorphic()); nodeCountPolymorphic.accept(callTargetStat.getNodeCountPolymorphic()); nodeCountMegamorphic.accept(callTargetStat.getNodeCountMegamorphic()); callCount.accept(callTargetStat.getCallCount()); callCountIndirect.accept(callTargetStat.getCallCountIndirect()); callCountDirect.accept(callTargetStat.getCallCountDirect()); callCountDirectDispatched.accept(callTargetStat.getCallCountDirectDispatched()); callCountDirectInlined.accept(callTargetStat.getCallCountDirectInlined()); callCountDirectCloned.accept(callTargetStat.getCallCountDirectCloned()); callCountDirectNotCloned.accept(callTargetStat.getCallCountDirectNotCloned()); loopCount.accept(callTargetStat.getLoopCount()); truffleTierNodeCount.accept(graph.getNodeCount()); if (TruffleCompilerOptions.TruffleCompilationStatisticDetails.getValue()) { truffleTierNodeStatistics.accept(nodeClassStream(graph)); } }
@Override public void notifyCompilationQueued(OptimizedCallTarget target) { queues++; if (firstCompilation == 0) { firstCompilation = System.nanoTime(); } OptimizedCompilationProfile profile = target.getCompilationProfile(); if (profile != null) { timeToQueue.accept(System.nanoTime() - profile.getTimestamp()); } }
@Override public void notifyCompilationStarted(OptimizedCallTarget target) { compilations++; CompilationLocal local = new CompilationLocal(); local.compilationStarted = System.nanoTime(); compilationLocal.set(local); OptimizedCompilationProfile profile = target.getCompilationProfile(); if (profile != null) { deferCompilations.accept(profile.getDeferredCount()); timeToCompilation.accept(local.compilationStarted - profile.getTimestamp()); } }
CallTargetNodeStatistics(OptimizedCallTarget target, TruffleInlining inliningDecision) { target.accept((CallTreeNodeVisitor) this::visitNode, inliningDecision); }