feat(optim): add static Split-to-Slice rewrite#1142
Merged
Conversation
DingmaomaoBJTU
left a comment
Collaborator
There was a problem hiding this comment.
Reviewed the static Split-to-Slice rewrite. Overall design looks solid: opt-in flag, conservative bail-out for dynamic/malformed cases, dead-code pruning, and nested-subgraph capture handling are all done carefully. Left two non-blocking inline notes.
DingmaomaoBJTU
approved these changes
Jul 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add an opt-in
static-split-to-slicealgebraic rewrite that replaces eligible ONNXSplitnodes with equivalent input-formSlicenodes while preserving output tensor names.The rewrite only applies when the input shape, axis, and split boundaries are statically known. It supports explicit split sizes and equal splits, avoids malformed or dynamic cases, handles name collisions, preserves nested-subgraph captures, removes dead generated nodes and constants, and remains idempotent through the public optimization path.
Why this is not a pattern rewrite
The existing pattern framework is designed for fixed-topology replacements with compatible source and target schemas. Its match result exposes a single pattern output, and
PatternRewriterconstructs the replacement using that fixed output mapping.A
Splitnode is variadic: one matched node may have any number of outputs, and the replacement must generate oneSlicenode plus four boundary initializers for each output. The replacement topology and constants therefore depend on the specific matched node rather than on a fixed target pattern. Representing this correctly as a pattern would first require broader framework support for variadic output mappings and match-parameterized replacement topology.For that reason, this transformation is implemented as a focused algebraic rewrite rather than adding model-specific behavior or forcing it into the current fixed-shape pattern abstraction.