Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 34k
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 our terms of service and privacy 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
gvanrossum commented Feb 1, 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.
gvanrossum commented Feb 1, 2023
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 |
iritkatriel commented Feb 2, 2023
Note that you linked this with the wrong issue. |
gvanrossum commented Feb 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 |
markshannon commented Feb 2, 2023
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. |
gvanrossum commented Feb 2, 2023
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 commented Feb 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
gvanrossum commented Feb 8, 2023
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 commented Feb 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 commit d84c30f.
brandtbucher left a comment
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 |
brandtbucher commented Feb 8, 2023
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.