Skip to content

Split opcodes into micro-ops #104909

Closed
Closed
@gvanrossum

Description

@gvanrossum

See faster-cpython/ideas#592. This project can be parallelized, and I could use help!

Note that initially we don't have a tier-2 interpreter or instruction format defined yet, but the first stage of splitting doesn't require that.

Remaining non-viable ops

With usage stats from the latest weekly pyperformance run (not all are uop candidates):

        956,835,460 YIELD_VALUE                        
        490,121,077 SEND_GEN                            (specialization of SEND)
        429,220,003 JUMP_FORWARD                       
        410,623,920 EXTENDED_ARG                       
        390,537,200 JUMP_BACKWARD_NO_INTERRUPT         
        250,483,954 RETURN_GENERATOR                   
        239,793,181 CALL_LIST_APPEND                    (specialization of CALL)
        168,297,543 CALL_KW                            
        162,922,780 FOR_ITER_GEN                        (specialization of FOR_ITER)
        157,442,920 CALL_PY_WITH_DEFAULTS               (specialization of CALL)
        145,986,780 BINARY_SUBSCR_GETITEM               (specialization of BINARY_SUBSCR)
        135,636,840 STORE_FAST_LOAD_FAST               
         83,118,452 MAKE_CELL                          
         74,149,898 CALL_FUNCTION_EX                   
         68,587,076 CALL_ALLOC_AND_ENTER_INIT           (specialization of CALL)
         49,897,724 STORE_ATTR_WITH_HINT                (specialization of STORE_ATTR)
         49,846,886 LOAD_ATTR_PROPERTY                  (specialization of LOAD_ATTR)
          8,224,500 RERAISE                            
          6,000,000 END_ASYNC_FOR                      
          5,801,385 BEFORE_WITH                        
          2,892,780 RAISE_VARARGS                      
          1,850,040 IMPORT_FROM                        
          1,813,620 IMPORT_NAME                        
                240 CLEANUP_THROW                      
                120 BEFORE_ASYNC_WITH                  
                    ENTER_EXECUTOR                     
                    LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN   (specialization of LOAD_ATTR)

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    interpreter-core(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions