aboutsummaryrefslogtreecommitdiffstats
path: root/yjit.rb
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2023-09-29 07:03:02 -0700
committerGitHub <noreply@github.com>2023-09-29 10:03:02 -0400
commit592acba5d583b2608f829a77cfd7a1fb95414717 (patch)
tree576e284b107ab244ed582cdfbce4c9525ba466f7 /yjit.rb
parenta8578fff98d62b869101c43ead67fe37303672ec (diff)
downloadruby-592acba5d583b2608f829a77cfd7a1fb95414717.tar.gz
YJIT: Report all insn exit reasons (#8541)
Diffstat (limited to 'yjit.rb')
-rw-r--r--yjit.rb39
1 files changed, 30 insertions, 9 deletions
diff --git a/yjit.rb b/yjit.rb
index e11eeb2358..ada3f0c0e9 100644
--- a/yjit.rb
+++ b/yjit.rb
@@ -258,16 +258,33 @@ module RubyVM::YJIT
print_counters(stats, out: out, prefix: 'guard_send_', prompt: 'method call exit reasons: ')
print_counters(stats, out: out, prefix: 'guard_invokeblock_', prompt: 'invokeblock exit reasons: ')
print_counters(stats, out: out, prefix: 'guard_invokesuper_', prompt: 'invokesuper exit reasons: ')
- print_counters(stats, out: out, prefix: 'leave_', prompt: 'leave exit reasons: ')
print_counters(stats, out: out, prefix: 'gbpp_', prompt: 'getblockparamproxy exit reasons: ')
print_counters(stats, out: out, prefix: 'getivar_', prompt: 'getinstancevariable exit reasons:')
print_counters(stats, out: out, prefix: 'setivar_', prompt: 'setinstancevariable exit reasons:')
- print_counters(stats, out: out, prefix: 'definedivar_', prompt: 'definedivar exit reasons:')
- print_counters(stats, out: out, prefix: 'opt_aref_', prompt: 'opt_aref exit reasons: ')
- print_counters(stats, out: out, prefix: 'opt_aref_with_', prompt: 'opt_aref_with exit reasons: ')
- print_counters(stats, out: out, prefix: 'expandarray_', prompt: 'expandarray exit reasons: ')
+ %w[
+ branchif
+ branchnil
+ branchunless
+ definedivar
+ expandarray
+ jump
+ leave
+ objtostring
+ opt_aref
+ opt_aref_with
+ opt_aset
+ opt_case_dispatch
+ opt_div
+ opt_getconstant_path
+ opt_minus
+ opt_mod
+ opt_mult
+ opt_plus
+ setlocal
+ ].each do |insn|
+ print_counters(stats, out: out, prefix: "#{insn}_", prompt: "#{insn} exit reasons:", optional: true)
+ end
print_counters(stats, out: out, prefix: 'lshift_', prompt: 'left shift (ltlt) exit reasons: ')
- print_counters(stats, out: out, prefix: 'opt_getconstant_path_', prompt: 'opt_getconstant_path exit reasons: ')
print_counters(stats, out: out, prefix: 'invalidate_', prompt: 'invalidation reasons: ')
# Number of failed compiler invocations
@@ -381,15 +398,19 @@ module RubyVM::YJIT
total
end
- def print_counters(counters, out:, prefix:, prompt:) # :nodoc:
- out.puts(prompt)
+ def print_counters(counters, out:, prefix:, prompt:, optional: false) # :nodoc:
counters = counters.filter { |key, _| key.start_with?(prefix) }
counters.filter! { |_, value| value != 0 }
counters.transform_keys! { |key| key.to_s.delete_prefix(prefix) }
if counters.empty?
- out.puts(" (all relevant counters are zero)")
+ unless optional
+ out.puts(prompt)
+ out.puts(" (all relevant counters are zero)")
+ end
return
+ else
+ out.puts(prompt)
end
counters = counters.to_a