Count unsupported method types

This commit is contained in:
Takashi Kokubun 2023-02-08 14:24:10 -08:00
parent 64074ca4df
commit fa9a0cb970
4 changed files with 81 additions and 3 deletions

View file

@ -992,8 +992,35 @@ module RubyVM::MJIT
case cme.def.type case cme.def.type
when C.VM_METHOD_TYPE_ISEQ when C.VM_METHOD_TYPE_ISEQ
jit_call_iseq_setup(jit, ctx, asm, ci, cme, flags, argc) jit_call_iseq_setup(jit, ctx, asm, ci, cme, flags, argc)
# when C.VM_METHOD_TYPE_NOTIMPLEMENTED
when C.VM_METHOD_TYPE_CFUNC
asm.incr_counter(:send_cfunc)
return CantCompile
when C.VM_METHOD_TYPE_ATTRSET
asm.incr_counter(:send_attrset)
return CantCompile
when C.VM_METHOD_TYPE_IVAR
asm.incr_counter(:send_ivar)
return CantCompile
# when C.VM_METHOD_TYPE_MISSING
when C.VM_METHOD_TYPE_BMETHOD
asm.incr_counter(:send_bmethod)
return CantCompile
when C.VM_METHOD_TYPE_ALIAS
asm.incr_counter(:send_alias)
return CantCompile
when C.VM_METHOD_TYPE_OPTIMIZED
asm.incr_counter(:send_optimized)
return CantCompile
# when C.VM_METHOD_TYPE_UNDEF
when C.VM_METHOD_TYPE_ZSUPER
asm.incr_counter(:send_zsuper)
return CantCompile
when C.VM_METHOD_TYPE_REFINED
asm.incr_counter(:send_refined)
return CantCompile
else else
asm.incr_counter(:send_not_iseq) asm.incr_counter(:send_not_implemented_type)
return CantCompile return CantCompile
end end
end end

View file

@ -114,10 +114,18 @@ MJIT_RUNTIME_COUNTERS(
send_kw_splat, send_kw_splat,
send_kwarg, send_kwarg,
send_missing_cme, send_missing_cme,
send_not_iseq,
send_private, send_private,
send_protected, send_protected,
send_tailcall, send_tailcall,
send_not_implemented_type,
send_cfunc,
send_ivar,
send_attrset,
send_bmethod,
send_alias,
send_optimized,
send_zsuper,
send_refined,
send_guard_nil, send_guard_nil,
send_guard_true, send_guard_true,

View file

@ -411,6 +411,18 @@ module RubyVM::MJIT # :nodoc: all
Primitive.cexpr! %q{ UINT2NUM(VM_FRAME_MAGIC_METHOD) } Primitive.cexpr! %q{ UINT2NUM(VM_FRAME_MAGIC_METHOD) }
end end
def C.VM_METHOD_TYPE_ALIAS
Primitive.cexpr! %q{ UINT2NUM(VM_METHOD_TYPE_ALIAS) }
end
def C.VM_METHOD_TYPE_ATTRSET
Primitive.cexpr! %q{ UINT2NUM(VM_METHOD_TYPE_ATTRSET) }
end
def C.VM_METHOD_TYPE_BMETHOD
Primitive.cexpr! %q{ UINT2NUM(VM_METHOD_TYPE_BMETHOD) }
end
def C.VM_METHOD_TYPE_CFUNC def C.VM_METHOD_TYPE_CFUNC
Primitive.cexpr! %q{ UINT2NUM(VM_METHOD_TYPE_CFUNC) } Primitive.cexpr! %q{ UINT2NUM(VM_METHOD_TYPE_CFUNC) }
end end
@ -419,6 +431,22 @@ module RubyVM::MJIT # :nodoc: all
Primitive.cexpr! %q{ UINT2NUM(VM_METHOD_TYPE_ISEQ) } Primitive.cexpr! %q{ UINT2NUM(VM_METHOD_TYPE_ISEQ) }
end end
def C.VM_METHOD_TYPE_IVAR
Primitive.cexpr! %q{ UINT2NUM(VM_METHOD_TYPE_IVAR) }
end
def C.VM_METHOD_TYPE_OPTIMIZED
Primitive.cexpr! %q{ UINT2NUM(VM_METHOD_TYPE_OPTIMIZED) }
end
def C.VM_METHOD_TYPE_REFINED
Primitive.cexpr! %q{ UINT2NUM(VM_METHOD_TYPE_REFINED) }
end
def C.VM_METHOD_TYPE_ZSUPER
Primitive.cexpr! %q{ UINT2NUM(VM_METHOD_TYPE_ZSUPER) }
end
def C.INVALID_SHAPE_ID def C.INVALID_SHAPE_ID
Primitive.cexpr! %q{ ULONG2NUM(INVALID_SHAPE_ID) } Primitive.cexpr! %q{ ULONG2NUM(INVALID_SHAPE_ID) }
end end
@ -884,10 +912,18 @@ module RubyVM::MJIT # :nodoc: all
send_kw_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_kw_splat)")], send_kw_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_kw_splat)")],
send_kwarg: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_kwarg)")], send_kwarg: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_kwarg)")],
send_missing_cme: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_missing_cme)")], send_missing_cme: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_missing_cme)")],
send_not_iseq: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_not_iseq)")],
send_private: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_private)")], send_private: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_private)")],
send_protected: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_protected)")], send_protected: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_protected)")],
send_tailcall: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_tailcall)")], send_tailcall: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_tailcall)")],
send_not_implemented_type: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_not_implemented_type)")],
send_cfunc: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_cfunc)")],
send_ivar: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_ivar)")],
send_attrset: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_attrset)")],
send_bmethod: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_bmethod)")],
send_alias: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_alias)")],
send_optimized: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_optimized)")],
send_zsuper: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_zsuper)")],
send_refined: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_refined)")],
send_guard_nil: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_guard_nil)")], send_guard_nil: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_guard_nil)")],
send_guard_true: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_guard_true)")], send_guard_true: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_guard_true)")],
send_guard_false: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_guard_false)")], send_guard_false: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_mjit_runtime_counters *)NULL)), send_guard_false)")],

View file

@ -380,6 +380,13 @@ generator = BindingGenerator.new(
VM_FRAME_MAGIC_METHOD VM_FRAME_MAGIC_METHOD
VM_METHOD_TYPE_CFUNC VM_METHOD_TYPE_CFUNC
VM_METHOD_TYPE_ISEQ VM_METHOD_TYPE_ISEQ
VM_METHOD_TYPE_IVAR
VM_METHOD_TYPE_ATTRSET
VM_METHOD_TYPE_BMETHOD
VM_METHOD_TYPE_ALIAS
VM_METHOD_TYPE_OPTIMIZED
VM_METHOD_TYPE_ZSUPER
VM_METHOD_TYPE_REFINED
], ],
ULONG: %w[ ULONG: %w[
INVALID_SHAPE_ID INVALID_SHAPE_ID