Skip to content

Commit

Permalink
YJIT: Fallback megamorphic opt_case_dispatch (#9894)
Browse files Browse the repository at this point in the history
  • Loading branch information
k0kubun committed Feb 9, 2024
1 parent 80490ac commit 717adb5
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 3 deletions.
5 changes: 3 additions & 2 deletions yjit.rb
Expand Up @@ -323,8 +323,9 @@ def _print_stats(out: $stderr) # :nodoc:
out.puts "num_send_x86_rel32: " + format_number(13, stats[:num_send_x86_rel32])
out.puts "num_send_x86_reg: " + format_number(13, stats[:num_send_x86_reg])
end
out.puts "num_getivar_megamorphic: " + format_number(13, stats[:num_getivar_megamorphic])
out.puts "num_setivar_megamorphic: " + format_number(13, stats[:num_setivar_megamorphic])
out.puts "num_getivar_megamorphic: " + format_number(11, stats[:num_getivar_megamorphic])
out.puts "num_setivar_megamorphic: " + format_number(11, stats[:num_setivar_megamorphic])
out.puts "num_opt_case_megamorphic: " + format_number(10, stats[:num_opt_case_dispatch_megamorphic])
out.puts "num_throw: " + format_number(13, stats[:num_throw])
out.puts "num_throw_break: " + format_number_pct(13, stats[:num_throw_break], stats[:num_throw])
out.puts "num_throw_retry: " + format_number_pct(13, stats[:num_throw_retry], stats[:num_throw])
Expand Down
8 changes: 7 additions & 1 deletion yjit/src/codegen.rs
Expand Up @@ -4037,7 +4037,13 @@ fn gen_opt_case_dispatch(
all_fixnum
}

if comptime_key.fixnum_p() && comptime_key.0 <= u32::MAX.as_usize() && case_hash_all_fixnum_p(case_hash) {
// If megamorphic, fallback to compiling branch instructions after opt_case_dispatch
let megamorphic = asm.ctx.get_chain_depth() >= CASE_WHEN_MAX_DEPTH;
if megamorphic {
gen_counter_incr(asm, Counter::num_opt_case_dispatch_megamorphic);
}

if comptime_key.fixnum_p() && comptime_key.0 <= u32::MAX.as_usize() && case_hash_all_fixnum_p(case_hash) && !megamorphic {
if !assume_bop_not_redefined(jit, asm, ocb, INTEGER_REDEFINED_OP_FLAG, BOP_EQQ) {
return None;
}
Expand Down
1 change: 1 addition & 0 deletions yjit/src/stats.rs
Expand Up @@ -592,6 +592,7 @@ make_counters! {

num_getivar_megamorphic,
num_setivar_megamorphic,
num_opt_case_dispatch_megamorphic,

num_throw,
num_throw_break,
Expand Down

0 comments on commit 717adb5

Please sign in to comment.