summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2023-02-08 16:55:50 -0800
committerTakashi Kokubun <takashikkbn@gmail.com>2023-03-05 22:41:35 -0800
commit50bd7326c1a09c9c28f5483299c3f199ac8da7b5 (patch)
treeadd1b445ab622606cbba8d06473a440fc90fbb1d
parentecae1cd74e2f60f07399df8bf2023967bd605abf (diff)
Skip Hash on opt_aref for now
-rw-r--r--lib/ruby_vm/mjit/insn_compiler.rb7
-rw-r--r--mjit_c.h1
-rw-r--r--mjit_c.rb1
3 files changed, 9 insertions, 0 deletions
diff --git a/lib/ruby_vm/mjit/insn_compiler.rb b/lib/ruby_vm/mjit/insn_compiler.rb
index 8553f644a6..6f96e57ff1 100644
--- a/lib/ruby_vm/mjit/insn_compiler.rb
+++ b/lib/ruby_vm/mjit/insn_compiler.rb
@@ -541,6 +541,13 @@ module RubyVM::MJIT
asm.incr_counter(:optaref_array)
CantCompile
elsif comptime_recv.class == Hash
+ # jit_prepare_routine_call seems to break something. Disabled until we figure it out.
+ disabled = true
+ if disabled
+ asm.incr_counter(:optaref_hash)
+ return CantCompile
+ end
+
unless @invariants.assume_bop_not_redefined(jit, C.HASH_REDEFINED_OP_FLAG, C.BOP_AREF)
return CantCompile
end
diff --git a/mjit_c.h b/mjit_c.h
index 659701d038..536a00fc49 100644
--- a/mjit_c.h
+++ b/mjit_c.h
@@ -147,6 +147,7 @@ MJIT_RUNTIME_COUNTERS(
optaref_argc_not_one,
optaref_array,
+ optaref_hash,
optaref_not_hash,
optaref_send,
diff --git a/mjit_c.rb b/mjit_c.rb
index 21c2a0c840..c9ee5f55f3 100644
--- a/mjit_c.rb
+++ b/mjit_c.rb
@@ -957,6 +957,7 @@ module RubyVM::MJIT # :nodoc: all
getivar_too_complex: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), getivar_too_complex)")],
optaref_argc_not_one: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), optaref_argc_not_one)")],
optaref_array: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), optaref_array)")],
+ optaref_hash: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), optaref_hash)")],
optaref_not_hash: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), optaref_not_hash)")],
optaref_send: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), optaref_send)")],
compiled_block_count: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), compiled_block_count)")],