Skip to content

Conversation

@wrongtest-intellif
Copy link
Contributor

@wrongtest-intellif wrongtest-intellif commented Nov 5, 2025

An initial change to add ForNode::step.

  • Add Optional<PrimExpr> typed step attribute to ForNode. Then add minimal codes for

    • Roundtrip support for TIR tvmscript grammar
    • Correctness of TIR lowering pipeline:
      • Canonicalize the loop in default pipeline
      • Ensure the original ForNode::step is not dropped by mutations on ForNode.
    • CodeGen support for non-zero min and non-trivial step.
  • TODOs in the future (hopefully)

    • For all transformations and analysis tools, make adaptions to non-consecutive loop iteration indices
    • Correctness of TensorIR schedule and MetaSchedule

@wrongtest-intellif wrongtest-intellif marked this pull request as draft November 5, 2025 06:56
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @wrongtest-intellif, 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 introduces a step attribute to the ForNode in TVM's Tensor IR (TIR), enabling the representation and generation of loops with non-unit iteration steps. This foundational change impacts various components, from the core IR definition and Python scripting interface to code generation backends and scheduling primitives, ensuring that loops with custom steps are correctly parsed, lowered, and compiled across TVM.

Highlights

  • New step attribute for ForNode: Introduced an optional step attribute to the ForNode in TVM's Tensor IR (TIR), allowing loops to iterate with non-unit steps (e.g., for i in range(0, 100, 3)).
  • Python API and Scripting Support: Updated the Python tvm.script.ir_builder.tir module to accept step arguments for serial, parallel, vectorized, and unroll loop types. The tvm.script.parser.tir now handles Python's range sugar with a step argument, mapping it to the new TIR step attribute.
  • Code Generation Updates: Modified various code generation backends (LLVM, C, WebGPU, SPIRV) to correctly interpret and generate code for loops that include a custom step value. This ensures that the new loop semantics are respected during compilation.
  • TIR Schedule and Transform Compatibility: Adjusted numerous TIR scheduling primitives and transformation passes to either propagate the new step attribute or utilize the newly introduced For::ForSimple constructor, which implicitly assumes a trivial (unit) step. This maintains compatibility and correctness across the TIR pipeline.
  • New Utility and Tests: Added a HasTrivialStep() method to ForNode for easier checking of unit steps. New test cases were introduced in test_tir_nodes.py and test_tvmscript_parser_tir.py to validate the functionality of loops with custom steps.
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 PR introduces a step attribute to ForNode, which is a significant and welcome enhancement to TIR. The changes are extensive, touching many parts of the codebase from IR definition, parsers, to various codegen backends and transformation passes. The use of For::ForSimple and CopyOnWrite patterns to manage the new field is well-executed and helps maintain backward compatibility and code clarity. The addition of tests for parsing and round-tripping is also appreciated.

I've found a few issues, mainly related to inconsistencies in codegen backends and a potential bug in the SPIR-V codegen. Addressing these will make this foundational PR more robust.

@tqchen tqchen marked this pull request as ready for review November 5, 2025 17:33
@Hzfengsy
Copy link
Member

Hzfengsy commented Nov 7, 2025

cc @LeiWang1999

@tqchen
Copy link
Member

tqchen commented Nov 16, 2025

@wrongtest-intellif @Hzfengsy would be great to check some of the gemini reviews, some seems to be valid

@wrongtest-intellif
Copy link
Contributor Author

/gemini review

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 step attribute to ForNode in TIR, which is a significant and welcome enhancement. The changes are extensive, touching many parts of the codebase from the IR definition to codegen and TVMScript. The addition of the CanonicalizeLoop pass is a good approach to maintain compatibility with existing passes. Overall, the implementation is well-structured. However, I've found a critical issue in the loop canonicalization logic and a bug in one of the new tests. Please see my detailed comments below.

@wrongtest-intellif
Copy link
Contributor Author

/gemini review

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 is a large but well-executed pull request that adds a step attribute to ForNode. The changes are systematic and cover C++, Python, IR nodes, builders, parsers, printers, and codegen backends. The addition of the CanonicalizeLoop pass is a good strategy to maintain backward compatibility with existing passes. The new tests are comprehensive and cover the new functionality well. I have one minor suggestion to improve error handling for the range syntax sugar.

@wrongtest-intellif
Copy link
Contributor Author

@wrongtest-intellif @Hzfengsy would be great to check some of the gemini reviews, some seems to be valid

gemini review issues resolved cc @tqchen

@tqchen tqchen merged commit 13ea9dc into apache:main Nov 24, 2025
12 checks passed
@tqchen
Copy link
Member

tqchen commented Nov 24, 2025

Thanks @wrongtest-intellif !

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.

3 participants