summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--yjit.rb4
-rw-r--r--yjit/src/codegen.rs9
-rw-r--r--yjit/src/stats.rs3
3 files changed, 16 insertions, 0 deletions
diff --git a/yjit.rb b/yjit.rb
index 459d58f918..807541e0a5 100644
--- a/yjit.rb
+++ b/yjit.rb
@@ -272,6 +272,10 @@ module RubyVM::YJIT
$stderr.puts "block_next_count: " + format_number(13, stats[:block_next_count])
$stderr.puts "defer_count: " + format_number(13, stats[:defer_count])
$stderr.puts "defer_empty_count: " + format_number(13, stats[:defer_empty_count])
+
+ $stderr.puts "branch_insn_count: " + format_number(13, stats[:branch_insn_count])
+ $stderr.puts "branch_known_count: " + format_number_pct(13, stats[:branch_known_count], stats[:branch_insn_count])
+
$stderr.puts "freed_iseq_count: " + format_number(13, stats[:freed_iseq_count])
$stderr.puts "invalidation_count: " + format_number(13, stats[:invalidation_count])
$stderr.puts "constant_state_bumps: " + format_number(13, stats[:constant_state_bumps])
diff --git a/yjit/src/codegen.rs b/yjit/src/codegen.rs
index 257e865bc1..0afed2effa 100644
--- a/yjit/src/codegen.rs
+++ b/yjit/src/codegen.rs
@@ -3577,9 +3577,12 @@ fn gen_branchif(
let val_type = ctx.get_opnd_type(StackOpnd(0));
let val_opnd = ctx.stack_pop(1);
+ incr_counter!(branch_insn_count);
+
if let Some(result) = val_type.known_truthy() {
let target = if result { jump_block } else { next_block };
gen_direct_jump(jit, ctx, target, asm);
+ incr_counter!(branch_known_count);
} else {
asm.test(val_opnd, Opnd::Imm(!Qnil.as_i64()));
@@ -3628,9 +3631,12 @@ fn gen_branchunless(
let val_type = ctx.get_opnd_type(StackOpnd(0));
let val_opnd = ctx.stack_pop(1);
+ incr_counter!(branch_insn_count);
+
if let Some(result) = val_type.known_truthy() {
let target = if result { next_block } else { jump_block };
gen_direct_jump(jit, ctx, target, asm);
+ incr_counter!(branch_known_count);
} else {
// Test if any bit (outside of the Qnil bit) is on
// See RB_TEST()
@@ -3682,9 +3688,12 @@ fn gen_branchnil(
let val_type = ctx.get_opnd_type(StackOpnd(0));
let val_opnd = ctx.stack_pop(1);
+ incr_counter!(branch_insn_count);
+
if let Some(result) = val_type.known_nil() {
let target = if result { jump_block } else { next_block };
gen_direct_jump(jit, ctx, target, asm);
+ incr_counter!(branch_known_count);
} else {
// Test if the value is Qnil
asm.cmp(val_opnd, Opnd::UImm(Qnil.into()));
diff --git a/yjit/src/stats.rs b/yjit/src/stats.rs
index 014030bf64..b213af8503 100644
--- a/yjit/src/stats.rs
+++ b/yjit/src/stats.rs
@@ -324,6 +324,9 @@ make_counters! {
block_next_count,
defer_count,
defer_empty_count,
+ branch_insn_count,
+ branch_known_count,
+
freed_iseq_count,
exit_from_branch_stub,