YJIT: Remove unnecessary casts for chain_depth (#9893)

This commit is contained in:
Takashi Kokubun 2024-02-08 15:52:45 -08:00 committed by GitHub
parent 5cbca9110c
commit e2aa00ca66
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -2277,7 +2277,7 @@ fn jit_chain_guard(
jit: &mut JITState, jit: &mut JITState,
asm: &mut Assembler, asm: &mut Assembler,
ocb: &mut OutlinedCb, ocb: &mut OutlinedCb,
depth_limit: i32, depth_limit: u8,
counter: Counter, counter: Counter,
) { ) {
let target0_gen_fn = match jcc { let target0_gen_fn = match jcc {
@ -2288,7 +2288,7 @@ fn jit_chain_guard(
JCC_JO_MUL => BranchGenFn::JOMulToTarget0, JCC_JO_MUL => BranchGenFn::JOMulToTarget0,
}; };
if (asm.ctx.get_chain_depth() as i32) < depth_limit { if asm.ctx.get_chain_depth() < depth_limit {
// Rewind Context to use the stack_size at the beginning of this instruction. // Rewind Context to use the stack_size at the beginning of this instruction.
let mut deeper = asm.ctx.with_stack_size(jit.stack_size_for_pc); let mut deeper = asm.ctx.with_stack_size(jit.stack_size_for_pc);
deeper.increment_chain_depth(); deeper.increment_chain_depth();
@ -2304,22 +2304,22 @@ fn jit_chain_guard(
} }
// up to 8 different shapes for each // up to 8 different shapes for each
pub const GET_IVAR_MAX_DEPTH: i32 = 8; pub const GET_IVAR_MAX_DEPTH: u8 = 8;
// up to 8 different shapes for each // up to 8 different shapes for each
pub const SET_IVAR_MAX_DEPTH: i32 = 8; pub const SET_IVAR_MAX_DEPTH: u8 = 8;
// hashes and arrays // hashes and arrays
pub const OPT_AREF_MAX_CHAIN_DEPTH: i32 = 2; pub const OPT_AREF_MAX_CHAIN_DEPTH: u8 = 2;
// expandarray // expandarray
pub const EXPANDARRAY_MAX_CHAIN_DEPTH: i32 = 4; pub const EXPANDARRAY_MAX_CHAIN_DEPTH: u8 = 4;
// up to 5 different methods for send // up to 5 different methods for send
pub const SEND_MAX_DEPTH: i32 = 5; pub const SEND_MAX_DEPTH: u8 = 5;
// up to 20 different offsets for case-when // up to 20 different offsets for case-when
pub const CASE_WHEN_MAX_DEPTH: i32 = 20; pub const CASE_WHEN_MAX_DEPTH: u8 = 20;
pub const MAX_SPLAT_LENGTH: i32 = 127; pub const MAX_SPLAT_LENGTH: i32 = 127;
@ -2374,7 +2374,7 @@ fn gen_get_ivar(
jit: &mut JITState, jit: &mut JITState,
asm: &mut Assembler, asm: &mut Assembler,
ocb: &mut OutlinedCb, ocb: &mut OutlinedCb,
max_chain_depth: i32, max_chain_depth: u8,
comptime_receiver: VALUE, comptime_receiver: VALUE,
ivar_name: ID, ivar_name: ID,
recv: Opnd, recv: Opnd,
@ -2401,7 +2401,7 @@ fn gen_get_ivar(
// Check if the comptime receiver is a T_OBJECT // Check if the comptime receiver is a T_OBJECT
let receiver_t_object = unsafe { RB_TYPE_P(comptime_receiver, RUBY_T_OBJECT) }; let receiver_t_object = unsafe { RB_TYPE_P(comptime_receiver, RUBY_T_OBJECT) };
// Use a general C call at the last chain to avoid exits on megamorphic shapes // Use a general C call at the last chain to avoid exits on megamorphic shapes
let megamorphic = asm.ctx.get_chain_depth() as i32 >= max_chain_depth; let megamorphic = asm.ctx.get_chain_depth() >= max_chain_depth;
if megamorphic { if megamorphic {
gen_counter_incr(asm, Counter::num_getivar_megamorphic); gen_counter_incr(asm, Counter::num_getivar_megamorphic);
} }
@ -2613,7 +2613,7 @@ fn gen_setinstancevariable(
// Check if the comptime receiver is a T_OBJECT // Check if the comptime receiver is a T_OBJECT
let receiver_t_object = unsafe { RB_TYPE_P(comptime_receiver, RUBY_T_OBJECT) }; let receiver_t_object = unsafe { RB_TYPE_P(comptime_receiver, RUBY_T_OBJECT) };
// Use a general C call at the last chain to avoid exits on megamorphic shapes // Use a general C call at the last chain to avoid exits on megamorphic shapes
let megamorphic = asm.ctx.get_chain_depth() as i32 >= SET_IVAR_MAX_DEPTH; let megamorphic = asm.ctx.get_chain_depth() >= SET_IVAR_MAX_DEPTH;
if megamorphic { if megamorphic {
gen_counter_incr(asm, Counter::num_setivar_megamorphic); gen_counter_incr(asm, Counter::num_setivar_megamorphic);
} }
@ -2865,7 +2865,7 @@ fn gen_definedivar(
// Specialize base on compile time values // Specialize base on compile time values
let comptime_receiver = jit.peek_at_self(); let comptime_receiver = jit.peek_at_self();
if comptime_receiver.shape_too_complex() || asm.ctx.get_chain_depth() as i32 >= GET_IVAR_MAX_DEPTH { if comptime_receiver.shape_too_complex() || asm.ctx.get_chain_depth() >= GET_IVAR_MAX_DEPTH {
// Fall back to calling rb_ivar_defined // Fall back to calling rb_ivar_defined
// Save the PC and SP because the callee may allocate // Save the PC and SP because the callee may allocate
@ -4321,7 +4321,7 @@ fn jit_guard_known_klass(
obj_opnd: Opnd, obj_opnd: Opnd,
insn_opnd: YARVOpnd, insn_opnd: YARVOpnd,
sample_instance: VALUE, sample_instance: VALUE,
max_chain_depth: i32, max_chain_depth: u8,
counter: Counter, counter: Counter,
) { ) {
let val_type = asm.ctx.get_opnd_type(insn_opnd); let val_type = asm.ctx.get_opnd_type(insn_opnd);
@ -7654,7 +7654,7 @@ fn gen_send_general(
gen_counter_incr(asm, Counter::num_send_polymorphic); gen_counter_incr(asm, Counter::num_send_polymorphic);
} }
// If megamorphic, let the caller fallback to dynamic dispatch // If megamorphic, let the caller fallback to dynamic dispatch
if asm.ctx.get_chain_depth() as i32 >= SEND_MAX_DEPTH { if asm.ctx.get_chain_depth() >= SEND_MAX_DEPTH {
gen_counter_incr(asm, Counter::send_megamorphic); gen_counter_incr(asm, Counter::send_megamorphic);
return None; return None;
} }
@ -8173,7 +8173,7 @@ fn gen_invokeblock_specialized(
} }
// Fallback to dynamic dispatch if this callsite is megamorphic // Fallback to dynamic dispatch if this callsite is megamorphic
if asm.ctx.get_chain_depth() as i32 >= SEND_MAX_DEPTH { if asm.ctx.get_chain_depth() >= SEND_MAX_DEPTH {
gen_counter_incr(asm, Counter::invokeblock_megamorphic); gen_counter_incr(asm, Counter::invokeblock_megamorphic);
return None; return None;
} }
@ -8354,7 +8354,7 @@ fn gen_invokesuper_specialized(
}; };
// Fallback to dynamic dispatch if this callsite is megamorphic // Fallback to dynamic dispatch if this callsite is megamorphic
if asm.ctx.get_chain_depth() as i32 >= SEND_MAX_DEPTH { if asm.ctx.get_chain_depth() >= SEND_MAX_DEPTH {
gen_counter_incr(asm, Counter::invokesuper_megamorphic); gen_counter_incr(asm, Counter::invokesuper_megamorphic);
return None; return None;
} }