-
Notifications
You must be signed in to change notification settings - Fork 3.8k
[Relax] Move GetUsedVars to analysis module #18632
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
[Relax] Move GetUsedVars to analysis module #18632
Conversation
Summary of ChangesHello @guan404ming, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request significantly improves code organization by refactoring the Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
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.
Code Review
This pull request is a nice refactoring that moves the GetUsedVars function to the analysis module, improving code organization. The changes include adding the FFI registration, a Python wrapper, and a new parametrized test. The implementation is correct and the changes are well-contained. I have one suggestion to slightly optimize the FFI wrapper for better performance.
| ffi::Array<Var> result; | ||
| for (const VarNode* var_node : used_vars) { | ||
| result.push_back(ffi::GetRef<Var>(var_node)); | ||
| } | ||
| return result; |
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.
For improved performance, especially when used_vars is large, consider building a std::vector with pre-reserved capacity and then constructing the ffi::Array from it. This avoids potential reallocations that can occur with repeated push_back calls on ffi::Array.
std::vector<Var> result_vec;
result_vec.reserve(used_vars.size());
for (const VarNode* var_node : used_vars) {
result_vec.push_back(ffi::GetRef<Var>(var_node));
}
return ffi::Array<Var>(std::move(result_vec));2c8e5a2 to
3afa978
Compare
| return _ffi_api.all_vars(expr) | ||
|
|
||
|
|
||
| def get_used_vars(expr: Expr) -> List[Var]: |
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.
nit: the func name might be better to be used_vars() to be consistent with all_vars() and free_vars()? cc @tlopex @cbalint13
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.
I agree @guan404ming
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.
Sure, I've updated.
|
Thanks for all reviews! |
Why
The GetUsedVars function was defined locally in binding_rewrite.cc with a TODO comment suggesting it should be moved to the analysis module. This refactoring improves code organization by placing the utility function alongside other variable analysis functions.
How