Back to list
antonykamp

tracing-inlining-decisions

by antonykamp

A Claude plugin for analyzing and optimizing Truffle performance

0🍴 0📅 Jan 22, 2026

SKILL.md


name: tracing-inlining-decisions description: Shows inlining decisions during compilation with call tree and reasons for inline/don't-inline. Use to verify critical calls are inlined, understand why inlining failed (too large, recursive, boundary), and optimize method sizes. Good inlining = better compilation. Recursive functions show 'not inlined' - expected behavior for Bytecode DSL limitation.

Tracing Inlining Decisions

Shows inlining decisions during compilation with call tree structure and reasons. Essential for understanding why calls aren't being optimized.

When to Use This Skill

  • Verify critical calls are being inlined
  • Understand why inlining failed
  • Optimize method sizes for better inlining
  • Debug recursive function compilation

Quick Start

# Basic inlining trace
<launcher> --experimental-options \
  --engine.TraceInlining <program>

# Combined with compilation trace (RECOMMENDED)
<launcher> --experimental-options \
  --engine.TraceInlining \
  --engine.TraceCompilation \
  <program> 2>&1 | tee inlining.log

# Focus on specific function
<launcher> --experimental-options \
  --engine.TraceInlining \
  --engine.CompileOnly="*hotFunction*" \
  <program>

⚠️ REQUIRED: Fermi Verification (Every Tool Invocation)

Before running:

  • Pre-calculate: Expected hot helper functions to inline (list 2-5 function names)
  • Smoke test: <launcher> --experimental-options --engine.TraceInlining -c 'print 1;' → Verify inlining decisions appear

After running:

  • Validate: Critical functions inlined as expected? YES / NO
  • If NO: Document why (budgetExhausted, TooLarge, TruffleBoundary)
  • Save output: tool-outputs/trace-inlining-[benchmark].txt

Gate: All boxes checked? → Proceed to analysis

Key Options

OptionDescription
--engine.TraceInliningShow inlining decisions
--engine.TraceInliningDetailsDetailed reasoning
--engine.CompileOnly=<name>Filter to specific function

Understanding Output

Inlined Successfully

[engine] Inlined: hasConflict
  Reason: trivialSize

Not Inlined

[engine] Not inlined: recursiveFunc
  Reason: RecursiveInlining
[engine] Not inlined: bigFunction
  Reason: budgetExhausted

Inlining Reasons

Good (Inlined)

ReasonMeaning
trivialSizeSmall enough to inline
forced@Specialization forced inline
relevantDeemed performance-relevant

Bad (Not Inlined)

ReasonMeaningFix
RecursiveInliningRecursive callExpected for recursion
budgetExhaustedInlining budget usedReduce method sizes
TooLargeMethod too bigSplit method
TruffleBoundaryMarked as boundaryReview boundary usage
notRelevantNot performance-criticalMay be OK

Problem Patterns

Pattern 1: Budget Exhausted for Hot Functions

Symptom: Critical function not inlined due to budget Fix: Reduce sizes of other methods, or increase budget

Pattern 2: Unexpected Boundary

Symptom: Hot call not inlined due to TruffleBoundary Fix: Remove boundary if not needed, or restructure

Pattern 3: Too Many Recursive Levels

Symptom: Recursive function shows "RecursiveInlining" Expected: Normal for recursive algorithms (Bytecode DSL limitation)

Integration with Other Skills

FindingNext Skill
Budget issuesRefactor code, reduce sizes
BoundariesReview TruffleBoundary usage
Still slowprofiling-with-cpu-sampler
  • profiling-with-cpu-sampler - Identify hot functions first
  • tracing-compilation-events - Overall compilation status
  • detecting-performance-warnings - Find barriers
  • fetching-truffle-documentation - API reference

Reference

<launcher> --help:engine | grep -i inlin

Score

Total Score

55/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

0/5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon