Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ FormatStyle: file

Checks: |
bugprone-*,
-bugprone-command-processor,
-bugprone-random-generator-seed,
-bugprone-easily-swappable-parameters,
-bugprone-unchecked-optional-access,
clang-analyzer-*,
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ jobs:
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-cpp-linter.yml@afe75175d32177a7291bbb7bd11b3276f60fc810 # v1.17.15
with:
cmake-args: -DBUILD_MQT_CORE_BENCHMARKS=ON -DBUILD_MQT_CORE_BINDINGS=ON
clang-version: 21
clang-version: 22
build-project: true
files-changed-only: true
setup-python: true
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ This project adheres to [Semantic Versioning], with the exception that minor rel

### Changed

- ⬆️ Update `clang-tidy` to version 22 ([#1564]) ([**@denialhaag**], [**@burgholzer**])
- 👷 Build on `macos-26`/`macos-26-intel` by default and `macos-15`/`macos-15-intel` for extensive tests ([#1571]) ([**@denialhaag**])
- ⬆️ Require LLVM 22.1 for C++ library builds ([#1549]) ([**@burgholzer**], [**@denialhaag**])
- 📦 Build MLIR by default for C++ library builds ([#1356]) ([**@burgholzer**], [**@denialhaag**])
Expand Down Expand Up @@ -336,6 +337,7 @@ _📚 Refer to the [GitHub Release Notes](https://github.com/munich-quantum-tool
[#1570]: https://github.com/munich-quantum-toolkit/core/pull/1570
[#1568]: https://github.com/munich-quantum-toolkit/core/pull/1568
[#1565]: https://github.com/munich-quantum-toolkit/core/pull/1565
[#1564]: https://github.com/munich-quantum-toolkit/core/pull/1564
[#1554]: https://github.com/munich-quantum-toolkit/core/pull/1554
[#1550]: https://github.com/munich-quantum-toolkit/core/pull/1550
[#1549]: https://github.com/munich-quantum-toolkit/core/pull/1549
Expand Down
8 changes: 4 additions & 4 deletions eval/eval_dd_package.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@
#include <utility>

namespace dd {
namespace {

constexpr std::size_t SEED = 42U;

struct Experiment {
std::unique_ptr<Package> dd;
Expand Down Expand Up @@ -73,7 +76,6 @@ struct FunctionalityConstructionExperiment final : Experiment {
}
};

namespace {
std::unique_ptr<SimulationExperiment>
benchmarkSimulate(const qc::QuantumComputation& qc) {
auto exp = std::make_unique<SimulationExperiment>();
Expand Down Expand Up @@ -191,9 +193,6 @@ benchmarkFunctionalityConstructionGrover(
exp->stats = getStatistics(*exp->dd);
return exp;
}
} // namespace

static constexpr std::size_t SEED = 42U;

class BenchmarkDDPackage {
protected:
Expand Down Expand Up @@ -407,6 +406,7 @@ class BenchmarkDDPackage {
}
};

} // namespace
} // namespace dd

int main(const int argc, char** argv) {
Expand Down
5 changes: 2 additions & 3 deletions include/mqt-core/dd/DDDefinitions.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,8 @@ using Qubit = std::uint16_t;
* @note Adjusting the precision might lead to unexpected results.
*/
using fp = double;
static_assert(
std::is_floating_point_v<fp>,
"fp should be a floating point type (float, *double*, long double)");
static_assert(std::is_floating_point_v<fp>,
"fp should be a floating point type (float or double)");

// logic radix
static constexpr std::uint8_t RADIX = 2;
Expand Down
2 changes: 1 addition & 1 deletion include/mqt-core/ir/operations/Expression.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -842,7 +842,7 @@ template <typename T, typename U> struct std::hash<sym::Expression<T, U>> {
qc::hashCombine(seed, std::hash<U>{}(expr.getConst()));
return seed;
}
}; // namespace std
};

namespace qc {
using Symbolic = sym::Expression<fp, fp>;
Expand Down
2 changes: 1 addition & 1 deletion include/mqt-core/ir/operations/IfElseOperation.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -164,4 +164,4 @@ class IfElseOperation final : public Operation {

template <> struct std::hash<qc::IfElseOperation> {
std::size_t operator()(qc::IfElseOperation const& op) const noexcept;
}; // namespace std
};
5 changes: 4 additions & 1 deletion mlir/.clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@ Checks: |
llvm-prefer-isa-or-dyn-cast-in-conditionals,
llvm-prefer-register-over-unsigned,
llvm-prefer-static-over-anonymous-namespace,
-misc-use-anonymous-namespace,
llvm-twine-local,
-bugprone-throwing-static-initialization,
-cppcoreguidelines-avoid-non-const-global-variables,
-cppcoreguidelines-pro-bounds-avoid-unchecked-container-access,
-misc-use-anonymous-namespace,
-modernize-type-traits,
-*-const-correctness,

CheckOptions:
Expand Down
9 changes: 7 additions & 2 deletions mlir/lib/Conversion/JeffToQCO/JeffToQCO.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#include <utility>

namespace mlir {

using namespace qco;

#define GEN_PASS_DEF_JEFFTOQCO
Expand Down Expand Up @@ -378,6 +379,8 @@ static LogicalResult cleanUp(Operation* op) {
return success();
}

namespace {

/**
* @brief Converts jeff.qubit_alloc to qco.alloc
*
Expand Down Expand Up @@ -590,7 +593,7 @@ struct ConvertJeffOneTargetZeroParameterToQCO final
using OpConversionPattern<JeffOpType>::OpConversionPattern;

LogicalResult
matchAndRewrite(JeffOpType op, typename JeffOpType::Adaptor adaptor,
matchAndRewrite(JeffOpType op, JeffOpType::Adaptor adaptor,
ConversionPatternRewriter& rewriter) const override {
if (op.getPower() != 1) {
return rewriter.notifyMatchFailure(
Expand Down Expand Up @@ -626,7 +629,7 @@ struct ConvertJeffOneTargetOneParameterToQCO final
using OpConversionPattern<JeffOpType>::OpConversionPattern;

LogicalResult
matchAndRewrite(JeffOpType op, typename JeffOpType::Adaptor adaptor,
matchAndRewrite(JeffOpType op, JeffOpType::Adaptor adaptor,
ConversionPatternRewriter& rewriter) const override {
if (op.getPower() != 1) {
return rewriter.notifyMatchFailure(
Expand Down Expand Up @@ -963,4 +966,6 @@ struct JeffToQCO final : impl::JeffToQCOBase<JeffToQCO> {
}
};

} // namespace

} // namespace mlir
13 changes: 9 additions & 4 deletions mlir/lib/Conversion/QCOToJeff/QCOToJeff.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#include <utility>

namespace mlir {

using namespace qco;

#define GEN_PASS_DEF_QCOTOJEFF
Expand Down Expand Up @@ -241,6 +242,8 @@ static LogicalResult cleanUp(Operation* op, LoweringState& state) {
return success();
}

namespace {

/**
* @brief Converts qco.alloc to jeff.qubit_alloc
*
Expand Down Expand Up @@ -400,7 +403,7 @@ struct ConvertQCOOneTargetZeroParameterToJeff final
using StatefulOpConversionPattern<QCOOpType>::StatefulOpConversionPattern;

LogicalResult
matchAndRewrite(QCOOpType op, typename QCOOpType::Adaptor adaptor,
matchAndRewrite(QCOOpType op, QCOOpType::Adaptor adaptor,
ConversionPatternRewriter& rewriter) const override {
auto& state = this->getState();

Expand Down Expand Up @@ -516,7 +519,7 @@ struct ConvertQCOOneTargetOneParameterToJeff final
using StatefulOpConversionPattern<QCOOpType>::StatefulOpConversionPattern;

LogicalResult
matchAndRewrite(QCOOpType op, typename QCOOpType::Adaptor adaptor,
matchAndRewrite(QCOOpType op, QCOOpType::Adaptor adaptor,
ConversionPatternRewriter& rewriter) const override {
auto& state = this->getState();

Expand Down Expand Up @@ -647,7 +650,7 @@ struct ConvertQCOOneTargetThreeParameterToJeff final
using StatefulOpConversionPattern<QCOOpType>::StatefulOpConversionPattern;

LogicalResult
matchAndRewrite(QCOOpType op, typename QCOOpType::Adaptor adaptor,
matchAndRewrite(QCOOpType op, QCOOpType::Adaptor adaptor,
ConversionPatternRewriter& rewriter) const override {
auto& state = this->getState();

Expand Down Expand Up @@ -698,7 +701,7 @@ struct ConvertQCOTwoTargetZeroParameterToJeff final
using StatefulOpConversionPattern<QCOOpType>::StatefulOpConversionPattern;

LogicalResult
matchAndRewrite(QCOOpType op, typename QCOOpType::Adaptor adaptor,
matchAndRewrite(QCOOpType op, QCOOpType::Adaptor adaptor,
ConversionPatternRewriter& rewriter) const override {
auto& state = this->getState();

Expand Down Expand Up @@ -1400,4 +1403,6 @@ struct QCOToJeff final : impl::QCOToJeffBase<QCOToJeff> {
}
};

} // namespace

} // namespace mlir
21 changes: 13 additions & 8 deletions mlir/lib/Conversion/QCOToQC/QCOToQC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,15 @@
#include <utility>

namespace mlir {

using namespace qco;
using namespace qc;

#define GEN_PASS_DEF_QCOTOQC
#include "mlir/Conversion/QCOToQC/QCOToQC.h.inc"

namespace {

/**
* @brief Type converter for QCO-to-QC conversion
*
Expand Down Expand Up @@ -257,7 +260,7 @@ struct ConvertQCOZeroTargetOneParameterToQC final
using OpConversionPattern<QCOOpType>::OpConversionPattern;

LogicalResult
matchAndRewrite(QCOOpType op, typename QCOOpType::Adaptor /*adaptor*/,
matchAndRewrite(QCOOpType op, QCOOpType::Adaptor /*adaptor*/,
ConversionPatternRewriter& rewriter) const override {
QCOpType::create(rewriter, op.getLoc(), op.getParameter(0));
rewriter.eraseOp(op);
Expand Down Expand Up @@ -286,7 +289,7 @@ struct ConvertQCOOneTargetZeroParameterToQC final
using OpConversionPattern<QCOOpType>::OpConversionPattern;

LogicalResult
matchAndRewrite(QCOOpType op, typename QCOOpType::Adaptor adaptor,
matchAndRewrite(QCOOpType op, QCOOpType::Adaptor adaptor,
ConversionPatternRewriter& rewriter) const override {
// OpAdaptor provides the already type-converted input qubit
auto qcQubit = adaptor.getQubitIn();
Expand Down Expand Up @@ -322,7 +325,7 @@ struct ConvertQCOOneTargetOneParameterToQC final
using OpConversionPattern<QCOOpType>::OpConversionPattern;

LogicalResult
matchAndRewrite(QCOOpType op, typename QCOOpType::Adaptor adaptor,
matchAndRewrite(QCOOpType op, QCOOpType::Adaptor adaptor,
ConversionPatternRewriter& rewriter) const override {
// OpAdaptor provides the already type-converted input qubit
auto qcQubit = adaptor.getQubitIn();
Expand Down Expand Up @@ -358,7 +361,7 @@ struct ConvertQCOOneTargetTwoParameterToQC final
using OpConversionPattern<QCOOpType>::OpConversionPattern;

LogicalResult
matchAndRewrite(QCOOpType op, typename QCOOpType::Adaptor adaptor,
matchAndRewrite(QCOOpType op, QCOOpType::Adaptor adaptor,
ConversionPatternRewriter& rewriter) const override {
// OpAdaptor provides the already type-converted input qubit
auto qcQubit = adaptor.getQubitIn();
Expand Down Expand Up @@ -395,7 +398,7 @@ struct ConvertQCOOneTargetThreeParameterToQC final
using OpConversionPattern<QCOOpType>::OpConversionPattern;

LogicalResult
matchAndRewrite(QCOOpType op, typename QCOOpType::Adaptor adaptor,
matchAndRewrite(QCOOpType op, QCOOpType::Adaptor adaptor,
ConversionPatternRewriter& rewriter) const override {
// OpAdaptor provides the already type-converted input qubit
auto qcQubit = adaptor.getQubitIn();
Expand Down Expand Up @@ -433,7 +436,7 @@ struct ConvertQCOTwoTargetZeroParameterToQC final
using OpConversionPattern<QCOOpType>::OpConversionPattern;

LogicalResult
matchAndRewrite(QCOOpType op, typename QCOOpType::Adaptor adaptor,
matchAndRewrite(QCOOpType op, QCOOpType::Adaptor adaptor,
ConversionPatternRewriter& rewriter) const override {
// OpAdaptor provides the already type-converted input qubits
auto qcQubit0 = adaptor.getQubit0In();
Expand Down Expand Up @@ -471,7 +474,7 @@ struct ConvertQCOTwoTargetOneParameterToQC final
using OpConversionPattern<QCOOpType>::OpConversionPattern;

LogicalResult
matchAndRewrite(QCOOpType op, typename QCOOpType::Adaptor adaptor,
matchAndRewrite(QCOOpType op, QCOOpType::Adaptor adaptor,
ConversionPatternRewriter& rewriter) const override {
// OpAdaptor provides the already type-converted input qubits
auto qcQubit0 = adaptor.getQubit0In();
Expand Down Expand Up @@ -510,7 +513,7 @@ struct ConvertQCOTwoTargetTwoParameterToQC final
using OpConversionPattern<QCOOpType>::OpConversionPattern;

LogicalResult
matchAndRewrite(QCOOpType op, typename QCOOpType::Adaptor adaptor,
matchAndRewrite(QCOOpType op, QCOOpType::Adaptor adaptor,
ConversionPatternRewriter& rewriter) const override {
// OpAdaptor provides the already type-converted input qubits
auto qcQubit0 = adaptor.getQubit0In();
Expand Down Expand Up @@ -817,4 +820,6 @@ struct QCOToQC final : impl::QCOToQCBase<QCOToQC> {
}
};

} // namespace

} // namespace mlir
Loading
Loading