Skip to content

ZJIT: Specialize send with caller_blockarg #1002

Description

@k0kubun

On lobsters,

Top-20 send fallback reasons (99.9% of total 4,681,626):
                             invokeblock_not_specialized: 1,962,606 (41.9%)
                            one_or_more_complex_arg_pass:   914,920 (19.5%)
                          send_without_block_polymorphic:   508,454 (10.9%)
                          send_without_block_no_profiles:   316,413 ( 6.8%)
                          send_without_block_megamorphic:   246,494 ( 5.3%)
                             sendforward_not_specialized:   217,984 ( 4.7%)
                                        send_polymorphic:   124,354 ( 2.7%)
  send_without_block_not_optimized_method_type_optimized:    97,655 ( 2.1%)
                                   too_many_args_for_lir:    74,307 ( 1.6%)

Next to invokeblock_not_specialized, one_or_more_complex_arg_pass is the #2 fallback reason.

Top-7 popular complex argument-parameter features not optimized (100.0% of total 1,017,314):
    caller_blockarg: 571,544 (56.2%)
  param_forwardable: 217,399 (21.4%)
         param_rest:  97,788 ( 9.6%)
       caller_kwarg:  67,957 ( 6.7%)
       param_kwrest:  35,286 ( 3.5%)
       caller_splat:  14,132 ( 1.4%)
    caller_kw_splat:  13,208 ( 1.3%)

caller_blockarg is the most frequent reason for one_or_more_complex_arg_pass on lobsters.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions