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

Merge branch 'master' into tnguyen/qasm3-as-qsharp-callables

parents 73ee9a1e 6131cb62
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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];

+1 −1
Original line number Diff line number Diff line
@@ -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];
    }
+2 −2
Original line number Diff line number Diff line
@@ -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", []> {
+2 −1
Original line number Diff line number Diff line
@@ -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 {
@@ -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
+7 −4
Original line number Diff line number Diff line
@@ -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);
@@ -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