Here is the raw list of the 46 CPython issues I opended between 2016-04-21 and 2017-02-10 to implement my FASTCALL optimization. Most issues created in 2016 are already part of Python 3.6.0, some are already merged into the future Python 3.7, the few remaining issues are still open.
27 FASTCALL issues
- 2016-04-21: [WIP] Add a new _PyObject_FastCall() function which avoids the creation of a tuple or dict for arguments
- 2016-05-26: Add _PyObject_FastCall()
- 2016-08-20: Add _PyFunction_FastCallDict(): fast call with keyword arguments as a dict
- 2016-08-20: Add METH_FASTCALL: new calling convention for C functions
- 2016-08-22: Add _PyObject_FastCallKeywords(): avoid the creation of a temporary dictionary for keyword arguments
- 2016-08-23: functools.partial: don't copy keywoard arguments in partial_call()? [REJECTED]
- 2016-08-23: Use fast call in method_call() and slot_tp_new()
- 2016-08-23: Optimize update_keyword_args() function
- 2016-11-22: Update python-gdb.py for fastcalls
- 2016-11-30: _PyFunction_FastCallDict(): replace PyTuple_New() with PyMem_Malloc() [REJECTED]
- 2016-12-02: Compiler warnings in _PyObject_CallArg1()
- 2016-12-02: Fastcall uses more C stack
- 2016-12-09: Modify PyObject_CallFunction() to use fast call internally
- 2017-01-10: Reduce C stack consumption in function calls
- 2017-01-10: call_method(): call _PyObject_FastCall() rather than _PyObject_VaCallFunctionObjArgs()
- 2017-01-11: Disable inlining of _PyStack_AsTuple() to reduce the stack consumption
- 2017-01-13: Add tp_fastcall to PyTypeObject: support FASTCALL calling convention for all callable objects [REJECTED]
- 2017-01-13: Implement LOAD_METHOD/CALL_METHOD for C functions
- 2017-01-18: Check usage of Py_EnterRecursiveCall() and Py_LeaveRecursiveCall() in new FASTCALL functions
- 2017-01-19: Optimize _PyFunction_FastCallDict() for **kwargs [REJECTED]
- 2017-01-24: Add tp_fastnew and tp_fastinit to PyTypeObject, 15-20% faster object instanciation [REJECTED]
- 2017-01-24: _PyStack_AsDict(): Don't check if all keys are strings nor if keys are unique
- 2017-01-25: python-gdb: display wrapper_call()
- 2017-02-05: Use _PyArg_Parser for _PyArg_ParseStack(): support positional only arguments
- 2017-02-06: Modify _PyObject_FastCall() to reduce stack consumption
- 2017-02-09: Use FASTCALL in call_method() to avoid temporary tuple
- 2017-02-10: Move functions to call objects into a new Objects/call.c file
3 issues converting functions to FASTCALL
- 2017-01-16: Use METH_FASTCALL in str methods
- 2017-01-18: Use FASTCALL in dict.update() [REJECTED]
- 2017-02-05: Use FASTCALL for collections.deque methods: index, insert, rotate
6 Argument Clinic issues
Converting code to Argument Clinic converts METH_VARARGS methods to METH_FASTCALL.
- 2017-01-16: Convert OrderedDict methods to Argument Clinic
- 2017-01-17: Argument Clinic: Fix signature of optional positional-only arguments
- 2017-01-17: Modify the _struct module to use FASTCALL and Argument Clinic
- 2017-01-17: decimal: Use FASTCALL and/or Argument Clinic
- 2017-01-18: Argument Clinic: convert dict methods
- 2017-02-02: Argument Clinic: inline PyArg_UnpackTuple and PyArg_ParseStack(AndKeyword)?
10 other optimization issues
- 2016-08-24: C function calls: use Py_ssize_t rather than C int for number of arguments
- 2016-09-07: Optimize bytes.join(sequence) [REJECTED]
- 2016-11-05: Decorate hot functions using __attribute__((hot)) to optimize Python
- 2016-11-07: Python startup performance regression
- 2016-11-25: Add RETURN_NONE bytecode instruction [REJECTED]
- 2016-11-25: Drop CALL_PROFILE special build?
- 2016-12-09: Inline PyEval_EvalFrameEx() in callers [REJECTED]
- 2016-12-15: Document PyObject_CallFunction() special case more explicitly
- 2017-02-06: Experiment usage of likely/unlikely in CPython core
- 2017-02-08: Should PyObject_Call() call the profiler on C functions, use C_TRACE() macro?