Transforms: share the horizontal fusion passes - #22122
Open
rascani wants to merge 2 commits into
Open
Conversation
Contributor
Author
🔗 Helpful Links🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/22122
Note: Links to docs will display an error until the docs builds have been completed. ❌ 11 New FailuresAs of commit 5f12829 with merge base e831b3e ( NEW FAILURES - The following jobs have failed:
This comment was automatically generated by Dr. CI and updates every 15 minutes. |
This was referenced Aug 25, 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.
FuseDuplicateUsersPass and FuseIdenticalInputTransformsPass are the fan-out and
fan-in halves of horizontal fusion: the first merges identical transforms that
several users apply to one producer, the second merges identical transforms
several producers apply into one consumer. Together with the canonicalizer they
are everything the propagation driver needs besides the algorithm itself.
Neither had a real tie to Arm. FuseIdenticalInputTransformsPass took
ArmOpTargetedPass for a pre-scan optimization it never used, since it overrides
call() outright and reads target_ops only as a membership set.
FuseDuplicateUsersPass had one genuine dependency worth preserving rather than
deleting: it refuses to fuse duplicate users of tosa.RESCALE, because a fused
RESCALE feeding every original consumer corrupts integer output on Ethos-U. That
is not a property of duplicate-user fusion, it is a property of RESCALE, so the
exclusion set becomes a constructor argument that defaults to empty. The Arm
subclass supplies the TOSA set, and the driver asks for it through a new
duplicate_user_fusion_exclusions() extension point so it no longer needs to know
what a RESCALE is.
With this the driver's only remaining Arm import is the pass base class, and it
can move next.
No behaviour change: the Arm pass suite produces a failure set identical to
merge base, name for name.
Authored with Claude Code.