Skip to content

⚡️ Improve canonicalizations for gate fusion and inverse cancellation#1782

Merged
burgholzer merged 21 commits into
mainfrom
rz-ctrl-canonicalization
Jun 17, 2026
Merged

⚡️ Improve canonicalizations for gate fusion and inverse cancellation#1782
burgholzer merged 21 commits into
mainfrom
rz-ctrl-canonicalization

Conversation

@simon1hofmann

@simon1hofmann simon1hofmann commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Description

Adds a few merge patterns and consolidates shared logic in QCOUtils.h.

Additional patterns:
For r: merge when phi matches (sum theta).
For xx_plus_yy and xx_minus_yy: sum theta with swapped target wires.

AI Assistance

Used Composer via Cursor for parts of this change. I reviewed the full diff and take responsibility for everything in this PR.

Checklist

  • The pull request only contains commits that are focused and relevant to this change.
  • I have added appropriate tests that cover the new/changed functionality.
  • I have updated the documentation to reflect these changes.
  • I have added entries to the changelog for any noteworthy additions, changes, fixes, or removals.
  • I have added migration instructions to the upgrade guide (if needed).
  • The changes follow the project's style guidelines and introduce no new warnings.
  • The changes are fully tested and pass the CI checks.
  • I have reviewed my own code changes.

If PR contains AI-assisted content:

  • I have disclosed the use of AI tools in the PR description as per our AI Usage Guidelines.
  • AI-assisted commits include an Assisted-by: [Model Name] via [Tool Name] footer.
  • I confirm that I have personally reviewed and understood all AI-generated content, and accept full responsibility for it.

@simon1hofmann simon1hofmann added this to the MLIR Support milestone Jun 12, 2026
@simon1hofmann simon1hofmann self-assigned this Jun 12, 2026
@simon1hofmann simon1hofmann added MLIR Anything related to MLIR feature New feature or request labels Jun 12, 2026
@codecov

codecov Bot commented Jun 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 89.65517% with 6 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
mlir/include/mlir/Dialect/QCO/QCOUtils.h 85.2% 5 Missing ⚠️
...ib/Dialect/QCO/IR/Operations/StandardGates/ROp.cpp 91.6% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@simon1hofmann

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@coderabbitai

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR adds tolerant parameter comparison and ctrl-chain partner discovery utilities, refactors/extends gate merge templates, and registers new canonicalization patterns across single-target and two-target QCO gates with corresponding unit-test builders and test cases.

Changes

QCO gate merges through control chains

Layer / File(s) Summary
Core merge utilities and templates
mlir/include/mlir/Dialect/QCO/QCOUtils.h
Added twoTargetWiresMatch, valuesMatchWithinTolerance, findPartnerOnControlWire, and refactored one-target/two-target merge helpers with ctrl-chain and swapped-target support via optional flags.
Single-target gate canonicalization patterns
mlir/lib/Dialect/QCO/IR/Operations/StandardGates/{POp,ROp,RZOp,SOp,SdgOp,TOp,TdgOp}.cpp
Registered new canonicalization rewrite patterns that delegate merging to the new helpers: P (ctrl-chain one-parameter), R (sequential two-parameter), RZ (ctrl-chain one-parameter), S/Sdg→Z (ctrl-chain zero-parameter), T/Tdg→S/Sdg (ctrl-chain zero-parameter).
Two-target gate canonicalization with swapped-target support
mlir/lib/Dialect/QCO/IR/Operations/StandardGates/{RXXOp,RYYOp,RZZOp,SWAPOp,DCXOp,XXMinusYYOp,XXPlusYYOp}.cpp
Updated merge invocations to use unified helpers with swapped-target boolean flags, and added new patterns for XXMinusYY/XXPlusYY to handle swapped target ordering via mergeXXPlusMinusYY.
IR equivalence test cases and program builders
mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp, mlir/unittests/programs/{qco_programs.h,qco_programs.cpp}
Extended parameterized tests with two-gate ctrl-chain, nested ctrl-chain, and swapped-target test cases; added program-builder helpers modeling these patterns and their merged canonical-form variants.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

  • munich-quantum-toolkit/core#1554: Overlapping refactoring of swapped-target two-qubit canonicalization logic and unified helper signatures in QCOUtils.h.
  • munich-quantum-toolkit/core#1550: Related changes to DCX inverse-pair removal using the refactored removeInversePairTwoTargetZeroParameter helper with swapped-target flag.

Suggested labels

enhancement

Suggested reviewers

  • burgholzer
  • denialhaag

Poem

A rabbit hops through circuits, soft and spry, 🐇
Merging chains where ctrl-wires lie,
Angles summed with care, tolerances in tow,
Tests build patterns so the rewrites flow,
Canonical gates aligned beneath the sky. ✨

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 9.64% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ❓ Inconclusive The PR description provides a clear summary of the changes (merge patterns, QCOUtils consolidation, AI disclosure) but lacks detailed motivation, context, and issue references. Provide more detailed context explaining why these canonicalization patterns are needed, and clarify which issue(s) this PR addresses by adding 'Fixes #(issue)' or 'Related to #(issue)' as specified in the template.
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title accurately describes the main focus of the PR: improving canonicalizations for gate fusion and inverse cancellation through control-wire merging and refactored utilities.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch rz-ctrl-canonicalization

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@mlir/include/mlir/Dialect/QCO/QCOUtils.h`:
- Around line 53-60: addFloatParameters currently creates arith::AddFOp at the
rewriter's current insertion point which can be before one operand's def and
yield non-dominating uses; update addFloatParameters to materialize the add at a
dominance-safe location by computing the later-definition point of lhs and rhs
(e.g., inspect lhs.getDefiningOp() and rhs.getDefiningOp() and choose the later
op in the same block) and call rewriter.setInsertionPointAfter(that op) (or
otherwise set the insertion point to a block position that is guaranteed to
dominate both uses) before creating arith::AddFOp; apply this change so callers
like mergeOneTargetOneParameterThroughCtrlControlChain,
mergeOneTargetTwoParameter, mergeTwoTargetOneParameterImpl, and
mergeTwoTargetTwoParameterImpl do not need to manually adjust insertion point
and ensure the surviving gate is chosen/adjusted to be the later one when
materialization must occur later.

In `@mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp`:
- Around line 641-643: The negative tests "TwoRZSplitAcrossCtrlTargetWires" and
"TwoXXMinusYYMismatchedBeta" are using the same builder for both sides so
ProgramEquivalence's canonicalization masks mismatches; update the test harness
so these negative cases do not canonicalize the reference side: locate the
creation/registration of QCOTestCase entries for those names and set
canonicalizeReference = false (or otherwise pass a distinct, non-canonicalized
reference) so the incorrect merge cannot be applied to both modules; do the same
change for the other occurrence of these cases around the later block mentioned
(the second set at lines ~1031-1033).
- Around line 482-486: Add a test case that exercises the tolerance branch by
inserting a QCOTestCase where the two constants differ by a small delta less
than utils::TOLERANCE and assert the merged canonical form (same expectation as
the exact-equality case): locate the test vectors where QCOTestCase entries are
constructed (e.g., the entries with names "CanonicalizeRToRx",
"CanonicalizeRToRy", and "TwoR") and add a new case (name like
"TwoRWithinTolerance") using the same builder for the canonical form (e.g.,
MQT_NAMED_BUILDER(r)) and a source builder that produces the near-equal
constants (similar to MQT_NAMED_BUILDER(twoR) but with phi/beta adjusted by a
delta < utils::TOLERANCE); repeat this addition in the other test list
referenced (the block around the other occurrence of QCOTestCase at the later
location).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 18fed9e1-adaf-49b4-bc5a-342b6992aaac

📥 Commits

Reviewing files that changed from the base of the PR and between e595087 and 9a526f5.

📒 Files selected for processing (13)
  • mlir/include/mlir/Dialect/QCO/QCOUtils.h
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/POp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/ROp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/RZOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/SOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/SdgOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/TOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/TdgOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/XXMinusYYOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/XXPlusYYOp.cpp
  • mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp
  • mlir/unittests/programs/qco_programs.cpp
  • mlir/unittests/programs/qco_programs.h

Comment thread mlir/include/mlir/Dialect/QCO/QCOUtils.h Outdated
Comment thread mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp
Comment thread mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp Outdated
@simon1hofmann

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@simon1hofmann simon1hofmann requested a review from denialhaag June 12, 2026 13:07

@denialhaag denialhaag left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks a lot for your work on this, @simon1hofmann! 🙂 This already looks really good to me. I just have some points on consistency ✨ below.

Comment thread mlir/include/mlir/Dialect/QCO/QCOUtils.h Outdated
Comment thread mlir/include/mlir/Dialect/QCO/QCOUtils.h Outdated
Comment thread mlir/include/mlir/Dialect/QCO/QCOUtils.h Outdated
Comment thread mlir/include/mlir/Dialect/QCO/QCOUtils.h Outdated
Comment thread mlir/include/mlir/Dialect/QCO/QCOUtils.h Outdated
Comment thread mlir/include/mlir/Dialect/QCO/QCOUtils.h Outdated
Comment thread mlir/include/mlir/Dialect/QCO/QCOUtils.h Outdated
@simon1hofmann

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp (1)

485-486: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

TwoR can still pass if mismatched-phi merging is broken.

Because Line 91 canonicalizes the reference module too, this mixed case (one merge-allowed pair + one merge-forbidden pair) can become self-fulfilling: a buggy rewrite may apply to both sides and still pass. This mirrors the previously addressed harness pitfall and is reintroduced by the new TwoR case.

💡 Minimal hardening
 struct QCOTestCase {
   std::string name;
   mqt::test::NamedBuilder<QCOProgramBuilder> programBuilder;
   mqt::test::NamedBuilder<QCOProgramBuilder> referenceBuilder;
+  bool canonicalizeReference = true;
@@
-  EXPECT_TRUE(runQCOCleanupPipeline(reference.get()).succeeded());
-  printer.record(reference.get(), "Canonicalized Reference QCO IR" + name);
-  EXPECT_TRUE(verify(*reference).succeeded());
+  if (GetParam().canonicalizeReference) {
+    EXPECT_TRUE(runQCOCleanupPipeline(reference.get()).succeeded());
+    printer.record(reference.get(), "Canonicalized Reference QCO IR" + name);
+    EXPECT_TRUE(verify(*reference).succeeded());
+  }
@@
-        QCOTestCase{"TwoR", MQT_NAMED_BUILDER(twoR),
-                    MQT_NAMED_BUILDER(twoRMerged)}));
+        QCOTestCase{"TwoR", MQT_NAMED_BUILDER(twoR),
+                    MQT_NAMED_BUILDER(twoRMerged), false}));
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp` around lines 485 - 486, The
TwoR test case at line 485-486 can incorrectly pass if the phi merging logic is
broken because Line 91 canonicalizes the reference module, allowing a buggy
rewrite to apply incorrectly to both the input and reference modules while still
matching. Harden the test by ensuring the reference module (twoRMerged) cannot
inadvertently match the input module (twoR) when phi merging is broken. This may
require modifying the test data structure or the reference case to create a
meaningful divergence that a correct implementation would achieve but a buggy
one would not, preventing the self-fulfilling test condition.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@mlir/include/mlir/Dialect/QCO/QCOUtils.h`:
- Line 41: The twoTargetWiresMatch function at line 41 only validates that the
second target wire (wire 1) matches between operations, but it must also
validate the first target wire (wire 0) to properly fulfill the helper's
contract. Modify the return statement to check both op.getOutputQubit(0) ==
nextOp.getInputQubit(0) AND op.getOutputQubit(1) == nextOp.getInputQubit(1),
ensuring both wires match before returning true.

---

Duplicate comments:
In `@mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp`:
- Around line 485-486: The TwoR test case at line 485-486 can incorrectly pass
if the phi merging logic is broken because Line 91 canonicalizes the reference
module, allowing a buggy rewrite to apply incorrectly to both the input and
reference modules while still matching. Harden the test by ensuring the
reference module (twoRMerged) cannot inadvertently match the input module (twoR)
when phi merging is broken. This may require modifying the test data structure
or the reference case to create a meaningful divergence that a correct
implementation would achieve but a buggy one would not, preventing the
self-fulfilling test condition.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: d42f0866-ac49-4cf1-b991-e17401561d6e

📥 Commits

Reviewing files that changed from the base of the PR and between c275cf8 and 0c4adcc.

📒 Files selected for processing (18)
  • mlir/include/mlir/Dialect/QCO/QCOUtils.h
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/DCXOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/POp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/ROp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/RXXOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/RYYOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/RZOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/RZZOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/SOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/SWAPOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/SdgOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/TOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/TdgOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/XXMinusYYOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/XXPlusYYOp.cpp
  • mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp
  • mlir/unittests/programs/qco_programs.cpp
  • mlir/unittests/programs/qco_programs.h

Comment thread mlir/include/mlir/Dialect/QCO/QCOUtils.h Outdated
@simon1hofmann

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

♻️ Duplicate comments (1)
mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp (1)

486-487: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

TwoROppositePhase is currently a self-fulfilling negative test.

Because both modules are canonicalized (Line 82 and Line 91), using twoROppositePhase as both source and reference means an incorrect merge can be applied to both sides and still pass. Make this case compare canonicalized source against a non-canonicalized reference (or disable reference canonicalization per-case) to actually catch regressions.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp` around lines 486 - 487, The
TwoROppositePhase test case uses the same canonicalized twoROppositePhase
builder for both the source and reference, making it a self-fulfilling test that
cannot catch merge logic regressions. Replace the second parameter (the
reference) with either a non-canonicalized version of twoROppositePhase or a
different builder that does not undergo canonicalization, so that the test
actually validates the merge behavior against an expected non-canonicalized
result. This ensures that any incorrect transformations applied during merging
will be caught by the comparison.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp`:
- Around line 486-487: The TwoROppositePhase test case uses the same
canonicalized twoROppositePhase builder for both the source and reference,
making it a self-fulfilling test that cannot catch merge logic regressions.
Replace the second parameter (the reference) with either a non-canonicalized
version of twoROppositePhase or a different builder that does not undergo
canonicalization, so that the test actually validates the merge behavior against
an expected non-canonicalized result. This ensures that any incorrect
transformations applied during merging will be caught by the comparison.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 641c6266-c9d0-450f-91d7-828b19c7e661

📥 Commits

Reviewing files that changed from the base of the PR and between 0c4adcc and 19dde1a.

📒 Files selected for processing (3)
  • mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp
  • mlir/unittests/programs/qco_programs.cpp
  • mlir/unittests/programs/qco_programs.h

@denialhaag denialhaag left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for addressing my comments! 🙂

Apart from the open CodeRabbit comment, this looks good to me now. I'll leave the final judgment to @burgholzer.

@denialhaag denialhaag requested a review from burgholzer June 16, 2026 10:30
@simon1hofmann

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@mergify mergify Bot added the conflict label Jun 17, 2026
Signed-off-by: Lukas Burgholzer <burgholzer@me.com>
Adds direct handling for symmetric gates, which halves the number of patterns for certain operations.
Furthermore, optimizes the implementation itself.

Signed-off-by: Lukas Burgholzer <burgholzer@me.com>
@mergify mergify Bot removed the conflict label Jun 17, 2026
Signed-off-by: Lukas Burgholzer <burgholzer@me.com>

@burgholzer burgholzer left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for another PR @simon1hofmann 🙏🏼
I also edited this one a bit.
In particular, I further improved the existing canonicalization patterns. I really liked the direction here!

On the other hand, I reverted the changes for for the control-wire canonicalization for now. I am not convinced that this is the way to go here. I believe that a more promising way to go about this would be to introduce commutation rules that push diagonal gates through control qubits. I would argue this should not be part of a canonicalization pipeline though. Rather I'd put this into some kind of optimization pass similar to Qiskit's commutation-based optimizer. I would not put this on high priority though.

Since I really believe the other changes are a genuine improvement, I figured this is the quickest way to get this in.
I'll change the title and the PR description a little bit to reflect this.

@burgholzer burgholzer changed the title ✨ Canonicalize Z-diagonal gates through ctrl control chains ⚡️ Improve canonicalizations for gate fusion and inverse cancellation Jun 17, 2026
@burgholzer burgholzer merged commit 801b431 into main Jun 17, 2026
49 of 51 checks passed
@burgholzer burgholzer deleted the rz-ctrl-canonicalization branch June 17, 2026 20:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New feature or request MLIR Anything related to MLIR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants