RJIT: Skip a class guard if known to be T_STRING
This commit is contained in:
parent
9bef39de74
commit
65d27d3c0a
@ -3878,9 +3878,12 @@ module RubyVM::RJIT
|
|||||||
asm.je(equal_label)
|
asm.je(equal_label)
|
||||||
|
|
||||||
# Otherwise guard that b is a T_STRING (from type info) or String (from runtime guard)
|
# Otherwise guard that b is a T_STRING (from type info) or String (from runtime guard)
|
||||||
# Note: any T_STRING is valid here, but we check for a ::String for simplicity
|
btype = ctx.get_opnd_type(StackOpnd[0])
|
||||||
# To pass a mutable static variable (rb_cString) requires an unsafe block
|
unless btype.string?
|
||||||
jit_guard_known_klass(jit, ctx, asm, C.rb_class_of(comptime_b), b_opnd, StackOpnd[0], comptime_b, side_exit)
|
# Note: any T_STRING is valid here, but we check for a ::String for simplicity
|
||||||
|
# To pass a mutable static variable (rb_cString) requires an unsafe block
|
||||||
|
jit_guard_known_klass(jit, ctx, asm, C.rb_class_of(comptime_b), b_opnd, StackOpnd[0], comptime_b, side_exit)
|
||||||
|
end
|
||||||
|
|
||||||
asm.comment('call rb_str_eql_internal')
|
asm.comment('call rb_str_eql_internal')
|
||||||
asm.mov(C_ARGS[0], a_opnd)
|
asm.mov(C_ARGS[0], a_opnd)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user