summaryrefslogtreecommitdiff
path: root/yjit_codegen.c
diff options
context:
space:
mode:
authorMaxime Chevalier-Boisvert <maximechevalierb@gmail.com>2021-04-24 00:16:48 -0400
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:34 -0400
commit96f4f918b04fad1401d4f41cd11d97d9d4d28c7d (patch)
tree27959163baee644317499d709913c12fc683890b /yjit_codegen.c
parent4c7afa64b49d792da586709b2bbc1aa2f04b5712 (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.c7
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;