-
-
Notifications
You must be signed in to change notification settings - Fork 30.4k
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
gh-98831: Modernize CALL and family #101508
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. |
@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. |
2b105e8
to
8a293d9
Compare
Another thing where the code generator is getting in the way: |
4cd24d6
to
18a0642
Compare
- 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 |
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 commit d84c30f.
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 it does 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; // For consistenct; it's dead, though | |
is_meth = 1; // For consistency; 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) ...
Note that we have a few opcodes starting with
CALL_
that aren't specializations ofCALL
.