Skip to content

Commit 83f853e

Browse files
committed
Continue implementign merge pass [skip CI]
1 parent c606307 commit 83f853e

File tree

3 files changed

+60
-9
lines changed

3 files changed

+60
-9
lines changed

mlir/include/mlir/Dialect/MQTOpt/IR/MQTOptInterfaces.td

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,24 @@ def UnitaryInterface : OpInterface<"UnitaryInterface"> {
140140
operands.insert(operands.end(), outQubits.begin(), outQubits.end());
141141
operands.insert(operands.end(), controls.begin(), controls.end());
142142
return operands;
143+
}]>,
144+
InterfaceMethod<
145+
/*desc=*/ "Get params.",
146+
/*returnType=*/ "Variadic<F64>",
147+
/*methodName=*/ "getParams",
148+
/*args=*/ (ins),
149+
/*methodBody=*/ [{}],
150+
/*defaultImpl=*/ [{
151+
return $_op.getParams();
152+
}]>,
153+
InterfaceMethod<
154+
/*desc=*/ "Set params.",
155+
/*returnType=*/ "void",
156+
/*methodName=*/ "setParams",
157+
/*args=*/ (ins Variadic<F64>:$values),
158+
/*methodBody=*/ [{}],
159+
/*defaultImpl=*/ [{
160+
return $_op.setParams(values);
143161
}]>
144162
];
145163

mlir/lib/Dialect/MQTOpt/Transforms/MergeRotationGatesPattern.cpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -96,15 +96,13 @@ struct MergeRotationGatesPattern final
9696
mlir::PatternRewriter& rewriter) const override {
9797
auto user = mlir::dyn_cast<UnitaryInterface>(*op->getUsers().begin());
9898

99-
// Something like this
100-
// I probably need to extend MQTOptInterfaces.td
101-
// p1 = op.getParams();
102-
// p2 = user.getParams();
103-
// p = p1 + p2;
104-
// new = user.clone();
105-
// new.setParams(p);
106-
// rewriter.replaceOp(user, new);
107-
// rewriter.eraseOp(op);
99+
double p1 = op.getParams()[0];
100+
double p2 = user.getParams()[0];
101+
double p = p1 + p2;
102+
auto newOp = user.clone();
103+
newOp.setParams(p);
104+
rewriter.replaceOp(user, newOp);
105+
rewriter.eraseOp(op);
108106
}
109107
};
110108

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
2+
// Copyright (c) 2025 Munich Quantum Software Company GmbH
3+
// All rights reserved.
4+
//
5+
// SPDX-License-Identifier: MIT
6+
//
7+
// Licensed under the MIT License
8+
9+
// RUN: quantum-opt %s -split-input-file --merge-rotation-gates | FileCheck %s
10+
11+
module {
12+
func.func @testMergeSingleQubitGates() {
13+
// CHECK: %[[Reg_0:.*]] = "mqtopt.allocQubitRegister"
14+
%reg_0 = "mqtopt.allocQubitRegister"() <{size_attr = 2 : i64}> : () -> !mqtopt.QubitRegister
15+
16+
// CHECK: %[[Reg_1:.*]], %[[Q0_0:.*]] = "mqtopt.extractQubit"(%[[Reg_0]]) <{index_attr = 0 : i64}>
17+
%reg_1, %q0_0 = "mqtopt.extractQubit"(%reg_0) <{index_attr = 0 : i64}> : (!mqtopt.QubitRegister) -> (!mqtopt.QubitRegister, !mqtopt.Qubit)
18+
// CHECK: %[[Reg_2:.*]], %[[Q1_0:.*]] = "mqtopt.extractQubit"(%[[Reg_1]]) <{index_attr = 1 : i64}>
19+
%reg_2, %q1_0 = "mqtopt.extractQubit"(%reg_1) <{index_attr = 1 : i64}> : (!mqtopt.QubitRegister) -> (!mqtopt.QubitRegister, !mqtopt.Qubit)
20+
21+
// ========================== Check for operation that should be merged ==========================
22+
// CHECK: %[[Q0_1:.*]] = mqtopt.rx(2.0) %[[Q0_0]] : !mqtopt.Qubit
23+
24+
%q0_1 = mqtopt.rx(1.0) %q0_0 : !mqtopt.Qubit
25+
%q0_2 = mqtopt.rx(1.0) %q0_1 : !mqtopt.Qubit
26+
27+
// CHECK: %[[Reg_3:.*]] = "mqtopt.insertQubit"(%[[Reg_2]], %[[Q0_1]]) <{index_attr = 0 : i64}>
28+
%reg_3 = "mqtopt.insertQubit"(%reg_2, %q0_3) <{index_attr = 0 : i64}> : (!mqtopt.QubitRegister, !mqtopt.Qubit) -> !mqtopt.QubitRegister
29+
// CHECK: %[[Reg_4:.*]] = "mqtopt.insertQubit"(%[[Reg_3]], %[[Q1_0]]) <{index_attr = 1 : i64}>
30+
%reg_4 = "mqtopt.insertQubit"(%reg_3, %q1_6) <{index_attr = 1 : i64}> : (!mqtopt.QubitRegister, !mqtopt.Qubit) -> !mqtopt.QubitRegister
31+
// CHECK: "mqtopt.deallocQubitRegister"(%[[Reg_4]])
32+
"mqtopt.deallocQubitRegister"(%reg_4) : (!mqtopt.QubitRegister) -> ()
33+
return
34+
}
35+
}

0 commit comments

Comments
 (0)