summaryrefslogtreecommitdiff
path: root/zjit.rb
diff options
context:
space:
mode:
authorMax Bernstein <rubybugs@bernsteinbear.com>2025-11-26 15:36:00 -0800
committerGitHub <noreply@github.com>2025-11-26 15:36:00 -0800
commitdb94a79da432bcdb9d48517733f11ccf03c7cd5d (patch)
tree3972c411032211b42a96dbae2e7ccb23af264716 /zjit.rb
parent52426a22de8ce5e2f02ce4169a1b6944e2165b46 (diff)
ZJIT: Count fallback reasons for set/get/definedivar (#15324)
lobsters: ``` Top-4 setivar fallback reasons (100.0% of total 7,789,008): shape_transition: 6,074,085 (78.0%) not_monomorphic: 1,484,013 (19.1%) not_t_object: 172,629 ( 2.2%) too_complex: 58,281 ( 0.7%) Top-3 getivar fallback reasons (100.0% of total 9,348,832): not_t_object: 4,658,833 (49.8%) not_monomorphic: 4,542,316 (48.6%) too_complex: 147,683 ( 1.6%) Top-3 definedivar fallback reasons (100.0% of total 366,383): not_monomorphic: 361,389 (98.6%) too_complex: 3,062 ( 0.8%) not_t_object: 1,932 ( 0.5%) ``` railsbench: ``` Top-3 setivar fallback reasons (100.0% of total 15,119,057): shape_transition: 13,760,763 (91.0%) not_monomorphic: 982,368 ( 6.5%) not_t_object: 375,926 ( 2.5%) Top-2 getivar fallback reasons (100.0% of total 14,438,747): not_t_object: 7,643,870 (52.9%) not_monomorphic: 6,794,877 (47.1%) Top-2 definedivar fallback reasons (100.0% of total 209,613): not_monomorphic: 209,526 (100.0%) not_t_object: 87 ( 0.0%) ``` shipit: ``` Top-3 setivar fallback reasons (100.0% of total 14,516,254): shape_transition: 8,613,512 (59.3%) not_monomorphic: 5,761,398 (39.7%) not_t_object: 141,344 ( 1.0%) Top-2 getivar fallback reasons (100.0% of total 21,016,444): not_monomorphic: 11,313,482 (53.8%) not_t_object: 9,702,962 (46.2%) Top-2 definedivar fallback reasons (100.0% of total 290,382): not_monomorphic: 287,755 (99.1%) not_t_object: 2,627 ( 0.9%) ```
Diffstat (limited to 'zjit.rb')
-rw-r--r--zjit.rb9
1 files changed, 6 insertions, 3 deletions
diff --git a/zjit.rb b/zjit.rb
index fc306c19a4..d128adead6 100644
--- a/zjit.rb
+++ b/zjit.rb
@@ -183,6 +183,9 @@ class << RubyVM::ZJIT
print_counters_with_prefix(prefix: 'unspecialized_send_without_block_def_type_', prompt: 'not optimized method types for send_without_block', buf:, stats:, limit: 20)
print_counters_with_prefix(prefix: 'uncategorized_fallback_yarv_insn_', prompt: 'instructions with uncategorized fallback reason', buf:, stats:, limit: 20)
print_counters_with_prefix(prefix: 'send_fallback_', prompt: 'send fallback reasons', buf:, stats:, limit: 20)
+ print_counters_with_prefix(prefix: 'setivar_fallback_', prompt: 'setivar fallback reasons', buf:, stats:, limit: 5)
+ print_counters_with_prefix(prefix: 'getivar_fallback_', prompt: 'getivar fallback reasons', buf:, stats:, limit: 5)
+ print_counters_with_prefix(prefix: 'definedivar_fallback_', prompt: 'definedivar fallback reasons', buf:, stats:, limit: 5)
print_counters_with_prefix(prefix: 'invokeblock_handler_', prompt: 'invokeblock handler', buf:, stats:, limit: 10)
# Show most popular unsupported call features. Because each call can
@@ -201,6 +204,9 @@ class << RubyVM::ZJIT
:send_count,
:dynamic_send_count,
:optimized_send_count,
+ :dynamic_setivar_count,
+ :dynamic_getivar_count,
+ :dynamic_definedivar_count,
:iseq_optimized_send_count,
:inline_cfunc_optimized_send_count,
:inline_iseq_optimized_send_count,
@@ -208,9 +214,6 @@ class << RubyVM::ZJIT
:variadic_cfunc_optimized_send_count,
], buf:, stats:, right_align: true, base: :send_count)
print_counters([
- :dynamic_getivar_count,
- :dynamic_setivar_count,
-
:compiled_iseq_count,
:failed_iseq_count,