Skip to content
Draft
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
10 changes: 0 additions & 10 deletions lib/Optimizer/CodeGen/Passes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,13 @@

using namespace mlir;

static SmallVector<std::string> z_disabledPatterns = {"R1ToU3"};

static void addAnyonPPipeline(OpPassManager &pm) {
using namespace cudaq::opt;
std::string basis[] = {
"h", "s", "t", "rx", "ry", "rz", "x", "y", "z", "z(1)",
};
BasisConversionOptions options;
options.basis = basis;
options.disabledPatterns = z_disabledPatterns;
pm.addPass(createBasisConversion(options));
}

Expand All @@ -34,7 +31,6 @@ static void addAnyonCPipeline(OpPassManager &pm) {
};
BasisConversionOptions options;
options.basis = basis;
options.disabledPatterns = z_disabledPatterns;
pm.addPass(createBasisConversion(options));
}

Expand All @@ -46,7 +42,6 @@ static void addOQCPipeline(OpPassManager &pm) {
};
BasisConversionOptions options;
options.basis = basis;
options.disabledPatterns = z_disabledPatterns;
pm.addPass(createBasisConversion(options));
}

Expand All @@ -60,7 +55,6 @@ static void addQCIPipeline(OpPassManager &pm) {
};
BasisConversionOptions options;
options.basis = basis;
options.disabledPatterns = z_disabledPatterns;
pm.addPass(createBasisConversion(options));
}

Expand All @@ -71,7 +65,6 @@ static void addQuantinuumPipeline(OpPassManager &pm) {
};
BasisConversionOptions options;
options.basis = basis;
options.disabledPatterns = z_disabledPatterns;
pm.addPass(createBasisConversion(options));
}

Expand All @@ -83,7 +76,6 @@ static void addIQMPipeline(OpPassManager &pm) {
};
BasisConversionOptions options;
options.basis = basis;
options.disabledPatterns = z_disabledPatterns;
pm.addPass(createBasisConversion(options));
}

Expand All @@ -95,7 +87,6 @@ static void addIonQPipeline(OpPassManager &pm) {
};
BasisConversionOptions options;
options.basis = basis;
options.disabledPatterns = z_disabledPatterns;
pm.addPass(createBasisConversion(options));
}

Expand All @@ -106,7 +97,6 @@ static void addFermioniqPipeline(OpPassManager &pm) {
};
BasisConversionOptions options;
options.basis = basis;
options.disabledPatterns = z_disabledPatterns;
pm.addPass(createBasisConversion(options));
}

Expand Down
5 changes: 1 addition & 4 deletions lib/Optimizer/CodeGen/Pipelines.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,10 +150,7 @@ void cudaq::opt::createPipelineTransformsForPythonToOpenQASM(
pm.addNestedPass<func::FuncOp>(createCSEPass());
pm.addNestedPass<func::FuncOp>(createMultiControlDecomposition());
pm.addPass(createDecomposition(
{.enabledPatterns = {"SToR1", "TToR1", "R1ToU3", "U3ToRotations",
"CHToCX", "CCZToCX", "CRzToCX", "CRyToCX", "CRxToCX",
"CR1ToCX", "CCZToCX", "RxAdjToRx", "RyAdjToRy",
"RzAdjToRz"}}));
{.basis = {"h", "s", "t", "rx", "ry", "rz", "x", "y", "z", "x(1)"}}));
pm.addPass(createQuakeToCCPrep());
pm.addNestedPass<func::FuncOp>(createCanonicalizerPass());
pm.addNestedPass<func::FuncOp>(createExpandControlVeqs());
Expand Down
13 changes: 9 additions & 4 deletions lib/Optimizer/Transforms/DecompositionPatternSelection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,17 @@ namespace {
struct OperatorInfo {
StringRef name;
std::size_t numControls;
bool isAdj;

OperatorInfo(StringRef infoStr) : name(), numControls(0) {
auto nameEnd = infoStr.find_first_of('(');
OperatorInfo(StringRef infoStr) : name(), numControls(0), isAdj(false) {
auto nameEnd = infoStr.find_first_of("(<");
name = infoStr.take_front(nameEnd);
if (nameEnd < infoStr.size())
infoStr = infoStr.drop_front(nameEnd);

if (infoStr.consume_front("<adj>"))
isAdj = true;

if (infoStr.consume_front("(")) {
infoStr = infoStr.ltrim();
if (infoStr.consume_front("n"))
Expand All @@ -56,7 +60,8 @@ struct OperatorInfo {
}

bool operator==(const OperatorInfo &other) const {
return name == other.name && numControls == other.numControls;
return name == other.name && numControls == other.numControls &&
isAdj == other.isAdj;
}
};

Expand Down Expand Up @@ -111,7 +116,7 @@ namespace std {
template <>
struct hash<OperatorInfo> {
std::size_t operator()(const OperatorInfo &info) const {
return llvm::hash_combine(info.name, info.numControls);
return llvm::hash_combine(info.name, info.numControls, info.isAdj);
}
};
} // namespace std
Expand Down
14 changes: 10 additions & 4 deletions lib/Optimizer/Transforms/DecompositionPatterns.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -645,7 +645,7 @@ struct R1AdjToR1
return success();
}
};
REGISTER_DECOMPOSITION_PATTERN(R1AdjToR1, "r1", "r1");
REGISTER_DECOMPOSITION_PATTERN(R1AdjToR1, "r1<adj>", "r1");

// quake.swap a, b
// ───────────────────────────────────
Expand Down Expand Up @@ -717,6 +717,8 @@ struct CHToCX : public cudaq::DecompositionPattern<CHToCXType, quake::HOp> {
return success();
}
};
// TODO: Technically, this pattern also produces s<adj> and t<adj> ops, but we
// currently don't treat them as distinct from their non-adjoint counterparts.
REGISTER_DECOMPOSITION_PATTERN(CHToCX, "h(1)", "s", "h", "t", "x(1)");

//===----------------------------------------------------------------------===//
Expand Down Expand Up @@ -1075,6 +1077,8 @@ struct CYToCX : public cudaq::DecompositionPattern<CYToCXType, quake::YOp> {
return success();
}
};
// TODO: Technically, this pattern also produces s<adj> ops, but we currently
// don't treat it as distinct from their non-adjoint counterparts.
REGISTER_DECOMPOSITION_PATTERN(CYToCX, "y(1)", "s", "x(1)");

//===----------------------------------------------------------------------===//
Expand Down Expand Up @@ -1152,6 +1156,8 @@ struct CCZToCX : public cudaq::DecompositionPattern<CCZToCXType, quake::ZOp> {
return success();
}
};
// TODO: Technically, this pattern also produces t<adj> ops, but we currently
// don't treat it as distinct from their non-adjoint counterparts.
REGISTER_DECOMPOSITION_PATTERN(CCZToCX, "z(2)", "t", "x(1)");

// quake.z [control] target
Expand Down Expand Up @@ -1488,7 +1494,7 @@ struct RxAdjToRx
return success();
}
};
REGISTER_DECOMPOSITION_PATTERN(RxAdjToRx, "rx", "rx");
REGISTER_DECOMPOSITION_PATTERN(RxAdjToRx, "rx<adj>", "rx");

//===----------------------------------------------------------------------===//
// RyOp decompositions
Expand Down Expand Up @@ -1617,7 +1623,7 @@ struct RyAdjToRy
return success();
}
};
REGISTER_DECOMPOSITION_PATTERN(RyAdjToRy, "ry", "ry");
REGISTER_DECOMPOSITION_PATTERN(RyAdjToRy, "ry<adj>", "ry");

//===----------------------------------------------------------------------===//
// RzOp decompositions
Expand Down Expand Up @@ -1757,7 +1763,7 @@ struct RzAdjToRz
return success();
}
};
REGISTER_DECOMPOSITION_PATTERN(RzAdjToRz, "rz", "rz");
REGISTER_DECOMPOSITION_PATTERN(RzAdjToRz, "rz<adj>", "rz");

//===----------------------------------------------------------------------===//
// U3Op decompositions
Expand Down
72 changes: 0 additions & 72 deletions python/tests/mlir/test_output_translate_openqasm.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,84 +81,28 @@ def gates():
# CHECK-NEXT: y var0[0];
# CHECK-NEXT: z var0[0];
# CHECK-NEXT: rz(1.570796e+00) var0[0];
# CHECK-NEXT: rx(1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(-1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rz(7.853982e-01) var0[0];
# CHECK-NEXT: rx(1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(-1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rz(1.570796e+00) var0[0];
# CHECK-NEXT: rx(1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(-1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: h var0[0];
# CHECK-NEXT: rz(7.853982e-01) var0[0];
# CHECK-NEXT: rx(1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(-1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: cx var0{{\[[12]\]}}, var0[0];
# CHECK-NEXT: rz(-7.853982e-01) var0[0];
# CHECK-NEXT: rx(1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(-1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: h var0[0];
# CHECK-NEXT: rz(-1.570796e+00) var0[0];
# CHECK-NEXT: rx(1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(-1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: cx var0{{\[[12]\]}}, var0[0];
# CHECK-NEXT: rz(-7.853982e-01) var0[0];
# CHECK-NEXT: rx(1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(-1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: cx var0{{\[[12]\]}}, var0[0];
# CHECK-NEXT: rz(7.853982e-01) var0[0];
# CHECK-NEXT: rx(1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(-1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: cx var0{{\[[12]\]}}, var0[0];
# CHECK-NEXT: rz(-7.853982e-01) var0[0];
# CHECK-NEXT: rx(1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(-1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: cx var0{{\[[12]\]}}, var0[0];
# CHECK-NEXT: rz(7.853982e-01) var0[0];
# CHECK-NEXT: rx(1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(-1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: cx var0{{\[[12]\]}}, var0{{\[[12]\]}};
# CHECK-NEXT: rz(-7.853982e-01) var0{{\[[12]\]}};
# CHECK-NEXT: rx(1.570796e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rz(0.000000e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rx(-1.570796e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rz(0.000000e+00) var0{{\[[12]\]}};
# CHECK-NEXT: cx var0{{\[[12]\]}}, var0{{\[[12]\]}};
# CHECK-NEXT: rz(7.853982e-01) var0{{\[[12]\]}};
# CHECK-NEXT: rx(1.570796e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rz(0.000000e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rx(-1.570796e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rz(0.000000e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rz(7.853982e-01) var0{{\[[12]\]}};
# CHECK-NEXT: rx(1.570796e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rz(0.000000e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rx(-1.570796e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rz(0.000000e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rz(1.570796e+00) var0[0];
# CHECK-NEXT: rx(1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(-1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: cx var0{{\[[12]\]}}, var0[0];
# CHECK-NEXT: ry(-1.570796e+00) var0[0];
# CHECK-NEXT: cx var0{{\[[12]\]}}, var0[0];
Expand All @@ -173,27 +117,11 @@ def gates():
# CHECK-NEXT: rz(-1.570796e+00) var0[0];
# CHECK-NEXT: cx var0{{\[[12]\]}}, var0[0];
# CHECK-NEXT: rz(1.570796e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rx(1.570796e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rz(0.000000e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rx(-1.570796e+00) var0{{\[[12]\]}};
# CHECK-NEXT: rz(0.000000e+00) var0{{\[[12]\]}};
# CHECK-NEXT: cx var0{{\[[12]\]}}, var0[0];
# CHECK-NEXT: rz(-1.570796e+00) var0[0];
# CHECK-NEXT: rx(1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(-1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: cx var0{{\[[12]\]}}, var0[0];
# CHECK-NEXT: rz(1.570796e+00) var0[0];
# CHECK-NEXT: rx(1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(-1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rz(3.141593e+00) var0[0];
# CHECK-NEXT: rx(1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(-1.570796e+00) var0[0];
# CHECK-NEXT: rz(0.000000e+00) var0[0];
# CHECK-NEXT: rx(3.141593e+00) var0[0];
# CHECK-NEXT: rx(-3.141593e+00) var0[0];
# CHECK-NEXT: ry(3.141593e+00) var0[0];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ config:
# Add preprocessor defines to compilation
preprocessor-defines: ["-D CUDAQ_QUANTUM_DEVICE"]
# Define the JIT lowering pipeline
jit-mid-level-pipeline: "lower-to-cfg,decomposition{enable-patterns=SToR1,TToR1,R1ToU3,U3ToRotations,CHToCX,CCZToCX,CRzToCX,CRyToCX,CRxToCX,CR1ToCX,RxAdjToRx,RyAdjToRy,RzAdjToRz,ExpPauliDecomposition},quake-to-cc-prep,func.func(expand-control-veqs,combine-quantum-alloc,canonicalize,combine-measurements)"
jit-mid-level-pipeline: "lower-to-cfg,decomposition{basis=h,s,t,rx,ry,rz,x,y,z,x(1)},quake-to-cc-prep,func.func(expand-control-veqs,combine-quantum-alloc,canonicalize,combine-measurements)"
# Tell the rest-qpu that we are generating OpenQASM 2.0.
codegen-emission: qasm2
# Library mode is only for simulators, physical backends must turn this off
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ config:
# Add preprocessor defines to compilation
preprocessor-defines: ["-D CUDAQ_QUANTUM_DEVICE"]
# Define the JIT lowering pipeline
jit-mid-level-pipeline: "lower-to-cfg,decomposition{enable-patterns=SToR1,TToR1,CCZToCX,CRyToCX,CRxToCX,R1AdjToR1,RxAdjToRx,RyAdjToRy,RzAdjToRz,ExpPauliDecomposition},quake-to-cc-prep,func.func(memtoreg{quantum=0})"
jit-mid-level-pipeline: "lower-to-cfg,decomposition{basis=h,s,t,r1,rx,ry,rz,x,y,z,x(1)},quake-to-cc-prep,func.func(memtoreg{quantum=0})"
# Tell the rest-qpu that we are generating OpenQASM 2.0.
codegen-emission: qasm2
# Library mode is only for simulators, physical backends must turn this off
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ config:
# Add preprocessor defines to compilation
preprocessor-defines: ["-D CUDAQ_QUANTUM_DEVICE"]
# Define the JIT lowering pipeline
jit-mid-level-pipeline: "lower-to-cfg,decomposition{enable-patterns=CHToCX,RzAdjToRz,CCZToCX,CR1ToCX,SwapToCX,CRxToCX,CRyToCX,CRzToCX},quake-to-cc-prep,func.func(expand-control-veqs,combine-quantum-alloc,canonicalize,combine-measurements)"
jit-mid-level-pipeline: "lower-to-cfg,decomposition{basis=h,s,t,r1,rx,ry,rz,x,y,z,x(1)},quake-to-cc-prep,func.func(expand-control-veqs,combine-quantum-alloc,canonicalize,combine-measurements)"
# Tell the rest-qpu that we are generating OpenQASM 2.0.
codegen-emission: qasm2
# Library mode is only for simulators, physical backends must turn this off
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ config:
# Add the rest-qpu library to the link list
link-libs: ["-lcudaq-rest-qpu"]
# Define the JIT lowering pipeline
jit-mid-level-pipeline: "lower-to-cfg,decomposition{enable-patterns=SToR1,TToR1,R1ToU3,U3ToRotations,CHToCX,CCXToCCZ,CCZToCX,CRzToCX,CRyToCX,CRxToCX,CR1ToCX,RxAdjToRx,RyAdjToRy,RzAdjToRz,ExpPauliDecomposition},quake-to-cc-prep,func.func(expand-control-veqs,combine-quantum-alloc,canonicalize,combine-measurements)"
jit-mid-level-pipeline: "lower-to-cfg,decomposition{basis=h,s,t,rx,ry,rz,x,y,z,x(1)},quake-to-cc-prep,func.func(expand-control-veqs,combine-quantum-alloc,canonicalize,combine-measurements)"
# Tell the rest-qpu that we are generating QIR.
codegen-emission: qasm2
# Library mode is only for simulators, physical backends must turn this off
Expand Down
2 changes: 1 addition & 1 deletion runtime/cudaq/platform/default/rest/helpers/tii/tii.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ config:
# Add preprocessor defines to compilation
preprocessor-defines: ["-D CUDAQ_QUANTUM_DEVICE"]
# Define the JIT lowering pipelines
jit-mid-level-pipeline: "lower-to-cfg,func.func(canonicalize,multicontrol-decomposition),decomposition{enable-patterns=U3ToRotations,SToR1,TToR1,CHToCX,CCZToCX,CRzToCX,CRyToCX,CRxToCX,CR1ToCX,R1AdjToR1,RxAdjToRx,RyAdjToRy,RzAdjToRz,ExpPauliDecomposition},quake-to-cc-prep,func.func(expand-control-veqs,canonicalize),symbol-dce"
jit-mid-level-pipeline: "lower-to-cfg,func.func(canonicalize,multicontrol-decomposition),decomposition{basis=h,s,t,r1,rx,ry,rz,x,y,z,x(1)},quake-to-cc-prep,func.func(expand-control-veqs,canonicalize),symbol-dce"
codegen-emission: qasm2
# Library mode is only for simulators, physical backends must turn this off
library-mode: false
Expand Down
5 changes: 3 additions & 2 deletions test/Transforms/BasisConversion/all-qir-gates.qke
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
// the terms of the Apache License 2.0 which accompanies this distribution. //
// ========================================================================== //

// RUN: cudaq-opt --basis-conversion="basis=h,s,t,rx,ry,rz,x,y,z,x(1) disable-patterns=R1ToU3" %s | FileCheck %s
// RUN: cudaq-opt --basis-conversion="basis=h,s,t,rx,ry,rz,x,y,z,x(1)" %s | FileCheck %s

/// This test covers all the supported CUDA-Q gates along with control and
/// adjoint modifiers, similar to the test in `python/tests/backends/test_Infleqtion.py::test_all_gates`
Expand Down Expand Up @@ -304,7 +304,8 @@ module {
// CHECK: %[[VAL_87:.*]] = cc.cast unsigned %[[VAL_85]] : (i1) -> i8
// CHECK: cc.store %[[VAL_87]], %[[VAL_86]] : !cc.ptr<i8>
// CHECK: %[[VAL_88:.*]] = quake.alloca !quake.ref
// CHECK: quake.rz<adj> (%[[VAL_4]]) %[[VAL_88]] : (f64, !quake.ref) -> ()
// CHECK: %[[NEG_PI:.*]] = arith.negf %[[VAL_4]] : f64
// CHECK: quake.rz (%[[NEG_PI]]) %[[VAL_88]] : (f64, !quake.ref) -> ()
// CHECK: quake.rx<adj> (%[[VAL_0]]) %[[VAL_88]] : (f64, !quake.ref) -> ()
// CHECK: quake.ry<adj> (%[[VAL_3]]) %[[VAL_88]] : (f64, !quake.ref) -> ()
// CHECK: quake.rz<adj> (%[[VAL_2]]) %[[VAL_88]] : (f64, !quake.ref) -> ()
Expand Down
4 changes: 2 additions & 2 deletions test/Transforms/BasisConversion/phased_rx-cz.qke
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
// the terms of the Apache License 2.0 which accompanies this distribution. //
// ========================================================================== //

// RUN: cudaq-opt --basis-conversion="basis=z(1),phased_rx disable-patterns=R1ToU3" %s | FileCheck %s
// RUN: cudaq-opt --basis-conversion="basis=z(1),phased_rx disable-patterns=R1ToU3" %s | CircuitCheck %s --up-to-global-phase
// RUN: cudaq-opt --basis-conversion="basis=z(1),phased_rx" %s | FileCheck %s
// RUN: cudaq-opt --basis-conversion="basis=z(1),phased_rx" %s | CircuitCheck %s --up-to-global-phase


// CHECK-LABEL: func.func @cx
Expand Down
Loading
Loading