summaryrefslogtreecommitdiff
path: root/yjit_core.c
diff options
context:
space:
mode:
authorJohn Hawthorn <john@hawthorn.email>2021-08-01 13:05:51 -0700
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:38 -0400
commit641ef34ddec2f8dd9af951f419fb084befea8175 (patch)
treeb68d4fa78b6ec6ef2ab14a027b4c67cfb56408a1 /yjit_core.c
parent5d155fc8a1c44087142539d51b27410388552599 (diff)
Allow upgrading first N types when stack is large
Diffstat (limited to 'yjit_core.c')
-rw-r--r--yjit_core.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/yjit_core.c b/yjit_core.c
index 0d9464e0bd..45386dea23 100644
--- a/yjit_core.c
+++ b/yjit_core.c
@@ -175,13 +175,14 @@ void ctx_upgrade_opnd_type(ctx_t* ctx, insn_opnd_t opnd, val_type_t type)
return;
}
- if (ctx->stack_size >= MAX_TEMP_TYPES)
+ RUBY_ASSERT(opnd.idx < ctx->stack_size);
+ int stack_idx = ctx->stack_size - 1 - opnd.idx;
+
+ // If outside of tracked range, do nothing
+ if (stack_idx >= MAX_TEMP_TYPES)
return;
- RUBY_ASSERT(opnd.idx < ctx->stack_size);
- int stack_index = ctx->stack_size - 1 - opnd.idx;
- RUBY_ASSERT(stack_index < MAX_TEMP_TYPES);
- temp_mapping_t mapping = ctx->temp_mapping[stack_index];
+ temp_mapping_t mapping = ctx->temp_mapping[stack_idx];
switch (mapping.kind)
{
@@ -190,7 +191,7 @@ void ctx_upgrade_opnd_type(ctx_t* ctx, insn_opnd_t opnd, val_type_t type)
break;
case TEMP_STACK:
- UPGRADE_TYPE(ctx->temp_types[stack_index], type);
+ UPGRADE_TYPE(ctx->temp_types[stack_idx], type);
break;
case TEMP_LOCAL: