Skip to content

Conversation

@junrushao
Copy link
Member

@junrushao junrushao commented Dec 25, 2025

To be compatible with stubgen convention

@junrushao junrushao force-pushed the 2025-12-24/change-type-key-func-name branch from d5d2923 to add3ba5 Compare December 25, 2025 03:49
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @junrushao, 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 implements a comprehensive breaking change by standardizing the naming convention for all FFI-exposed type keys and global function names within the TVM project. By consistently adding a 'tvm.' prefix, the change aims to improve clarity, prevent potential naming collisions, and establish a well-defined namespace for TVM's internal and external API components across C++ and Python interfaces. This is a foundational change affecting numerous core components and bindings.

Highlights

  • FFI Type Key Standardization: All FFI-exposed type keys declared using TVM_FFI_DECLARE_OBJECT_INFO and TVM_FFI_DECLARE_OBJECT_INFO_FINAL macros across various modules (IR, Relax, MetaSchedule, TIR, Runtime) have been consistently prefixed with 'tvm.' to ensure a unified naming convention.
  • Global Function Name Prefixing: Global functions registered via refl::GlobalDef().def, tvm.register_global_func, and accessed through get_runtime_func or tvm.get_global_func are now uniformly prefixed with 'tvm.'. This impacts RPC server creation, device API functions, module loaders, and various utility functions.
  • Python FFI Initialization Alignment: The tvm_ffi.init_ffi_api calls in Python bindings have been updated to reflect the new 'tvm.' prefix for their respective modules, ensuring seamless integration and consistency between C++ and Python FFI registrations.
  • Structural Equality and Hash Function Renaming: Custom structural equality (__s_equal__) and hash (__s_hash__) functions for IRModuleNode and VarNode are now explicitly prefixed with 'tvm.' to align with the new naming scheme.

🧠 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 Assist

The 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 /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

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 .gemini/ folder in the base of the repository. Detailed instructions can be found here.

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

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a 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 introduces a breaking change by prefixing all type keys and function names with tvm. to align with stubgen conventions. The changes are extensive and cover a wide range of files across the codebase. While the majority of the changes appear to be correct and consistent with the stated goal, I've identified a few critical issues, particularly in the Relax parser and testing utilities, where the automated replacement seems to have introduced bugs that could break functionality. Additionally, there are several instances of redundant naming (e.g., tvm.tvm_...) that could be simplified for better clarity and consistency. My review includes suggestions to fix these issues.

"Tensor",
"Tuple",
"function",
"tvm.function",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The name tvm.function is not a valid Python identifier and cannot be exported in __all__. This will cause an ImportError. Please revert this to function.

Suggested change
"tvm.function",
"function",

# look for the named argument in the function decorator
for dec in node.decorator_list:
if not isinstance(dec, doc.Call) or dec.func.attr != "function":
if not isinstance(dec, doc.Call) or dec.func.attr != "tvm.function":
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The decorator name is function, not tvm.function. The dec.func.attr should be compared against 'function'. This change will break parsing of @R.function decorators.

Suggested change
if not isinstance(dec, doc.Call) or dec.func.attr != "tvm.function":
if not isinstance(dec, doc.Call) or dec.func.attr != "function":

# many times the fixture has been used. If used, the cache gets
# cleared after the fixture is no longer needed.
scope = "function"
scope = "tvm.function"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The scope of a pytest fixture has been changed to tvm.function, which is not a valid scope. The valid scopes are 'function', 'class', 'module', 'package', or 'session'. This change will break pytest fixtures. Please revert it to 'function'.

Suggested change
scope = "tvm.function"
scope = "function"


# override metal compiler to compile to iphone
@tvm.register_global_func("tvm_callback_metal_compile")
@tvm.register_global_func("tvm.tvm_callback_metal_compile")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The new function name tvm.tvm_callback_metal_compile seems redundant. To improve clarity and consistency with the new naming scheme, consider renaming it to tvm.callback_metal_compile. This would make the naming scheme more consistent by avoiding the repeated tvm prefix.

Suggested change
@tvm.register_global_func("tvm.tvm_callback_metal_compile")
@tvm.register_global_func("tvm.callback_metal_compile")

Comment on lines +316 to 317
@tvm_ffi.register_global_func("tvm.tvm_callback_cuda_compile")
def tvm_callback_cuda_compile(code, target): # pylint: disable=unused-argument
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The new function name tvm.tvm_callback_cuda_compile seems redundant. To improve clarity and consistency, consider renaming it to tvm.callback_cuda_compile and also renaming the Python function to callback_cuda_compile.

Suggested change
@tvm_ffi.register_global_func("tvm.tvm_callback_cuda_compile")
def tvm_callback_cuda_compile(code, target): # pylint: disable=unused-argument
@tvm_ffi.register_global_func("tvm.callback_cuda_compile")
def callback_cuda_compile(code, target): # pylint: disable=unused-argument



@tvm_ffi.register_global_func("tvm_callback_libdevice_path")
@tvm_ffi.register_global_func("tvm.tvm_callback_libdevice_path")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The new function name tvm.tvm_callback_libdevice_path seems redundant. To improve clarity, consider renaming it to tvm.callback_libdevice_path.

Suggested change
@tvm_ffi.register_global_func("tvm.tvm_callback_libdevice_path")
@tvm_ffi.register_global_func("tvm.callback_libdevice_path")



@tvm_ffi.register_global_func("tvm_callback_rocm_link")
@tvm_ffi.register_global_func("tvm.tvm_callback_rocm_link")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The new function name tvm.tvm_callback_rocm_link seems redundant. To improve clarity, consider renaming it to tvm.callback_rocm_link.

Suggested change
@tvm_ffi.register_global_func("tvm.tvm_callback_rocm_link")
@tvm_ffi.register_global_func("tvm.callback_rocm_link")



@tvm_ffi.register_global_func("tvm_callback_rocm_bitcode_path")
@tvm_ffi.register_global_func("tvm.tvm_callback_rocm_bitcode_path")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The new function name tvm.tvm_callback_rocm_bitcode_path seems redundant. To improve clarity, consider renaming it to tvm.callback_rocm_bitcode_path.

Suggested change
@tvm_ffi.register_global_func("tvm.tvm_callback_rocm_bitcode_path")
@tvm_ffi.register_global_func("tvm.callback_rocm_bitcode_path")



@tvm_ffi.register_global_func("tvm_callback_rocm_get_arch")
@tvm_ffi.register_global_func("tvm.tvm_callback_rocm_get_arch")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The new function name tvm.tvm_callback_rocm_get_arch seems redundant. To improve clarity, consider renaming it to tvm.callback_rocm_get_arch.

Suggested change
@tvm_ffi.register_global_func("tvm.tvm_callback_rocm_get_arch")
@tvm_ffi.register_global_func("tvm.callback_rocm_get_arch")

@junrushao junrushao force-pushed the 2025-12-24/change-type-key-func-name branch from add3ba5 to d480bc9 Compare December 25, 2025 04:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant