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.
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)
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):
Linked PRs
LOAD_ATTR_INSTANCE_VALUEinto micro-ops #106678