Count unsupported method types

This commit is contained in:
Takashi Kokubun 2023-02-08 14:24:10 -08:00
Родитель 64074ca4df
Коммит fa9a0cb970
4 изменённых файлов: 81 добавлений и 3 удалений

Просмотреть файл

@ -992,8 +992,35 @@ module RubyVM::MJIT
case cme.def.type
when C.VM_METHOD_TYPE_ISEQ
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
asm.incr_counter(:send_not_iseq)
asm.incr_counter(:send_not_implemented_type)
return CantCompile
end
end

Просмотреть файл

@ -114,10 +114,18 @@ MJIT_RUNTIME_COUNTERS(
send_kw_splat,
send_kwarg,
send_missing_cme,
send_not_iseq,
send_private,
send_protected,
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_true,

Просмотреть файл

@ -411,6 +411,18 @@ module RubyVM::MJIT # :nodoc: all
Primitive.cexpr! %q{ UINT2NUM(VM_FRAME_MAGIC_METHOD) }
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
Primitive.cexpr! %q{ UINT2NUM(VM_METHOD_TYPE_CFUNC) }
end
@ -419,6 +431,22 @@ module RubyVM::MJIT # :nodoc: all
Primitive.cexpr! %q{ UINT2NUM(VM_METHOD_TYPE_ISEQ) }
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
Primitive.cexpr! %q{ ULONG2NUM(INVALID_SHAPE_ID) }
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_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_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_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_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_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)")],

Просмотреть файл

@ -380,6 +380,13 @@ generator = BindingGenerator.new(
VM_FRAME_MAGIC_METHOD
VM_METHOD_TYPE_CFUNC
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[
INVALID_SHAPE_ID