Loading examples/qcor_demos/pirq_workshop/qir_qasm3/demo1_ir_101/ghz.qasm +2 −1 Original line number Diff line number Diff line Loading @@ -31,9 +31,10 @@ // qcor --emit-mlir ghz.qasm // qcor --emit-llvm ghz.qasm OPENQASM 3; const n_qubits = 8; const n_qubits = 3; qubit q[n_qubits]; Loading examples/qcor_demos/pirq_workshop/qir_qasm3/demo3_lang_integration/qcor_call_qasm3_qpe/iqft.qasm +1 −1 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ OPENQASM 3; #pragma no_entrypoint; // Inverse QFT subroutine on n_counting qubits def inverse_qft(int[64]:nc) qubit[DYNAMIC]:qq { def inverse_qft(int[64]:nc) qubit[nc]:qq { for i in [0:nc/2] { swap qq[i], qq[nc-i-1]; } Loading mlir/dialect/include/Quantum/QuantumOps.td +2 −2 Original line number Diff line number Diff line Loading @@ -121,10 +121,10 @@ def DeallocOp : QuantumOp<"dealloc", []> { } def QRTInitOp : QuantumOp<"init", []> { let arguments = (ins AnyI32:$argc, ArgvType:$argv); let arguments = (ins AnyI32:$argc, ArgvType:$argv, OptionalAttr<StrArrayAttr>:$extra_args); let results = (outs); let printer = [{ auto op = *this; p << "q.init(" << op.getOperands() << ")"; }]; p << "q.init(" << op.getOperands() << ") " << op.extra_argsAttr(); }]; } def QRTFinalizeOp : QuantumOp<"finalize", []> { Loading mlir/parsers/mlir_generator.hpp +2 −1 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ #include "mlir/IR/BuiltinTypes.h" #include "mlir/IR/MLIRContext.h" #include "mlir/IR/Verifier.h" #include <map> namespace qcor { class QuantumMLIRGenerator { Loading @@ -28,7 +29,7 @@ class QuantumMLIRGenerator { // introducing any initialization operations before // generation of the rest of the mlir code. virtual void initialize_mlirgen(bool add_entry_point = true, const std::string file_name = "") = 0; const std::string file_name = "", std::map<std::string, std::string> extra_quantum_args = {}) = 0; // This method can be implemented by subclasses to map a // quantum code in a subclass-specific source language to Loading mlir/parsers/qasm2/openqasm_mlir_generator.cpp +7 −4 Original line number Diff line number Diff line Loading @@ -262,8 +262,10 @@ void OpenQasmMLIRGenerator::visit(Program &prog) { builder.setInsertionPointToStart(&entryBlock); auto main_args = main_entry_block->getArguments(); builder.create<mlir::quantum::QRTInitOp>(builder.getUnknownLoc(), main_args[0], main_args[1]); llvm::ArrayRef<mlir::Attribute> tmp{}; builder.create<mlir::quantum::QRTInitOp>( builder.getUnknownLoc(), main_args[0], main_args[1], mlir::ArrayAttr::get(tmp, builder.getContext())); // call the function from main, run finalize, and return 0 builder.create<mlir::CallOp>(builder.getUnknownLoc(), function2); Loading Loading @@ -306,8 +308,9 @@ void OpenQasmMLIRGenerator::visit(Program &prog) { prog.foreach_stmt([this](auto &stmt) { stmt.accept(*this); }); } void OpenQasmMLIRGenerator::initialize_mlirgen(bool _add_entry_point, const std::string function) { void OpenQasmMLIRGenerator::initialize_mlirgen( bool _add_entry_point, const std::string function, std::map<std::string, std::string> extra_quantum_args) { file_name = function; add_entry_point = _add_entry_point; } Loading Loading
examples/qcor_demos/pirq_workshop/qir_qasm3/demo1_ir_101/ghz.qasm +2 −1 Original line number Diff line number Diff line Loading @@ -31,9 +31,10 @@ // qcor --emit-mlir ghz.qasm // qcor --emit-llvm ghz.qasm OPENQASM 3; const n_qubits = 8; const n_qubits = 3; qubit q[n_qubits]; Loading
examples/qcor_demos/pirq_workshop/qir_qasm3/demo3_lang_integration/qcor_call_qasm3_qpe/iqft.qasm +1 −1 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ OPENQASM 3; #pragma no_entrypoint; // Inverse QFT subroutine on n_counting qubits def inverse_qft(int[64]:nc) qubit[DYNAMIC]:qq { def inverse_qft(int[64]:nc) qubit[nc]:qq { for i in [0:nc/2] { swap qq[i], qq[nc-i-1]; } Loading
mlir/dialect/include/Quantum/QuantumOps.td +2 −2 Original line number Diff line number Diff line Loading @@ -121,10 +121,10 @@ def DeallocOp : QuantumOp<"dealloc", []> { } def QRTInitOp : QuantumOp<"init", []> { let arguments = (ins AnyI32:$argc, ArgvType:$argv); let arguments = (ins AnyI32:$argc, ArgvType:$argv, OptionalAttr<StrArrayAttr>:$extra_args); let results = (outs); let printer = [{ auto op = *this; p << "q.init(" << op.getOperands() << ")"; }]; p << "q.init(" << op.getOperands() << ") " << op.extra_argsAttr(); }]; } def QRTFinalizeOp : QuantumOp<"finalize", []> { Loading
mlir/parsers/mlir_generator.hpp +2 −1 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ #include "mlir/IR/BuiltinTypes.h" #include "mlir/IR/MLIRContext.h" #include "mlir/IR/Verifier.h" #include <map> namespace qcor { class QuantumMLIRGenerator { Loading @@ -28,7 +29,7 @@ class QuantumMLIRGenerator { // introducing any initialization operations before // generation of the rest of the mlir code. virtual void initialize_mlirgen(bool add_entry_point = true, const std::string file_name = "") = 0; const std::string file_name = "", std::map<std::string, std::string> extra_quantum_args = {}) = 0; // This method can be implemented by subclasses to map a // quantum code in a subclass-specific source language to Loading
mlir/parsers/qasm2/openqasm_mlir_generator.cpp +7 −4 Original line number Diff line number Diff line Loading @@ -262,8 +262,10 @@ void OpenQasmMLIRGenerator::visit(Program &prog) { builder.setInsertionPointToStart(&entryBlock); auto main_args = main_entry_block->getArguments(); builder.create<mlir::quantum::QRTInitOp>(builder.getUnknownLoc(), main_args[0], main_args[1]); llvm::ArrayRef<mlir::Attribute> tmp{}; builder.create<mlir::quantum::QRTInitOp>( builder.getUnknownLoc(), main_args[0], main_args[1], mlir::ArrayAttr::get(tmp, builder.getContext())); // call the function from main, run finalize, and return 0 builder.create<mlir::CallOp>(builder.getUnknownLoc(), function2); Loading Loading @@ -306,8 +308,9 @@ void OpenQasmMLIRGenerator::visit(Program &prog) { prog.foreach_stmt([this](auto &stmt) { stmt.accept(*this); }); } void OpenQasmMLIRGenerator::initialize_mlirgen(bool _add_entry_point, const std::string function) { void OpenQasmMLIRGenerator::initialize_mlirgen( bool _add_entry_point, const std::string function, std::map<std::string, std::string> extra_quantum_args) { file_name = function; add_entry_point = _add_entry_point; } Loading