Mark Shannon
61e54bfcee
GH-116422: Factor out eval breaker checks at end of calls into its own micro-op. (GH-116817)
2024-03-14 16:31:47 +00:00
Mark Shannon
4e5df2013f
GH-116468: Use constants instead of oparg
in stack effects when oparg
is known to be a constant. (GH-116469)
2024-03-11 09:30:15 +00:00
Mark Shannon
0003285c8d
GH-113710: Fix optimization of globals using _CHECK_FUNCTION
(GH-116460)
2024-03-08 09:47:41 +00:00
Ken Jin
41457c7fdb
gh-116381: Remove bad specializations, add fail stats (GH-116464)
...
* Remove bad specializations, add fail stats
2024-03-08 00:21:21 +08:00
Serhiy Storchaka
72d3cc94cd
gh-116437: Use new C API PyDict_Pop() to simplify the code (GH-116438)
2024-03-07 11:21:08 +02:00
Ken Jin
7114cf20c0
gh-116381: Specialize CONTAINS_OP (GH-116385)
...
* Specialize CONTAINS_OP
* 📜 🤖 Added by blurb_it.
* Add PyAPI_FUNC for JIT
---------
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
2024-03-07 03:30:11 +08:00
Mark Shannon
27858e2a17
GH-113710: Tier 2 optimizer: check the function instead of checking globals. (GH-116410)
2024-03-06 13:12:23 +00:00
Mark Shannon
23db9c6227
GH-115685: Split _TO_BOOL_ALWAYS_TRUE
into micro-ops (GH-116352)
2024-03-05 15:23:08 +00:00
Tian Gao
7895a61168
gh-116098: Revert "gh-107674: Improve performance of sys.settrace
(GH-114986)" (GH-116178)
...
Revert "gh-107674: Improve performance of `sys.settrace` (GH-114986)"
This reverts commit 0a61e237009bf6b833e13ac635299ee063377699.
2024-03-01 07:46:33 +01:00
Ken Jin
d01886c5c9
gh-115685: Type/values propagate for TO_BOOL in tier 2 (GH-115686)
2024-03-01 06:13:38 +08:00
Brandt Bucher
f0df35eeca
GH-115802: JIT "small" code for Windows (GH-115964)
2024-02-29 08:11:28 -08:00
Tian Gao
0a61e23700
gh-107674: Improve performance of sys.settrace
(GH-114986)
2024-02-28 15:21:42 +00:00
Kirill Podoprigora
e4561e0501
gh-115778: Add tierN
annotation for instruction definitions ( #115815 )
...
This replaces the old `TIER_{ONE,TWO}_ONLY` macros. Note that `specialized` implies `tier1`.
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
2024-02-23 17:31:57 +00:00
Mark Shannon
b348313e7a
GH-115651: Convert LOAD_MODULE_ATTR
into LOAD_INLINE_CONST
when the module is itself a constant. (GH-115711)
2024-02-22 14:48:25 +00:00
Sam Gross
520403ed4c
gh-115733: Fix crash involving exhausted list iterator ( #115740 )
...
* gh-115733: Fix crash involving exhausted iterator
* Add blurb
2024-02-21 05:18:44 +09:00
Brett Simmers
0749244d13
gh-112175: Add eval_breaker
to PyThreadState
( #115194 )
...
This change adds an `eval_breaker` field to `PyThreadState`. The primary
motivation is for performance in free-threaded builds: with thread-local eval
breakers, we can stop a specific thread (e.g., for an async exception) without
interrupting other threads.
The source of truth for the global instrumentation version is stored in the
`instrumentation_version` field in PyInterpreterState. Threads usually read the
version from their local `eval_breaker`, where it continues to be colocated
with the eval breaker bits.
2024-02-20 09:57:48 -05:00
Ken Jin
dcba21f905
gh-115687: Split up guards from COMPARE_OP (GH-115688)
2024-02-20 11:30:49 +00:00
Mark Shannon
626c414995
GH-115457: Support splitting and replication of micro ops. (GH-115558)
2024-02-20 10:50:59 +00:00
Mark Shannon
7b21403ccd
GH-112354: Initial implementation of warm up on exits and trace-stitching (GH-114142)
2024-02-20 09:39:55 +00:00
David Hewitt
9e3729bbd7
gh-114626: add PyCFunctionFast and PyCFunctionFastWithKeywords (GH-114627)
...
Co-authored-by: Petr Viktorin <encukou@gmail.com>
2024-02-15 11:05:20 +01:00
Donghee Na
a2d4281415
gh-112087: Make __sizeof__ and listiter_{len, next} to be threadsafe (gh-114843)
2024-02-15 02:00:50 +09:00
Mark Shannon
681778c56a
GH-113710: Improve _SET_IP
and _CHECK_VALIDITY
(GH-115248)
2024-02-13 16:28:19 +00:00
Ken Jin
7cce857622
gh-114058: Foundations of the Tier2 redundancy eliminator (GH-115085)
...
---------
Co-authored-by: Mark Shannon <9448417+markshannon@users.noreply.github.com>
Co-authored-by: Jules <57632293+JuliaPoo@users.noreply.github.com>
Co-authored-by: Guido van Rossum <gvanrossum@users.noreply.github.com>
2024-02-13 21:24:48 +08:00
Mark Shannon
0e71a295e9
GH-113710: Add a "globals to constants" pass (GH-114592)
...
Converts specializations of `LOAD_GLOBAL` into constants during tier 2 optimization.
2024-02-02 12:14:34 +00:00
Mark Shannon
384429d1c0
GH-113710: Add a tier 2 peephole optimization pass. (GH-114487)
...
* Convert _LOAD_CONST to inline versions
* Remove PEP 523 checks
2024-01-24 12:08:31 +00:00
Mark Shannon
ac10947ba7
GH-112354: _GUARD_IS_TRUE_POP
side-exits to target the next instruction, not themselves. (GH-114078)
2024-01-15 11:41:06 +00:00
Ken Jin
ac92527c08
gh-113710: Add types to the interpreter DSL ( #113711 )
...
Co-authored-by: Jules <57632293+JuliaPoo@users.noreply.github.com>
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
2024-01-13 01:30:27 +08:00
Brandt Bucher
30e6cbdba2
GH-113860: Get rid of _PyUOpExecutorObject
(GH-113954)
2024-01-12 11:58:23 +00:00
Mark Shannon
a0c9cf9456
GH-113860: All executors are now defined in terms of micro ops. Convert counter executor to use uops. (GH-113864)
2024-01-10 15:44:34 +00:00
Mark Shannon
723f4d6698
GH-111485: Delete the old generator code. (GH-113321)
2023-12-21 12:46:28 +00:00
Carey Metcalfe
a2dd0e7038
gh-111375: Use NULL
rather than None
in the exception stack to indicate that an exception was handled ( #113302 )
2023-12-21 01:46:41 +00:00
Mark Shannon
771903596b
GH-111485: Test the new cases generator (GH-113252)
2023-12-18 11:14:40 +00:00
Brandt Bucher
737d23ffcd
GH-111485: Mark some instructions as TIER_ONE_ONLY
(GH-113155)
2023-12-15 13:03:17 +00:00
Mark Shannon
6873555955
GH-112354: Treat _EXIT_TRACE like an unconditional side exit (GH-113104)
2023-12-14 14:26:44 +00:00
Mark Shannon
9263173280
Fix whitespace in generated code
2023-12-13 12:31:41 +00:00
Mark Shannon
0c55f27060
GH-111485: Factor out tier 2 code generation from the rest of the interpreter code generator (GH-112968)
2023-12-12 12:12:17 +00:00
Mark Shannon
b449415b2f
GH-111485: Separate out parsing, analysis and code-gen phases of tier 1 code generator (GH-112299)
2023-12-07 12:49:40 +00:00
Guido van Rossum
8deb8bc2e5
gh-112287: Speed up Tier 2 (uop) interpreter a little ( #112286 )
...
This makes the Tier 2 interpreter a little faster.
I calculated by about 3%,
though I hesitate to claim an exact number.
This starts by doubling the trace size limit (to 512),
making it more likely that loops fit in a trace.
The rest of the approach is to only load
`oparg` and `operand` in cases that use them.
The code generator know when these are used.
For `oparg`, it will conditionally emit
```
oparg = CURRENT_OPARG();
```
at the top of the case block.
(The `oparg` variable may be referenced multiple times
by the instructions code block, so it must be in a variable.)
For `operand`, it will use `CURRENT_OPERAND()` directly
instead of referencing the `operand` variable,
which no longer exists.
(There is only one place where this will be used.)
2023-11-20 11:25:32 -08:00
Guido van Rossum
1995955173
gh-106529: Make FOR_ITER a viable uop ( #112134 )
...
This uses the new mechanism whereby certain uops
are replaced by others during translation,
using the `_PyUop_Replacements` table.
We further special-case the `_FOR_ITER_TIER_TWO` uop
to update the deoptimization target to point
just past the corresponding `END_FOR` opcode.
Two tiny code cleanups are also part of this PR.
2023-11-20 10:08:53 -08:00
Mark Shannon
a519b87958
GH-111848: Convert remaining jumps to deopts into tier 2 code. (GH-112045)
2023-11-14 15:30:33 +00:00
Serhiy Storchaka
b11c443bb2
gh-111789: Simplify bytecodes.c by using PyDict_GetItemRef() (GH-111978)
2023-11-14 15:38:49 +02:00
Brandt Bucher
31ad7e061e
GH-111520: Add back the operand local (GH-111813)
2023-11-13 17:27:19 -08:00
Mark Shannon
25c4956488
GH-109369: Exit tier 2 if executor is invalid (GH-111657)
2023-11-09 11:19:51 +00:00
Mark Shannon
06efb60264
GH-111848: Tidy up tier 2 handling of FOR_ITER specialization by using DEOPT_IF instead of jumps. (GH-111849)
2023-11-08 13:31:55 +00:00
Mark Shannon
931f4438c9
GH-111485: Allow arbitrary annotations on instructions and micro-ops. (GH-111697)
2023-11-07 09:42:39 +00:00
Brandt Bucher
3e99c9cbf6
GH-111485: Make BEFORE_WITH a uop (GH-111812)
2023-11-06 16:42:49 -08:00
AN Long
3a1b09e6d0
gh-111654: remove redundant decref in LOAD_FROM_DICT_OR_DEREF ( #111655 )
2023-11-02 21:06:51 -07:00
Guido van Rossum
e4b37835ef
GH-111485: Silence warnings in Python/executor_cases.c.h ( #111619 )
2023-11-01 14:24:52 -07:00
Guido van Rossum
7e135a48d6
gh-111520: Integrate the Tier 2 interpreter in the Tier 1 interpreter ( #111428 )
...
- There is no longer a separate Python/executor.c file.
- Conventions in Python/bytecodes.c are slightly different -- don't use `goto error`,
you must use `GOTO_ERROR(error)` (same for others like `unused_local_error`).
- The `TIER_ONE` and `TIER_TWO` symbols are only valid in the generated (.c.h) files.
- In Lib/test/support/__init__.py, `Py_C_RECURSION_LIMIT` is imported from `_testcapi`.
- On Windows, in debug mode, stack allocation grows from 8MiB to 12MiB.
- **Beware!** This changes the env vars to enable uops and their debugging
to `PYTHON_UOPS` and `PYTHON_LLTRACE`.
2023-11-01 13:13:02 -07:00
Mark Shannon
b14e882428
GH-111485: Use micro-ops to split specialization code from base action (GH-111561)
2023-11-01 10:53:27 +00:00