Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32.1k
gh-98831: Modernize CALL and family#101508
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
There are a few things about this family that make it unpleasant to convert. First, the initial call stack can be either
or
(This situation arises because the In the latter case we then introspect There is a macro Second, most specializations don't just call the function and produce a result. Because of Python function call inlining, most end up with All this leaves me with the feeling that the generator isn't a good match for the complexity of this instruction family, or I am missing a trick. Maybe I should model the input stack effect as
so that we can always call |
Note that you linked this with the wrong issue. |
gvanrossum commentedFeb 2, 2023 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
@brandtbucher,@markshannon, any suggestions? (This is not all, I just would like some feedback on how to proceed with the remaining 12-odd specializations of |
Why not declare the interface as We don't need the code generator to understand very bit of C code. We aren't implementing a C compiler. TBH, I'm a little concerned that the code generator has become an end in itself, rather than being a means to an end. |
Yeah, I agree. I'm not sure what we'll get out of it. Generating a tier 2 interpreter and supporting micro-ops does still seem like a worthy cause though. We should talk a bit about this on Monday. |
gvanrossum commentedFeb 3, 2023 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
Another thing where the code generator is getting in the way: |
- Support arrays- Support conditional inputs- Skip 'unused' and 'null'
- Move CALL_BOUND_METHOD_EXACT_ARGS into place- Add a commented-out family definition
I have made the requested changes; please review again. I didn't literally do what you or Mark suggested; instead, I converted everything to the format (already used by many of these)
(Slight variations in a few cases.) I also removed most manual stack manipulation except when exiting via |
bedevere-bot commentedFeb 8, 2023
Thanks for making the requested changes! @brandtbucher: please review the changes made to this pull request. |
It will be removed in a separate PR.This reverts commitd84c30f.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Looks good!
Has it been benchmarked for regressions? Not a huge deal if not, but itdoes change quite a bit of critical code in subtle ways. Your call.
total_args = oparg + is_meth; | ||
function = PEEK(total_args + 1); | ||
if (!is_meth && Py_TYPE(callable) == &PyMethod_Type) { | ||
is_meth = 1; // For consistenct; it's dead, though |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
is_meth=1;// Forconsistenct; it's dead, though | |
is_meth=1;// Forconsistency; it's dead, though |
Ah, I see you already ran the benchmarks in an earlier comment. Never mind! |
* main: (82 commits)pythongh-101670: typo fix in PyImport_ExtendInittab() (python#101723)pythonGH-99293: Document that `Py_TPFLAGS_VALID_VERSION_TAG` shouldn't be used. (#pythonGH-101736) no-issue: Add Dong-hee Na as the cjkcodecs codeowner (pythongh-101731)pythongh-101678: Merge math_1_to_whatever() and math_1() (python#101730)pythongh-101678: refactor the math module to use special functions from c11 (pythonGH-101679)pythongh-85984: Remove legacy Lib/pty.py code. (python#92365)pythongh-98831: Use opcode metadata for stack_effect() (python#101704)pythongh-101283: Version was just released, so should be changed in 3.11.3 (pythonGH-101719)pythongh-101283: Fix use of unbound variable (pythonGH-101712)pythongh-101283: Improved fallback logic for subprocess with shell=True on Windows (pythonGH-101286)pythongh-101277: Port more itertools static types to heap types (python#101304)pythongh-98831: Modernize CALL and family (python#101508)pythonGH-101696: invalidate type version tag in `_PyStaticType_Dealloc` (python#101697)pythongh-100221: Fix creating dirs in `make sharedinstall` (pythonGH-100329)pythongh-101670: typo fix in PyImport_AppendInittab() (pythonGH-101672)pythongh-101196: Make isdir/isfile/exists faster on Windows (pythonGH-101324)pythongh-101614: Don't treat python3_d.dll as a Python DLL when checking extension modules for incompatibility (pythonGH-101615)pythongh-100933: Improve `check_element` helper in `test_xml_etree` (python#100934)pythonGH-101578: Normalize the current exception (pythonGH-101607)pythongh-47937: Note that Popen attributes are read-only (python#93070) ...
Uh oh!
There was an error while loading.Please reload this page.
Note that we have a few opcodes starting with
CALL_
that aren't specializations ofCALL
.