summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/mjit/compiler.rb11
-rw-r--r--mjit_c.h2
-rw-r--r--mjit_c.rb11
-rw-r--r--mjit_compiler.c11
4 files changed, 3 insertions, 32 deletions
diff --git a/lib/mjit/compiler.rb b/lib/mjit/compiler.rb
index a21b3298fd..98d82ac507 100644
--- a/lib/mjit/compiler.rb
+++ b/lib/mjit/compiler.rb
@@ -330,10 +330,10 @@ class RubyVM::MJIT::Compiler
end
def compile_ivar(insn_name, stack_size, pos, status, operands, body)
- ic_copy = (status.is_entries + (C.iseq_inline_storage_entry.new(operands[1]) - body.is_entries)).iv_cache
- dest_shape_id = ic_copy.value >> C.SHAPE_FLAG_SHIFT
+ iv_cache = C.iseq_inline_storage_entry.new(operands[1]).iv_cache
+ dest_shape_id = iv_cache.value >> C.SHAPE_FLAG_SHIFT
source_shape_id = parent_shape_id(dest_shape_id)
- attr_index = ic_copy.value & ((1 << C.SHAPE_FLAG_SHIFT) - 1)
+ attr_index = iv_cache.value & ((1 << C.SHAPE_FLAG_SHIFT) - 1)
src = +''
if !status.compile_info.disable_ivar_cache && source_shape_id != C.INVALID_SHAPE_ID
@@ -769,9 +769,6 @@ class RubyVM::MJIT::Compiler
status.inlined_iseqs[i] = nil
end
end
- if ISEQ_IS_SIZE(body) > 0
- status.is_entries = Fiddle.malloc(C.iseq_inline_storage_entry.sizeof * ISEQ_IS_SIZE(body))
- end
if body.ci_size > 0
status.cc_entries_index = C.mjit_capture_cc_entries(status.compiled_iseq, body)
else
@@ -790,8 +787,6 @@ class RubyVM::MJIT::Compiler
end
def init_ivar_compile_status(body, status)
- C.mjit_capture_is_entries(body, status.is_entries)
-
pos = 0
while pos < body.iseq_size
diff --git a/mjit_c.h b/mjit_c.h
index 01d624233a..bd3c5134e6 100644
--- a/mjit_c.h
+++ b/mjit_c.h
@@ -39,8 +39,6 @@ struct compile_status {
// If true, JIT-ed code will use local variables to store pushed values instead of
// using VM's stack and moving stack pointer.
bool local_stack_p;
- // Safely-accessible ivar cache entries copied from main thread.
- union iseq_inline_storage_entry *is_entries;
// Index of call cache entries captured to compiled_iseq to be marked on GC
int cc_entries_index;
// A pointer to root (i.e. not inlined) iseq being compiled.
diff --git a/mjit_c.rb b/mjit_c.rb
index 05cd53dc4b..aaa407ee16 100644
--- a/mjit_c.rb
+++ b/mjit_c.rb
@@ -77,16 +77,6 @@ module RubyVM::MJIT
Primitive.cexpr! 'INT2NUM(mjit_capture_cc_entries((struct rb_iseq_constant_body *)NUM2PTR(_compiled_body_addr), (struct rb_iseq_constant_body *)NUM2PTR(_captured_body_addr)))'
end
- #const struct rb_iseq_constant_body *body, union iseq_inline_storage_entry *is_entries
- def mjit_capture_is_entries(body, is_entries)
- _body_addr = body.to_i
- _is_entries_addr = is_entries.to_i
- Primitive.cstmt! %{
- mjit_capture_is_entries((struct rb_iseq_constant_body *)NUM2PTR(_body_addr), (union iseq_inline_storage_entry *)NUM2PTR(_is_entries_addr));
- return Qnil;
- }
- end
-
# Convert encoded VM pointers to insn BINs.
def rb_vm_insn_decode(encoded)
Primitive.cexpr! 'INT2NUM(rb_vm_insn_decode(NUM2PTR(encoded)))'
@@ -246,7 +236,6 @@ module RubyVM::MJIT
success: [self._Bool, Primitive.cexpr!("OFFSETOF((*((struct compile_status *)NULL)), success)")],
stack_size_for_pos: [CType::Pointer.new { CType::Immediate.parse("int") }, Primitive.cexpr!("OFFSETOF((*((struct compile_status *)NULL)), stack_size_for_pos)")],
local_stack_p: [self._Bool, Primitive.cexpr!("OFFSETOF((*((struct compile_status *)NULL)), local_stack_p)")],
- is_entries: [CType::Pointer.new { self.iseq_inline_storage_entry }, Primitive.cexpr!("OFFSETOF((*((struct compile_status *)NULL)), is_entries)")],
cc_entries_index: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF((*((struct compile_status *)NULL)), cc_entries_index)")],
compiled_iseq: [CType::Pointer.new { self.rb_iseq_constant_body }, Primitive.cexpr!("OFFSETOF((*((struct compile_status *)NULL)), compiled_iseq)")],
compiled_id: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF((*((struct compile_status *)NULL)), compiled_id)")],
diff --git a/mjit_compiler.c b/mjit_compiler.c
index 5d5d25c1ae..6f0cfaa452 100644
--- a/mjit_compiler.c
+++ b/mjit_compiler.c
@@ -104,17 +104,6 @@ cdhash_each(VALUE key, VALUE value, VALUE hash)
extern int
mjit_capture_cc_entries(const struct rb_iseq_constant_body *compiled_iseq, const struct rb_iseq_constant_body *captured_iseq);
-// Copy current is_entries and use it throughout the current compilation consistently.
-// While ic->entry has been immutable since https://github.com/ruby/ruby/pull/3662,
-// we still need this to avoid a race condition between entries and ivar_serial/max_ivar_index.
-static void
-mjit_capture_is_entries(const struct rb_iseq_constant_body *body, union iseq_inline_storage_entry *is_entries)
-{
- if (is_entries == NULL)
- return;
- memcpy(is_entries, body->is_entries, sizeof(union iseq_inline_storage_entry) * ISEQ_IS_SIZE(body));
-}
-
// Compile ISeq to C code in `f`. It returns true if it succeeds to compile.
bool
mjit_compile(FILE *f, const rb_iseq_t *iseq, const char *funcname, int id)