-
Notifications
You must be signed in to change notification settings - Fork 24
Open
Description
I recently learned about mx igvutil
:
$ cd graal/compiler
$ mx igvutil --help
USAGE:
mx igvutil <SUBCOMMAND>
ARGS:
<SUBCOMMAND>
flatten
group graphs across multiple files/dumps by name or some other graph property, e.g. date, type or compilationId.
filter
export graph data to JSON, optionally selecting a subset of graph/node properties
list
print IGV file contents in a tree-like format
Pass the --help flag after <SUBCOMMAND> for more help on the selected subcommand.
$ mx igvutil list ../../../seafoam/examples/ruby/example_if.bgv
../../../seafoam/examples/ruby/example_if.bgv
└─ Truffle::Object#example_if
├─ AST
│ └─ 0: After Profiling
└─ Graal Graphs
├─ Call Tree
│ ├─ 0: Before Inline
│ └─ 1: After Inline
├─ 0: After Partial Evaluation
├─ 1: After TruffleTier
├─ 2: Before phase Lowering
├─ 3: After high tier
├─ 4: After mid tier
└─ 5: After low tier
$ mx igvutil filter ../../../seafoam/examples/ruby/example_if.bgv|head -n 70
{
"vm.uuid": "50612",
"type": "",
"version.truffleruby": "27b9496c44430040a92a25c4551efd3aba48698e",
"version.tools": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.truffle": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.compiler": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.sulong": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.java-benchmarks": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.sdk": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.regex": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"truffle.compilation.id": "org.graalvm.compiler.truffle.compiler.TruffleCompilerImpl$TruffleCompilationImpl@1f4bc6a1",
"version.jvmci": "5a392551261f",
"elements": [
{
"name": "Truffle::Object#example_if",
"type": "",
"version.truffleruby": "27b9496c44430040a92a25c4551efd3aba48698e",
"version.tools": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.truffle": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.compiler": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.sulong": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.java-benchmarks": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.sdk": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.regex": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"truffle.compilation.id": "org.graalvm.compiler.truffle.compiler.TruffleCompilerImpl$TruffleCompilationImpl@1f4bc6a1",
"version.jvmci": "5a392551261f",
"elements": [
{
"name": "AST",
"type": "",
"version.truffleruby": "27b9496c44430040a92a25c4551efd3aba48698e",
"version.tools": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.truffle": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.compiler": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.sulong": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.java-benchmarks": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.sdk": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.regex": "fd344ebb6fd78982f8a316e8567d34af1a0943c2",
"version.jvmci": "5a392551261f",
"elements": [
{
"id": 0,
"name": "0: After Profiling",
"graph_type": "defaultType",
"nodes": {
"0": {
"id": 0,
"idx": "0",
"cost": "NodeCost.MONOMORPHIC",
"instrumentationBits": "0",
"language": "org.truffleruby.RubyLanguage@3712ed79",
"label": "RubyRoot",
"split": "Split.HEURISTIC",
"frameDescriptor": "FrameDescriptor@786c6b3e{0:condition, 1:x, 2:y, 3:(self), 4:%__method_block_arg__, 5:a}",
"callTarget": "Object#example_if",
"sourceSection": "SourceSection(source=ruby_examples.rb [67:1 - 76:3], index=1006, length=139, characters=def example_if(condition, x, y)\\n if condition\\n Primitive.blackhole x\\n a = x\\n else\\n Primitive.blackhole y\\n a = y\\n end\\n a\\nend)",
"lock": "java.util.concurrent.locks.ReentrantLock@110a593[Unlocked]",
"sharedMethodInfo": "Object#example_if ruby_examples.rb:67",
"engineRef": "org.truffleruby.RubyLanguage@3712ed79",
"name": "RubyRoot",
"class": "org.truffleruby.language.RubyRootNode",
"block": "0"
},
"1": {
"id": 1,
"idx": "1",
"sourceCharIndex": 1006,
"cost": "NodeCost.MONOMORPHIC",
"unsupportedOperationBehavior": "UnsupportedOperationBehavior.TYPE_ERROR",
mv -v
shows it uses some jars from the compiler suite:
.../bin/java -cp graal/sdk/mxbuild/jdk26/dists/jdk17/collections.jar:graal/sdk/mxbuild/jdk26/dists/jdk11/word.jar:graal/truffle/mxbuild/jdk26/dists/jdk17/truffle-compiler.jar:graal/compiler/mxbuild/jdk26/dists/jdk21/graal.jar:graal/compiler/mxbuild/jdk26/dists/jdk21/graal-igvutil.jar org.graalvm.igvutil.IgvUtility filter ../../../seafoam/examples/ruby/example_if.bgv
If the JSON has all the required information it would mean no need to maintain https://github.com/Shopify/seafoam/blob/main/lib/seafoam/bgv/bgv_parser.rb and related anymore, in exchange of having to depend on these jars and a JVM.
BTW the JSON output above has tons of hints that it's a truffleruby graph, IIRC at some point Seafoam wanted a way to detect if it's a Ruby graph, e.g. to do Ruby arguments transformation (to T(1)
etc).
cc @nirvdrum
Metadata
Metadata
Assignees
Labels
No labels