-
-
Notifications
You must be signed in to change notification settings - Fork 30.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Specialization of some instructions does not conform to PEP 659, and prevents PEP 669 #100982
Comments
Superinstructions are also a problem for PEP 669, but are simpler to handle, and will also go away with the register VM. |
Like |
https://github.com/python/cpython/pull/100983[)](https://github.com/python/cpython/commit/7b14c2ef194b6eed79670aa9d7e29ab8e2256a56) fixed the |
COMPARE_OP
does not conform to PEP 659, and prevents PEP 669
Although |
The instruction that is skipped in
Note: |
An alternative to fixing |
Which leaves |
* main: (76 commits) Fix syntax error in struct doc example (python#102160) pythongh-99108: Import MD5 and SHA1 from HACL* (python#102089) pythonGH-101777: `queue.rst`: use 2 spaces after a period to be consistent. (python#102143) Few coverage nitpicks for the cmath module (python#102067) pythonGH-100982: Restrict `FOR_ITER_RANGE` to a single instruction to allow instrumentation. (pythonGH-101985) pythongh-102135: Update turtle docs to rename wikipedia demo to rosette (python#102137) pythongh-99942: python.pc on android/cygwin should link to libpython per configure.ac (pythonGH-100356) pythongh-95672 fix typo SkitTest to SkipTest (pythongh-102119) pythongh-101936: Update the default value of fp from io.StringIO to io.BytesIO (pythongh-102100) pythongh-102008: simplify test_except_star by using sys.exception() instead of sys.exc_info() (python#102009) pythongh-101903: Remove obsolete undefs for previously removed macros Py_EnterRecursiveCall and Py_LeaveRecursiveCall (python#101923) pythongh-100556: Improve clarity of `or` docs (python#100589) pythongh-101777: Make `PriorityQueue` docs slightly clearer (python#102026) pythongh-101965: Fix usage of Py_EnterRecursiveCall return value in _bisectmodule.c (pythonGH-101966) pythongh-101578: Amend exception docs (python#102057) pythongh-101961 fileinput.hookcompressed should not set the encoding value for the binary mode (pythongh-102068) pythongh-102056: Fix a few bugs in error handling of exception printing code (python#102078) pythongh-102011: use sys.exception() instead of sys.exc_info() in docs where possible (python#102012) pythongh-101566: Sync with zipp 3.14. (pythonGH-102018) pythonGH-99818: improve the documentation for zipfile.Path and Traversable (pythonGH-101589) ...
Since there is no register VM (and probably won't be one, or not for a long time), what should we do about this? Ignore it because it "doesn't seem to be an issue in practice"? OTOH maybe this issue can be closed, since it appears we do have PEP 669 after all? @markshannon |
So, yes this can be closed. |
It looks like we never fixed up |
… allow instrumentation. (pythonGH-101985)
As written, PEP 659 says that individual specializations are restricted to a single instruction.
PEP 669 relies on this, as it also wants to replace instructions at runtime, and it would break if specialization occurs across multiple instructions.
Currently there are a two places where we break this design by specializing pairs of instructions together:
COMPARE_OP
POP_JUMP_IF_
pairs are specialized togetherFOR_ITER
STORE_FAST
are specialized togetherThe second will go away with the register VM, and doesn't seem to be an issue in practice.
It is the
COMPARE_OP
POP_JUMP_IF_
specialization that is problematic, as PEP 669 wants to instrument branches.Instrumenting the
POP_JUMP_IF_
doesn't work if theCOMPARE_OP
specialization jumps over it.The solution is to replace the
COMPARE_OP
POP_JUMP_IF_
pair with a singleCOMPARE_AND_BRANCH
instruction that can be specialized or instrumented atomically.Linked PRs
COMPARE_AND_BRANCH
instruction #100983FOR_ITER_RANGE
to a single instruction to allow instrumentation. #101985COMPARE_AND_BRANCH
#102801The text was updated successfully, but these errors were encountered: