예제 #1
0
 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);
     }
   }
 }
예제 #2
0
 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);
 }