From 35bbdb3ea91e55c8974ffaebde6935bfd7926d32 Mon Sep 17 00:00:00 2001 From: Thien Nguyen Date: Tue, 16 Jun 2026 04:46:33 +0000 Subject: [PATCH] Support reset in mapping Signed-off-by: Thien Nguyen --- .../lib/Optimizer/Dialect/Quake/QuakeOps.cpp | 3 ++- cudaq/test/Transforms/mapping_reset.qke | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 cudaq/test/Transforms/mapping_reset.qke diff --git a/cudaq/lib/Optimizer/Dialect/Quake/QuakeOps.cpp b/cudaq/lib/Optimizer/Dialect/Quake/QuakeOps.cpp index f96d301bfb8..5889a585c97 100644 --- a/cudaq/lib/Optimizer/Dialect/Quake/QuakeOps.cpp +++ b/cudaq/lib/Optimizer/Dialect/Quake/QuakeOps.cpp @@ -71,7 +71,8 @@ LogicalResult cudaq::quake::verifyWireArityAndCoarity(Operation *op) { } bool cudaq::quake::isSupportedMappingOperation(Operation *op) { - return isa(op); + return isa(op); } ValueRange cudaq::quake::getQuantumTypesFromRange(ValueRange range) { diff --git a/cudaq/test/Transforms/mapping_reset.qke b/cudaq/test/Transforms/mapping_reset.qke new file mode 100644 index 00000000000..41a12014c89 --- /dev/null +++ b/cudaq/test/Transforms/mapping_reset.qke @@ -0,0 +1,26 @@ +// ========================================================================== // +// Copyright (c) 2022 - 2026 NVIDIA Corporation & Affiliates. // +// All rights reserved. // +// // +// This source code and the accompanying materials are made available under // +// the terms of the Apache License 2.0 which accompanies this distribution. // +// ========================================================================== // + +// RUN: cudaq-opt --qubit-mapping=device=path\(3\) %s | FileCheck %s + +quake.wire_set @wires[2147483647] + +func.func @test_reset() { + %0 = quake.borrow_wire @wires[0] : !quake.wire + %1 = quake.reset %0 : (!quake.wire) -> !quake.wire + quake.return_wire %1 : !quake.wire + return +} + +// CHECK-LABEL: func.func @test_reset() attributes {mapping_reorder_idx = [0], mapping_v2p = [0]} { +// CHECK: %[[VAL_0:.*]] = quake.borrow_wire @mapped_wireset +// CHECK: %[[VAL_1:.*]] = quake.reset %[[VAL_0]] : (!quake.wire) -> !quake.wire +// CHECK: %[[VAL_2:.*]], %[[VAL_3:.*]] = quake.mz %[[VAL_1]] : (!quake.wire) -> (!quake.measure, !quake.wire) +// CHECK: quake.return_wire %[[VAL_3]] : !quake.wire +// CHECK: return +// CHECK: }