diff options
author | Maxime Chevalier-Boisvert <maximechevalierb@gmail.com> | 2021-04-24 00:16:48 -0400 |
---|---|---|
committer | Alan Wu <XrXr@users.noreply.github.com> | 2021-10-20 18:19:34 -0400 |
commit | 96f4f918b04fad1401d4f41cd11d97d9d4d28c7d (patch) | |
tree | 27959163baee644317499d709913c12fc683890b /yjit_codegen.c | |
parent | 4c7afa64b49d792da586709b2bbc1aa2f04b5712 (diff) |
Implement greedy versioning. Refactor versioning logic. (#10)
* Implement eager versioning. Refactor versioning logic.
* Add --version-limit and --greedy-versioning command-line args
Diffstat (limited to 'yjit_codegen.c')
-rw-r--r-- | yjit_codegen.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/yjit_codegen.c b/yjit_codegen.c index 9fd8476e3d..c545024b16 100644 --- a/yjit_codegen.c +++ b/yjit_codegen.c @@ -336,10 +336,15 @@ jit_jump_to_next_insn(jitstate_t *jit, const ctx_t *current_context) // Compile a sequence of bytecode instructions for a given basic block version void -yjit_gen_block(ctx_t *ctx, block_t *block, rb_execution_context_t *ec) +yjit_gen_block(block_t *block, rb_execution_context_t *ec) { RUBY_ASSERT(cb != NULL); RUBY_ASSERT(block != NULL); + RUBY_ASSERT(!(block->blockid.idx == 0 && block->ctx.stack_size > 0)); + + // Copy the block's context to avoid mutating it + ctx_t ctx_copy = block->ctx; + ctx_t* ctx = &ctx_copy; const rb_iseq_t *iseq = block->blockid.iseq; uint32_t insn_idx = block->blockid.idx; |