Commit graph

288 commits

Author SHA1 Message Date
Serhiy Storchaka
6927632492
Remove trailing spaces (GH-31695) 2022-03-05 17:47:00 +02:00
Brandt Bucher
c4d2d57eef
bpo-46841: Fix BINARY_OP's handling of inline caches (GH-31671) 2022-03-04 10:51:27 -08:00
Mark Shannon
03c2a36b2b
bpo-46903: Handle str-subclasses in virtual instance dictionaries. (GH-31658) 2022-03-04 11:31:29 +00:00
Brandt Bucher
05a8bc1c94
bpo-46841: Use inline caching for attribute accesses (GH-31640) 2022-03-03 15:31:00 -08:00
Brandt Bucher
127797f572
bpo-46841: Improve the failure stats for COMPARE_OP (GH-31663) 2022-03-03 11:28:47 -08:00
Mark Shannon
b35603532b
Move check for str-only keys in LOAD_GLOBAL specializations to specialization time. (GH-31659) 2022-03-03 15:17:18 +00:00
Mark Shannon
3b0f1c5a71
bpo-46841: Use inline cache for BINARY_SUBSCR. (GH-31618) 2022-03-01 16:00:34 +00:00
Brandt Bucher
7820a5897e
bpo-46841: Use inline caching for COMPARE_OP (GH-31622) 2022-03-01 13:53:13 +00:00
Mark Shannon
4558af5a8f
bpo-46841: Move the cache for LOAD_GLOBAL inline. (GH-31575) 2022-02-28 12:56:29 +00:00
Brandt Bucher
424ecab494
bpo-46841: Use inline caching for UNPACK_SEQUENCE (GH-31591) 2022-02-28 11:54:14 +00:00
Victor Stinner
8f2a337a80
bpo-45316: Move private functions to internal C API (GH-31579)
Move the unexported private functions to the internal C API:

* pycore_frame.h: _PyFrame_New_NoTrack()
* pycore_function.h: _PyFunction_GetVersionForCurrentState()
* pycore_genobject.h: _PyAsyncGenValueWrapperNew()
* pycore_genobject.h: _PyCoro_GetAwaitableIter()
* pycore_genobject.h: _PyGen_yf()
2022-02-25 16:07:14 +01:00
Brandt Bucher
0f41aac109
bpo-46841: Use *inline* caching for BINARY_OP (GH-31543) 2022-02-25 12:11:34 +00:00
Mark Shannon
2a6ece572c
bpo-45107: Specialize LOAD_METHOD for instances with dict. (GH-31531) 2022-02-24 19:34:57 +00:00
Dennis Sweeney
a52d2528a4
bpo-46823: Implement LOAD_FAST__LOAD_ATTR_INSTANCE_VALUE superinstruction (GH-31484) 2022-02-24 14:55:59 +00:00
Brandt Bucher
281ea9c391
bpo-44337: Shrink the LOAD_ATTR/STORE_ATTR caches (GH-31517) 2022-02-23 10:53:24 -08:00
Brandt Bucher
375a56bd40
bpo-45885: Don't un-adapt COMPARE_OP when collecting stats (GH-31516) 2022-02-23 11:06:25 +00:00
Brandt Bucher
424023efee
bpo-46329: Fix test failure when Py_STATS is enabled (GH-31511) 2022-02-23 11:00:28 +00:00
Mark Shannon
9058a35558
Move call specializations from CALL to PRECALL. (GH-31496) 2022-02-22 14:57:01 +00:00
Mark Shannon
cf345e945f
bpo-46329: Change calling sequence (again) (GH-31373)
* Change calling sequence: Add PUSH_NULL. Merge PRECALL_FUNCTION and PRECALL_METHOD into PRECALL.
2022-02-18 17:19:08 +00:00
Brandt Bucher
580cd9ab29
bpo-46072: Add detailed failure stats for BINARY_OP (GH-31289) 2022-02-16 08:49:58 -08:00
Brandt Bucher
a9da085015
bpo-46702: Specialize UNPACK_SEQUENCE (GH-31240) 2022-02-16 08:48:16 -08:00
Mark Shannon
0ade875ebe
Add pair counts to stats output and summary. (GH-31324) 2022-02-14 15:53:38 +00:00
Mark Shannon
15ee55528e
Include length in stats for UNPACK_SEQUENCE. (GH-31254) 2022-02-14 10:01:31 +00:00
Victor Stinner
e0bcfd0e4d
bpo-45490: Rename static inline functions (GH-31217)
When a static inline function is wrapped by a macro which casts its
arguments to the expected type, there is no need that the function
has a different name than the macro. Use the same name for the macro
and the function to avoid confusion.

Rename _PyUnicode_get_wstr_length() to PyUnicode_WSTR_LENGTH().

Don't rename static inline _Py_NewRef() and _Py_XNewRef() functions,
since the C API exports Py_NewRef() and Py_XNewRef() functions as
regular functions. The name cannot be reused in this case.
2022-02-11 17:01:10 +01:00
Brandt Bucher
d7a5aca982
bpo-45923: Add RESUME_QUICK (GH-31244) 2022-02-10 17:50:02 +00:00
Mark Shannon
1a6411f573
Gather stats for PRECALL_METHOD. (GH-31259) 2022-02-10 15:55:52 +00:00
Mark Shannon
b0662ae5c8
Add stats for PRECALL_FUNCTION. (GH-31250) 2022-02-10 11:47:52 +00:00
Mark Shannon
f71a69aa92
bpo-46072: Output stats as markdown with collapsible sections. (GH-31228) 2022-02-09 12:30:26 +00:00
Eric Snow
81c72044a1
bpo-46541: Replace core use of _Py_IDENTIFIER() with statically initialized global objects. (gh-30928)
We're no longer using _Py_IDENTIFIER() (or _Py_static_string()) in any core CPython code.  It is still used in a number of non-builtin stdlib modules.

The replacement is: PyUnicodeObject (not pointer) fields under _PyRuntimeState, statically initialized as part of _PyRuntime.  A new _Py_GET_GLOBAL_IDENTIFIER() macro facilitates lookup of the fields (along with _Py_GET_GLOBAL_STRING() for non-identifier strings).

https://bugs.python.org/issue46541#msg411799 explains the rationale for this change.

The core of the change is in:

* (new) Include/internal/pycore_global_strings.h - the declarations for the global strings, along with the macros
* Include/internal/pycore_runtime_init.h - added the static initializers for the global strings
* Include/internal/pycore_global_objects.h - where the struct in pycore_global_strings.h is hooked into _PyRuntimeState
* Tools/scripts/generate_global_objects.py - added generation of the global string declarations and static initializers

I've also added a --check flag to generate_global_objects.py (along with make check-global-objects) to check for unused global strings.  That check is added to the PR CI config.

The remainder of this change updates the core code to use _Py_GET_GLOBAL_IDENTIFIER() instead of _Py_IDENTIFIER() and the related _Py*Id functions (likewise for _Py_GET_GLOBAL_STRING() instead of _Py_static_string()).  This includes adding a few functions where there wasn't already an alternative to _Py*Id(), replacing the _Py_Identifier * parameter with PyObject *.

The following are not changed (yet):

* stop using _Py_IDENTIFIER() in the stdlib modules
* (maybe) get rid of _Py_IDENTIFIER(), etc. entirely -- this may not be doable as at least one package on PyPI using this (private) API
* (maybe) intern the strings during runtime init

https://bugs.python.org/issue46541
2022-02-08 13:39:07 -07:00
Mark Shannon
062460e8fd
bpo-46072: Improve LOAD_METHOD stats (GH-31104) 2022-02-07 14:30:34 +00:00
Mark Shannon
832876b992
Add miss stats for specialized instructions. (GH-31108) 2022-02-04 09:56:46 +00:00
Mark Shannon
a0401d8372
Collect stats for UNPACK_SEQUENCE. (GH-31105) 2022-02-03 18:40:56 +00:00
Dennis Sweeney
674ab66ebd
bpo-45885: Add more stats for COMPARE_OP in specialize.c (GH-31040) 2022-02-03 13:32:52 +00:00
Mark Shannon
0d05da1fbf
Add specialization stats for FOR_ITER. (GH-31079) 2022-02-02 15:56:47 +00:00
Mark Shannon
187930f74c
bpo-46072: Add some frame stats. (GH-31060) 2022-02-02 11:01:33 +00:00
Mark Shannon
48be46ec1f
bpo-46072: Add some object layout and allocation stats (GH-31051) 2022-02-01 15:05:18 +00:00
Mark Shannon
90ab138bbd
bpo-46072: Add simple stats for Python calls. (GH-30989) 2022-01-28 15:20:33 +00:00
Mark Shannon
89fd7c3452
bpo-46329: Split calls into precall and call instructions. (GH-30855)
* Add PRECALL_FUNCTION opcode.

* Move 'call shape' varaibles into struct.

* Replace CALL_NO_KW and CALL_KW with KW_NAMES and CALL instructions.

* Specialize for builtin methods taking using the METH_FASTCALL | METH_KEYWORDS protocol.

* Allow kwnames for specialized calls to builtin types.

* Specialize calls to tuple(arg) and str(arg).
2022-01-28 12:42:30 +00:00
Kumar Aditya
d1beb241d9
bpo-46486: Fixed misspelled name DesciptorClassification 2022-01-23 16:03:50 -06:00
Victor Stinner
7835cbf949
bpo-46417: Use _PyType_CAST() in Python directory (GH-30769) 2022-01-21 23:30:17 +01:00
Mark Shannon
b04dfbbe4b
bpo-46409: Make generators in bytecode (GH-30633)
* Add RETURN_GENERATOR and JUMP_NO_INTERRUPT opcodes.

* Trim frame and generator by word each.

* Minor refactor of frame.c

* Update test.test_sys to account for smaller frames.

* Treat generator functions as normal functions when evaluating and specializing.
2022-01-20 11:46:39 +00:00
Kumar Aditya
a4bc2218d2
bpo-46405: fix msvc compiler warnings (GH-30627) 2022-01-17 16:30:10 +00:00
Dennis Sweeney
7537f60087
bpo-45609: More specialization stats for STORE_SUBSCR (GH-30193) 2022-01-04 18:05:09 +00:00
Mark Shannon
efd6236d36
bpo-46072: Add top level stats struct (GH-30169) 2021-12-17 14:48:01 +00:00
Mark Shannon
86f42851c0
Better randomization of stats filenames. (GH-30145) 2021-12-16 15:56:01 +00:00
Brandt Bucher
62a8a0c522
bpo-45829: Check __getitem__'s version for overflow before specializing (GH-30129)
* Check __getitem__'s version for overflow.

* Use SPEC_FAIL_OUT_OF_VERSIONS instead
2021-12-16 11:08:20 +00:00
Mark Shannon
342b93f9f2
bpo-46072: Add --with-pystats configure option to simplify gathering of VM stats (GH-30116)
* Simplify specialization stats collection macros.

* Add --enable-pystats option to configure.

* Update specialization summary script to handle larger number of kinds
2021-12-15 15:32:32 +00:00
Mark Shannon
3a60bfef49
bpo-44525: Specialize for calls to type and other builtin classes with 1 argument. (GH-29942) 2021-12-15 15:03:42 +00:00
Mark Shannon
9f8f45144b
bpo-44525: Split calls into PRECALL and CALL (GH-30011)
* Add 3 new opcodes for calls: PRECALL_METHOD, CALL_NO_KW, CALL_KW.

* Update specialization to handle new CALL opcodes.

* Specialize call to method descriptors.

* Remove old CALL opcodes: CALL_FUNCTION, CALL_METHOD, CALL_METHOD_KW, CALL_FUNCTION_KW.
2021-12-14 18:22:44 +00:00
Brandt Bucher
5de39f4b41
bpo-45510: Check both types when specializing subtraction (GH-29995) 2021-12-09 10:17:16 +09:00