Mark Shannon
fbfab4f88c
GH-120024: Refactor code generators to uses classes for emitting code. (GH-122730)
2024-08-06 13:04:33 +01:00
Mark Shannon
a9d56e38a0
GH-122155: Track local variables between pops and pushes in cases generator (GH-122286)
2024-08-01 09:27:26 +01:00
Mark Shannon
afb0aa6ed2
GH-121131: Clean up and fix some instrumented instructions. (GH-121132)
...
* Add support for 'prev_instr' to code generator and refactor some INSTRUMENTED instructions
2024-07-26 12:24:12 +01:00
Mark Shannon
624bda7638
GH-122155: Fix cases generator to correctly compute 'peek' offset for error handling (GH-122158)
2024-07-23 14:12:06 +01:00
Mark Shannon
3eacfc1a4d
GH-121784: Generate an error during code gen if a variable is marked `unused`, but is used and thus cached in a prior uop. ( #121788 )
...
* Reject uop definitions that declare values as 'unused' that are already cached by prior uops
* Track which variables are defined and only load from memory when needed
* Support explicit `flush` in macro definitions.
* Make sure stack is flushed in where needed.
2024-07-18 12:49:24 +01:00
Mark Shannon
bf8686e1ea
GH-118926: Better distinguish between pointer and arrays in interpreter generator (GH-121496)
2024-07-09 11:33:56 +01:00
Sam Gross
8e8d202f55
gh-117139: Add _PyTuple_FromStackRefSteal and use it ( #121244 )
...
Avoids the extra conversion from stack refs to PyObjects.
2024-07-02 12:30:14 -04:00
Ken Jin
22b0de2755
gh-117139: Convert the evaluation stack to stack refs ( #118450 )
...
This PR sets up tagged pointers for CPython.
The general idea is to create a separate struct _PyStackRef for everything on the evaluation stack to store the bits. This forces the C compiler to warn us if we try to cast things or pull things out of the struct directly.
Only for free threading: We tag the low bit if something is deferred - that means we skip incref and decref operations on it. This behavior may change in the future if Mark's plans to defer all objects in the interpreter loop pans out.
This implies a strict stack reference discipline is required. ALL incref and decref operations on stackrefs must use the stackref variants. It is unsafe to untag something then do normal incref/decref ops on it.
The new incref and decref variants are called dup and close. They mimic a "handle" API operating on these stackrefs.
Please read Include/internal/pycore_stackref.h for more information!
---------
Co-authored-by: Mark Shannon <9448417+markshannon@users.noreply.github.com>
2024-06-27 03:10:43 +08:00
Mark Shannon
8f5a01707f
GH-120982: Add stack check assertions to generated interpreter code (GH-120992)
2024-06-25 16:42:29 +01:00
Victor Stinner
35b16795d1
gh-120417: Remove unused imports in cases_generator ( #120622 )
2024-06-17 21:58:56 +02:00
Irit Katriel
c1e9647107
gh-119689: generate stack effect metadata for pseudo instructions ( #119691 )
2024-05-29 09:47:56 +00:00
Mark Shannon
f5c6b9977a
GH-118910: Less boilerplate in the tier 2 optimizer ( #118913 )
2024-05-10 17:43:23 +01:00
Guido van Rossum
7d83f7bcc4
gh-118335: Configure Tier 2 interpreter at build time ( #118339 )
...
The code for Tier 2 is now only compiled when configured
with `--enable-experimental-jit[=yes|interpreter]`.
We drop support for `PYTHON_UOPS` and -`Xuops`,
but you can disable the interpreter or JIT
at runtime by setting `PYTHON_JIT=0`.
You can also build it without enabling it by default
using `--enable-experimental-jit=yes-off`;
enable with `PYTHON_JIT=1`.
On Windows, the `build.bat` script supports
`--experimental-jit`, `--experimental-jit-off`,
`--experimental-interpreter`.
In the C code, `_Py_JIT` is defined as before
when the JIT is enabled; the new variable
`_Py_TIER2` is defined when the JIT *or* the
interpreter is enabled. It is actually a bitmask:
1: JIT; 2: default-off; 4: interpreter.
2024-04-30 18:26:34 -07:00
Dino Viehland
8b541c017e
gh-112075: Make instance attributes stored in inline "dict" thread safe ( #114742 )
...
Make instance attributes stored in inline "dict" thread safe on free-threaded builds
2024-04-21 22:57:05 -07:00
Mark Shannon
d3bd6b5f3f
GH-115419: Improve list of escaping functions (GH-118054)
2024-04-19 09:25:07 +01:00
Ken Jin
375425abd1
Cases generator: Remove type_prop and passthrough ( #117614 )
2024-04-08 06:26:52 +08:00
Michael Droettboom
0edde64a41
GH-117457: Correct pystats uop "miss" counts (GH-117477)
2024-04-04 15:49:18 -07:00
Mark Shannon
c32dc47aca
GH-115776: Embed the values array into the object, for "normal" Python objects. (GH-116115)
2024-04-02 11:59:21 +01:00
Sam Gross
19c1dd60c5
gh-117323: Make `cell` thread-safe in free-threaded builds ( #117330 )
...
Use critical sections to lock around accesses to cell contents. The critical sections are no-ops in the default (with GIL) build.
2024-03-29 13:35:43 -04:00
Mark Shannon
bf82f77957
GH-116422: Tier2 hot/cold splitting (GH-116813)
...
Splits the "cold" path, deopts and exits, from the "hot" path, reducing the size of most jitted instructions, at the cost of slower exits.
2024-03-26 09:35:11 +00:00
Ken Jin
617aca9e74
gh-115419: Change default sym to not_null (GH-116562)
2024-03-13 20:57:48 +08:00
Mark Shannon
b6ae6da1bd
GH-116596: Better determination of escaping uops. (GH-116597)
2024-03-11 13:37:48 +00:00
Kirill Podoprigora
b2d74cdbcd
gh-116000: Make optimizer_generator.py work without any arguments ( #116470 )
2024-03-07 19:05:50 +00:00
Brett Simmers
339c8e1c13
gh-115999: Disable the specializing adaptive interpreter in free-threaded builds ( #116013 )
...
For now, disable all specialization when the GIL might be disabled.
2024-02-29 21:53:32 -05:00
Guido van Rossum
0656509033
gh-116088: Insert bottom checks after all sym_set_...() calls ( #116089 )
...
This changes the `sym_set_...()` functions to return a `bool` which is `false`
when the symbol is `bottom` after the operation.
All calls to such functions now check this result and go to `hit_bottom`,
a special error label that prints a different message and then reports
that it wasn't able to optimize the trace. No executor will be produced
in this case.
2024-02-29 18:55:29 +00:00
Guido van Rossum
86e5e063ab
gh-115816: Generate calls to sym_new_const() etc. without _Py_uop prefix ( #116077 )
...
This was left behind by GH-115987. Basically a lot of diffs like this:
```
- res = _Py_uop_sym_new_unknown(ctx);
+ res = sym_new_unknown(ctx);
```
2024-02-29 00:05:53 +00:00
Mark Shannon
6ecfcfe894
GH-115816: Assorted naming and formatting changes to improve maintainability. (GH-115987)
...
* Rename _Py_UOpsAbstractInterpContext to _Py_UOpsContext and _Py_UOpsSymType to _Py_UopsSymbol.
* #define shortened form of _Py_uop_... names for improved readability.
2024-02-27 13:25:02 +00:00
Mark Shannon
10fbcd6c5d
GH-115816: Make tier2 optimizer symbols testable, and add a few tests. (GH-115953)
2024-02-27 10:51:26 +00:00
Guido van Rossum
c0fdfba7ff
Rename tier 2 redundancy eliminator to optimizer ( #115888 )
...
The original name is just too much of a mouthful.
2024-02-26 08:42:53 -08: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
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
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
Kirill Podoprigora
f3cdd64de8
``Tools/cases_generator``: Fix typos and incorrect comments. ( #114892 )
2024-02-02 17:52:58 -08:00
Kirill Podoprigora
6d7ad57385
Update outdated info in ``Tools/cases_generator/README.md`` ( #114844 )
2024-02-01 08:56:24 -08: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
Mark Shannon
723f4d6698
GH-111485: Delete the old generator code. (GH-113321)
2023-12-21 12:46:28 +00:00
Guido van Rossum
713e42822f
GH-111485: Fix DEFAULT_OUTPUT in opcode_metadata_generator.py ( #113324 )
2023-12-20 10:05:48 -08:00
Mark Shannon
de8a4e52a5
GH-111485: Generate `TARGET` table for computed goto dispatch. (GH-113319)
2023-12-20 15:09:12 +00:00
Mark Shannon
e96f26083b
GH-111485: Generate instruction and uop metadata (GH-113287)
2023-12-20 14:27:25 +00:00
Mark Shannon
70d378cdaa
GH-111485: Break up instructions with unused cache entries into component micro-ops (GH-113169)
2023-12-18 13:16:45 +00:00
Mark Shannon
771903596b
GH-111485: Test the new cases generator (GH-113252)
2023-12-18 11:14:40 +00:00
Mark Shannon
e24eccbc1c
GH-111485: Sort metadata tables for easier checking of future diffs (GH-113101)
2023-12-14 16:41:52 +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
c27e9d5d17
GH-111485: Factor out generation of uop IDs from cases generator. (GH-112877)
2023-12-11 14:14:36 +00:00
Mark Shannon
aefdebdef1
GH-111485: Factor out opcode ID generator from the main cases generator. (GH-112831)
2023-12-08 11:48:30 +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
Irit Katriel
07ebd46f9e
gh-112519: Make it possible to specify instruction flags for pseudo instructions in bytecodes.c ( #112520 )
2023-11-30 11:03:30 +00:00