Commit edb54b54 authored by Nguyen, Thien Minh's avatar Nguyen, Thien Minh
Browse files

Merge branch 'master' into tnguyen/qasm3-adder-example

parents bab8185b 610f8f6f
...@@ -70,6 +70,29 @@ for i in [0:22] { ...@@ -70,6 +70,29 @@ for i in [0:22] {
EXPECT_TRUE(qcor::execute(src2, "test")); EXPECT_TRUE(qcor::execute(src2, "test"));
} }
TEST(qasm3VisitorTester, checkGate) {
const std::string gate_def = R"#(OPENQASM 3;
gate cphase(x) a, b
{
U(0, 0, x / 2) a;
CX a, b;
U(0, 0, -x / 2) b;
CX a, b;
U(0, 0, x / 2) b;
}
)#";
auto mlir = qcor::mlir_compile(gate_def, "gate_def",
qcor::OutputType::MLIR, false);
std::cout << "gate_def MLIR:\n" << mlir << "\n";
qcor::execute(gate_def, "gate_def");
std::cout << "LLVM:\n"
<< qcor::mlir_compile(gate_def, "gate_def",
qcor::OutputType::LLVMIR, false)
<< "\n";
}
int main(int argc, char **argv) { int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv); ::testing::InitGoogleTest(&argc, argv);
......
...@@ -152,6 +152,12 @@ antlrcpp::Any qasm3_visitor::visitQuantumGateDefinition( ...@@ -152,6 +152,12 @@ antlrcpp::Any qasm3_visitor::visitQuantumGateDefinition(
// from this custom gate definition // from this custom gate definition
std::vector<mlir::Value> result_qubit_vals; std::vector<mlir::Value> result_qubit_vals;
for (auto arg : entryBlock.getArguments()) { for (auto arg : entryBlock.getArguments()) {
// check if argument is a gate param
if (arg.getType().isF64()) {
result_qubit_vals.push_back(arg);
// skip use chain traversal
continue;
}
mlir::Value last_user = arg; mlir::Value last_user = arg;
auto users = last_user.getUsers(); auto users = last_user.getUsers();
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment