Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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: 1 addition & 1 deletion mlir/include/mlir/Dialect/QC/Builder/QCProgramBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -842,7 +842,7 @@ class QCProgramBuilder final : public OpBuilder {
* ```
*/
QCProgramBuilder& ctrl(ValueRange controls,
const std::function<void(OpBuilder&)>& body);
const std::function<void(QCProgramBuilder&)>& body);

//===--------------------------------------------------------------------===//
// Deallocation
Expand Down
2 changes: 1 addition & 1 deletion mlir/include/mlir/Dialect/QCO/Builder/QCOProgramBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -1001,7 +1001,7 @@ class QCOProgramBuilder final : public OpBuilder {
*/
std::pair<ValueRange, ValueRange>
ctrl(ValueRange controls, ValueRange targets,
const std::function<ValueRange(OpBuilder&, ValueRange)>& body);
const std::function<ValueRange(QCOProgramBuilder&, ValueRange)>& body);

//===--------------------------------------------------------------------===//
// Deallocation
Expand Down
5 changes: 3 additions & 2 deletions mlir/lib/Dialect/QC/Builder/QCProgramBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -419,9 +419,10 @@ QCProgramBuilder& QCProgramBuilder::barrier(ValueRange qubits) {

QCProgramBuilder&
QCProgramBuilder::ctrl(ValueRange controls,
const std::function<void(OpBuilder&)>& body) {
const std::function<void(QCProgramBuilder&)>& body) {
checkFinalized();
CtrlOp::create(*this, loc, controls, body);
CtrlOp::create(*this, loc, controls,
[&](OpBuilder& /*builder*/) { body(*this); });
return *this;
}

Expand Down
8 changes: 6 additions & 2 deletions mlir/lib/Dialect/QCO/Builder/QCOProgramBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -578,10 +578,14 @@ ValueRange QCOProgramBuilder::barrier(ValueRange qubits) {

std::pair<ValueRange, ValueRange> QCOProgramBuilder::ctrl(
ValueRange controls, ValueRange targets,
const std::function<ValueRange(OpBuilder&, ValueRange)>& body) {
const std::function<ValueRange(QCOProgramBuilder&, ValueRange)>& body) {
checkFinalized();

auto ctrlOp = CtrlOp::create(*this, loc, controls, targets, body);
auto ctrlOp =
CtrlOp::create(*this, loc, controls, targets,
[this, &body](OpBuilder& /*builder*/, ValueRange targets) {
return body(*this, targets);
});

// Update tracking
const auto& controlsOut = ctrlOp.getControlsOut();
Expand Down
6 changes: 2 additions & 4 deletions mlir/unittests/pipeline/test_compiler_pipeline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1583,10 +1583,8 @@ TEST_F(CompilerPipelineTest, MCX) {
TEST_F(CompilerPipelineTest, MCXNested) {
auto input = buildQCIR([](mlir::qc::QCProgramBuilder& b) {
auto reg = b.allocQubitRegister(3, "q");
b.ctrl(reg[0], [&](OpBuilder& b) {
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
static_cast<mlir::qc::QCProgramBuilder&>(b).cx(reg[1], reg[2]);
});
b.ctrl(reg[0],
[&](mlir::qc::QCProgramBuilder& b) { b.cx(reg[1], reg[2]); });
});

ASSERT_TRUE(runPipeline(input.get()).succeeded());
Expand Down
Loading