Skip to content

🔥 Remove Eigen dependency from QCO#1774

Merged
denialhaag merged 21 commits into
mainfrom
remove-eigen
Jun 9, 2026
Merged

🔥 Remove Eigen dependency from QCO#1774
denialhaag merged 21 commits into
mainfrom
remove-eigen

Conversation

@simon1hofmann

@simon1hofmann simon1hofmann commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Description

  • Drop the Eigen dependency from the QCO MLIR dialect and replace it with a small, hand-crafted UnitaryMatrix library (Matrix1x1, Matrix2, Matrix4, DynamicMatrix).
  • Migrate all gate and modifier getUnitaryMatrix() implementations off Eigen::Matrix* types.
  • Remove Eigen from FetchContent / MLIRQCODialect link dependencies.

This removes the need for unsupported/Eigen/KroneckerProduct and other Eigen headers in QCO IR.

Motivation

Eigen was introduced primarily for matrix types and a Kronecker-product helper for controlled gates. For QCO's current needs that is heavy:

  • unsupported/Eigen/KroneckerProduct has no stability guarantee.
  • Actual usage is limited to 1×1 / 2×2 / 4×4 gate unitaries and simple modifier composition.
  • A small custom library is easier to reason about, has no external dependency, and can be optimized incrementally (e.g. SIMD) as needed.
  • CtrlOp now builds I_{2^n} ⊗ U via DynamicMatrix::identity(dim) + setBottomRightCorner(). InvOp uses in-place adjoint.

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.

…om matrix types.

Assisted-by: Composer via Cursor
@simon1hofmann simon1hofmann self-assigned this Jun 8, 2026
@simon1hofmann simon1hofmann added the MLIR Anything related to MLIR label Jun 8, 2026
@simon1hofmann simon1hofmann added this to the MLIR Support milestone Jun 8, 2026
@simon1hofmann

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 8, 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 commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR introduces a new QCO-native unitary matrix library (Matrix1x1, Matrix2x2, Matrix4x4, DynamicMatrix) and systematically replaces Eigen matrices across unitary operation APIs, implementations, tests, and build configuration. All operation getUnitaryMatrix() methods now return QCO matrix types with tolerance-based approximate equality and fixed-size linear algebra operations.

Changes

QCO unitary matrix migration

Layer / File(s) Summary
UnitaryMatrix core library: types and implementations
mlir/include/mlir/Dialect/QCO/Utils/Matrix.h, mlir/lib/Dialect/QCO/Utils/Matrix.cpp
New fixed-size (Matrix1x1, Matrix2x2, Matrix4x4) and dynamic matrix types with element access, multiplication, adjoint, trace, determinant, and tolerance-based isApprox comparisons; DynamicMatrix adds copy/move semantics, assignFrom overloads, and bottom-right corner embedding.
Interface and operation contract migration
mlir/include/mlir/Dialect/QCO/IR/QCOInterfaces.h, mlir/include/mlir/Dialect/QCO/IR/QCOInterfaces.td, mlir/include/mlir/Dialect/QCO/IR/QCOOps.td
Interface methods and all unitary operation return types updated to Matrix1x1, std::optional<Matrix2x2>, Matrix4x4, std::optional<Matrix4x4>, and std::optional<DynamicMatrix>. Dispatch logic tightened to strict fixed-size methods and dynamic fallback.
Single-qubit fixed-size gate implementations
mlir/lib/Dialect/QCO/IR/Operations/StandardGates/{Id,X,Y,Z,H,S,Sdg,T,Tdg,SX,SXdg}Op.cpp
Return type changed from Eigen::Matrix2cd to Matrix2x2; matrix construction via Matrix2x2::fromElements(...) with same numeric constants.
Single-qubit parameterized gate implementations
mlir/lib/Dialect/QCO/IR/Operations/StandardGates/{RX,RY,RZ,P,R,U2,U}Op.cpp, GPhaseOp.cpp
Return type changed from std::optional<Eigen::Matrix2cd> to std::optional<Matrix2x2> (or Matrix1x1 for GPhase); parameter-to-matrix conversions preserved; std::nullopt behavior unchanged.
Two-qubit fixed-size gate implementations
mlir/lib/Dialect/QCO/IR/Operations/StandardGates/{SWAP,iSWAP,DCX,ECR}Op.cpp
Return type changed from Eigen::Matrix4cd to Matrix4x4; matrix construction via Matrix4x4::fromElements(...) with same hard-coded unitary entries.
Two-qubit parameterized gate implementations
mlir/lib/Dialect/QCO/IR/Operations/StandardGates/{RXX,RYY,RZX,RZZ,XXPlusYY,XXMinusYY}Op.cpp
Return type changed from std::optional<Eigen::Matrix4cd> to std::optional<Matrix4x4>; parameter-to-matrix conversions preserved; std::nullopt behavior unchanged.
Modifier operations with dynamic matrix composition
mlir/lib/Dialect/QCO/IR/Modifiers/{Ctrl,Inv}Op.cpp
Return type changed to std::optional<DynamicMatrix>; Ctrl uses DynamicMatrix::identity(dim) and setBottomRightCorner to embed target unitary; Inv returns conjugate-transpose of body unitary via adjoint().
Matrix test refactoring and new unit tests
mlir/unittests/Dialect/QCO/IR/test_qco_ir_matrix.cpp, mlir/unittests/Dialect/QCO/Utils/test_unitary_matrix.cpp, mlir/unittests/Dialect/QCO/Utils/CMakeLists.txt
IR tests refactored to build expected matrices from DD definitions as Matrix* types and compare via isApprox. New comprehensive test file covers construction, element access, multiplication, adjoint, trace, determinant, isApprox tolerance, and dynamic assignment/embedding for all four matrix types.
Build configuration and dependency updates
mlir/lib/Dialect/QCO/Utils/CMakeLists.txt, mlir/lib/Dialect/QCO/IR/CMakeLists.txt, mlir/lib/Dialect/QTensor/Utils/CMakeLists.txt
New MLIRQCOMatrix library target with public header FILE_SET for Matrix.h. MLIRQCOUtils excludes Matrix.h from its headers. MLIRQCODialect removes Eigen3::Eigen linkage. MLIRQTensorUtils adds MLIRSCFDialect private linkage.
Eigen removal from tooling and changelog
cmake/ExternalDependencies.cmake, mlir/.clang-tidy, CHANGELOG.md
Eigen FetchContent_Declare and system-header setup removed from CMake. Clang-tidy IgnoreHeaders rule for Eigen patterns removed. Changelog updated to reference PR #1774.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • munich-quantum-toolkit/core#1330: Introduced QCO InvOp with early getUnitaryMatrix() signature using Eigen; this PR migrates it to DynamicMatrix.
  • munich-quantum-toolkit/core#1426: Modified UnitaryOpInterface dispatch in QCOInterfaces.td; this PR refactors that interface to tighten matrix-type contracts and method signatures.

Suggested reviewers

  • burgholzer
  • denialhaag

Poem

🐰 A matrix new is born today,
No Eigen guests to lead astray,
With fixed-size dance and dynamic grace,
QCO unitary claims its place!
Tolerance whispers, adjoints sing,
And quantum gates their matrices bring! 🎪✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 24.65% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 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 '🔥 Remove Eigen dependency from QCO' directly and clearly summarizes the main change: removing Eigen dependency from the QCO MLIR dialect.
Description check ✅ Passed The pull request description includes all major required sections with clear motivation and context for the changes.

✏️ 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 remove-eigen

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.

@simon1hofmann simon1hofmann requested a review from burgholzer June 8, 2026 14:58

@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.

Really like the direction here @simon1hofmann!
Feels good to see that dependency gone.
I have a bit of cosmetic feedback and a bunch of comments on the matrix library that should hopefully be fairly easy to address. Overall I believe the current implementation is a tiny bit too raw and needs a bit of polish.
No major blockers though.

Comment thread CHANGELOG.md Outdated
Comment thread mlir/lib/Dialect/QCO/IR/Operations/StandardGates/DCXOp.cpp Outdated
Comment thread mlir/lib/Dialect/QCO/IR/Operations/StandardGates/RXOp.cpp Outdated
Comment thread mlir/include/mlir/Dialect/QCO/Utils/UnitaryMatrix.h Outdated
Comment thread mlir/include/mlir/Dialect/QCO/Utils/UnitaryMatrix.h Outdated
Comment thread mlir/include/mlir/Dialect/QCO/Utils/UnitaryMatrix.h Outdated
Comment thread mlir/include/mlir/Dialect/QCO/Utils/Matrix.h
Comment thread mlir/include/mlir/Dialect/QCO/Utils/UnitaryMatrix.h Outdated
Comment thread mlir/include/mlir/Dialect/QCO/Utils/UnitaryMatrix.h Outdated
Comment thread mlir/include/mlir/Dialect/QCO/Utils/Matrix.h
@codecov

codecov Bot commented Jun 9, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 98.31650% with 5 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
mlir/lib/Dialect/QCO/Utils/Matrix.cpp 97.4% 4 Missing ⚠️
mlir/lib/Dialect/QCO/IR/Modifiers/CtrlOp.cpp 83.3% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@simon1hofmann

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 9, 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: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
mlir/include/mlir/Dialect/QCO/IR/QCOInterfaces.td (1)

31-102: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Keep fixed-size getUnitaryMatrix<T>() working for dynamic modifier results.

This exact-type dispatch breaks callers that ask a modifier for a fixed-size matrix. In this stack, CtrlOp and InvOp build their unitaries via DynamicMatrix, so a 1-control single-qubit CtrlOp can no longer satisfy getUnitaryMatrix<Matrix4x4>(), and an inverse of a single-qubit gate can no longer satisfy getUnitaryMatrix<Matrix2x2>(). That is a behavioral break from the previous dimension-based fallback. Please convert 1x1/2x2/4x4-sized DynamicMatrix results back into the requested fixed type instead of returning std::nullopt.

Also applies to: 204-226

🤖 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/include/mlir/Dialect/QCO/IR/QCOInterfaces.td` around lines 31 - 102, The
size-specific method bodies (unitaryMatrix1x1MethodBody,
unitaryMatrix2x2MethodBody, unitaryMatrix4x4MethodBody) currently only accept
exact matching return types from $_op.getUnitaryMatrix(), which breaks callers
that return a ::mlir::qco::DynamicMatrix (used by CtrlOp/InvOp); change each
method body so that when getUnitaryMatrix() yields a DynamicMatrix whose runtime
dimensions match the requested fixed size (1x1, 2x2, 4x4) you convert/copy it
into the corresponding ::mlir::qco::Matrix1x1/Matrix2x2/Matrix4x4, assign to
out, and return true instead of returning std::nullopt; keep the existing
exact-type checks but add the DynamicMatrix-size check and conversion path
before returning false or error.
🤖 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/lib/Dialect/QCO/Utils/UnitaryMatrix.cpp`:
- Around line 71-83: Add a shared validation that rejects negative dimensions
and invalid block sizes and prevents size_t underflow/overflow before any
indexing: create a helper (e.g., validateMatrixAndBlockDims) used by
DynamicMatrix constructor, identity, setBottomRightCorner, and
copyBottomRightCorner that checks dim >= 0, blockDim <= matrixDim, and that
static_cast<std::size_t>(dim) * static_cast<std::size_t>(dim) does not overflow
(or that dim <= max_size_t_sqrt); call this helper before allocating or
computing offsets and bail out (return/emit error/throw) if checks fail so no
negative dims are cast to size_t and no out-of-bounds indexing occurs.

In `@mlir/unittests/Dialect/QCO/Utils/test_unitary_matrix.cpp`:
- Around line 129-133: The test currently constructs "copied" as a const
DynamicMatrix which prevents invoking the move constructor; change the test to
create a non-const DynamicMatrix (e.g., remove const from "copied") and
construct "moved" by calling the move constructor with std::move(copied) (i.e.,
DynamicMatrix moved(std::move(copied))); then assert moved.isApprox(original) to
verify the move-ctor path in DynamicMatrix is exercised.

---

Outside diff comments:
In `@mlir/include/mlir/Dialect/QCO/IR/QCOInterfaces.td`:
- Around line 31-102: The size-specific method bodies
(unitaryMatrix1x1MethodBody, unitaryMatrix2x2MethodBody,
unitaryMatrix4x4MethodBody) currently only accept exact matching return types
from $_op.getUnitaryMatrix(), which breaks callers that return a
::mlir::qco::DynamicMatrix (used by CtrlOp/InvOp); change each method body so
that when getUnitaryMatrix() yields a DynamicMatrix whose runtime dimensions
match the requested fixed size (1x1, 2x2, 4x4) you convert/copy it into the
corresponding ::mlir::qco::Matrix1x1/Matrix2x2/Matrix4x4, assign to out, and
return true instead of returning std::nullopt; keep the existing exact-type
checks but add the DynamicMatrix-size check and conversion path before returning
false or error.
🪄 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: 4a15c822-d785-43aa-8cb6-89792c0baf98

📥 Commits

Reviewing files that changed from the base of the PR and between 504f603 and 7dc510f.

📒 Files selected for processing (37)
  • CHANGELOG.md
  • mlir/include/mlir/Dialect/QCO/IR/QCOInterfaces.td
  • mlir/include/mlir/Dialect/QCO/Utils/UnitaryMatrix.h
  • mlir/lib/Dialect/QCO/IR/CMakeLists.txt
  • mlir/lib/Dialect/QCO/IR/Modifiers/InvOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/DCXOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/ECROp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/HOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/IdOp.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/RXOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/RXXOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/RYOp.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/RZXOp.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/SXOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/SXdgOp.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/U2Op.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/UOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/XOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/XXMinusYYOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/XXPlusYYOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/YOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/ZOp.cpp
  • mlir/lib/Dialect/QCO/IR/Operations/StandardGates/iSWAPOp.cpp
  • mlir/lib/Dialect/QCO/Utils/CMakeLists.txt
  • mlir/lib/Dialect/QCO/Utils/UnitaryMatrix.cpp
  • mlir/unittests/Dialect/QCO/Utils/CMakeLists.txt
  • mlir/unittests/Dialect/QCO/Utils/test_unitary_matrix.cpp

Comment thread mlir/lib/Dialect/QCO/Utils/Matrix.cpp
Comment thread mlir/unittests/Dialect/QCO/Utils/test_unitary_matrix.cpp Outdated
@simon1hofmann

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 9, 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
mlir/lib/Dialect/QCO/Utils/UnitaryMatrix.cpp (1)

277-285: 🧹 Nitpick | 🔵 Trivial | 💤 Low value

Consider adding debug-only bounds assertions.

Negative or out-of-bounds indices will produce undefined behavior when cast to size_t. While the header documents valid ranges, defensive assertions would catch caller bugs during development.

🔧 Suggested assertions
 Complex& DynamicMatrix::operator()(const std::int64_t row,
                                    const std::int64_t col) {
+  assert(row >= 0 && row < impl_->dim && "row index out of bounds");
+  assert(col >= 0 && col < impl_->dim && "col index out of bounds");
   return impl_->data[static_cast<std::size_t>((row * impl_->dim) + col)];
 }

 Complex DynamicMatrix::operator()(const std::int64_t row,
                                   const std::int64_t col) const {
+  assert(row >= 0 && row < impl_->dim && "row index out of bounds");
+  assert(col >= 0 && col < impl_->dim && "col index out of bounds");
   return impl_->data[static_cast<std::size_t>((row * impl_->dim) + col)];
 }
🤖 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/lib/Dialect/QCO/Utils/UnitaryMatrix.cpp` around lines 277 - 285, Add
debug-only bounds assertions to both DynamicMatrix::operator()(std::int64_t row,
std::int64_t col) overloads: assert that row and col are >= 0 and < impl_->dim
and that the computed index (row * impl_->dim + col) is < impl_->data.size()
before casting to size_t and indexing impl_->data. Use a debug-only mechanism
(e.g., assert) so checks are present in development builds only; apply the same
checks in both the non-const and const operator() implementations to catch
negative or out-of-range indices early.
🤖 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.

Outside diff comments:
In `@mlir/lib/Dialect/QCO/Utils/UnitaryMatrix.cpp`:
- Around line 277-285: Add debug-only bounds assertions to both
DynamicMatrix::operator()(std::int64_t row, std::int64_t col) overloads: assert
that row and col are >= 0 and < impl_->dim and that the computed index (row *
impl_->dim + col) is < impl_->data.size() before casting to size_t and indexing
impl_->data. Use a debug-only mechanism (e.g., assert) so checks are present in
development builds only; apply the same checks in both the non-const and const
operator() implementations to catch negative or out-of-range indices early.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 26d4a71d-d908-458f-8c67-a6a770225726

📥 Commits

Reviewing files that changed from the base of the PR and between 7dc510f and 2b95d09.

📒 Files selected for processing (2)
  • mlir/lib/Dialect/QCO/Utils/UnitaryMatrix.cpp
  • mlir/unittests/Dialect/QCO/Utils/test_unitary_matrix.cpp

@simon1hofmann simon1hofmann requested a review from burgholzer June 9, 2026 14:27
@burgholzer

Copy link
Copy Markdown
Member

Doing a full review of this now. I'll fix the open clang-tidy comments while I am at it.

Signed-off-by: burgholzer <burgholzer@me.com>
Signed-off-by: burgholzer <burgholzer@me.com>
Calls getUnitaryMatrix only when the type check is successful

Signed-off-by: burgholzer <burgholzer@me.com>
… message

Signed-off-by: burgholzer <burgholzer@me.com>
Signed-off-by: burgholzer <burgholzer@me.com>
Signed-off-by: burgholzer <burgholzer@me.com>
In the end, the respective functionality is general enough

Signed-off-by: burgholzer <burgholzer@me.com>
Signed-off-by: burgholzer <burgholzer@me.com>
Signed-off-by: burgholzer <burgholzer@me.com>
Signed-off-by: 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.

Alright. Finished with my round of cleanups.
Please have a look at the series of commits and check if they make sense.

I am happy with this now. Maybe you could do a last sanity check and/or CodeRabbit run before we merge this 😌

Signed-off-by: burgholzer <burgholzer@me.com>
@burgholzer burgholzer added dependencies Pull requests that update a dependency file refactor Anything related to code refactoring c++ Anything related to C++ code labels Jun 9, 2026
@denialhaag

Copy link
Copy Markdown
Member

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 9, 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.

@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.

@burgholzer asked me to have a brief look at this so we can get #1751 ready as soon as possible. I pushed two very minor improvements just now. Given that CodeRabbit is happy as well, I'll set this PR to auto-merge. 🎉

@denialhaag denialhaag changed the title 🔥 Remove Eigen dependency from QCO MLIR dialect 🔥 Remove Eigen dependency from QCO Jun 9, 2026
@denialhaag denialhaag enabled auto-merge (squash) June 9, 2026 19:52
@simon1hofmann

Copy link
Copy Markdown
Contributor Author

@denialhaag @burgholzer Thanks a lot for the final changes and finishing this PR 🙏

@denialhaag denialhaag merged commit dc61cd3 into main Jun 9, 2026
33 checks passed
@denialhaag denialhaag deleted the remove-eigen branch June 9, 2026 20:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++ Anything related to C++ code dependencies Pull requests that update a dependency file MLIR Anything related to MLIR refactor Anything related to code refactoring

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants