Commit f238178d authored by Mccaskey, Alex's avatar Mccaskey, Alex
Browse files

updates to qcor driver script and ast visitor to handle compiling to specific backend

parent 08207a75
Loading
Loading
Loading
Loading
+17 −12
Original line number Diff line number Diff line
@@ -22,8 +22,8 @@

#include "fuzzy_parsing.hpp"

#include "xacc.hpp"
#include "qcor_ast_consumer.hpp"
#include "xacc.hpp"
#include "xacc_service.hpp"

using namespace clang;
@@ -57,7 +57,6 @@ protected:
    // fuzzyParser->setFileManager(&CI.getFileManager());
    CI.getSema().addExternalSource(fuzzyParser.get());


    // FIXME Hook this back up
    // auto pragmaHandlers =
    // xacc::getServices<qcor::compiler::QCORPragmaHandler>(); for (auto p :
@@ -145,20 +144,26 @@ int main(int argc, char **argv) {
  std::vector<std::string> args{"-Wno-dangling", "-std=c++14",
                                "-I@CMAKE_INSTALL_PREFIX@/include/qcor",
                                "-I@CMAKE_INSTALL_PREFIX@/include/xacc"};

  std::string accName = "";
  std::vector<std::string> arguments(argv + 1, argv + argc);
  // Add incoming includes...
  for (int i = 0; i < arguments.size(); i++) {
    if (arguments[i] == "-I") {
        //   std::cout << "Adding " << arguments[i+1] << "\n";
        if (arguments[i+1] != "@CMAKE_INSTALL_PREFIX@/include/qcor" && arguments[i+1] != "@CMAKE_INSTALL_PREFIX@/include/xacc") {
      if (arguments[i + 1] != "@CMAKE_INSTALL_PREFIX@/include/qcor" &&
          arguments[i + 1] != "@CMAKE_INSTALL_PREFIX@/include/xacc") {
        args.push_back(arguments[i] + arguments[i + 1]);
      }
    } else if (arguments[i].find("-I") != std::string::npos) {
      args.push_back(arguments[i]);
    } else if (arguments[i] == "--accelerator") {
      accName = arguments[i + 1];
    } else if (arguments[i] == "-a") {
      accName = arguments[i + 1];
    }
  }
//   args.insert(args.end(), arguments.begin(), arguments.end());

  xacc::setAccelerator(accName);
  if (!tooling::runToolOnCodeWithArgs(action, src, args)) {
    xacc::error("Error running qcor compiler.");
  }
+4 −3
Original line number Diff line number Diff line
@@ -104,8 +104,9 @@ bool QCORASTVisitor::VisitLambdaExpr(LambdaExpr *LE) {
                    "installed.");
      }
    }
    targetAccelerator = xacc::getAccelerator();

    auto acceleratorName = xacc::getAccelerator()->name();
    auto acceleratorName = targetAccelerator->name();

    // std::cout << "LAMBDA STR:\n" << xaccKernelLambdaStr << "\n";
    auto compiler = xacc::getCompiler("xasm");
@@ -161,7 +162,7 @@ bool QCORASTVisitor::VisitLambdaExpr(LambdaExpr *LE) {
    std::stringstream ss;
    function->persist(ss);
    std::string replacement =
        "\n{std::istringstream iss(R\"(" + ss.str() + ")\");\n";
        "{\nstd::istringstream iss(R\"(" + ss.str() + ")\");\n";
    replacement +=
        "auto function = "
        "xacc::getIRProvider(\"quantum\")->createComposite(\"f\");\n";
@@ -176,7 +177,7 @@ bool QCORASTVisitor::VisitLambdaExpr(LambdaExpr *LE) {
    replacement += "function->expand({" + makePairStr + "});\n";
    replacement += "if (qcor::__internal::executeKernel) {\n";
    replacement +=
        "auto acc = xacc::getAccelerator(\"" + acceleratorName + "\");\n";
        "auto acc = xacc::getAccelerator(function->accelerator_signature());\n";
    if (F->getNumParams() > 1) {
      replacement +=
          "std::vector<double> params{" + F->getParamDecl(1)->getNameAsString();
+6 −6
Original line number Diff line number Diff line
@@ -193,7 +193,7 @@ add(QuantumKernelA &qka, QuantumKernelB &qkb, Args... args) {
      qcor::__internal::constructInitialParameters(tmp, args...);
      std::vector<double> params =
          tmp.get<std::vector<double>>("initial-parameters");
      auto accelerator = xacc::getAccelerator();
      auto accelerator = xacc::getAccelerator(function1->accelerator_signature());
      auto evaled = function1->operator()(params);
      accelerator->execute(q, evaled);
    }
@@ -237,7 +237,7 @@ public:
    auto function = qcor::__internal::getCompositeInstruction(kernel, args...);

    auto nLogicalBits = function->nLogicalBits();
    auto accelerator = xacc::getAccelerator();
    auto accelerator = xacc::getAccelerator(function->accelerator_signature());

    if (!buffer) {
      buffer = xacc::qalloc(nLogicalBits);
@@ -270,7 +270,7 @@ public:
    auto function = qcor::__internal::getCompositeInstruction(kernel, args...);

    auto nLogicalBits = function->nLogicalBits();
    auto accelerator = xacc::getAccelerator();
    auto accelerator = xacc::getAccelerator(function->accelerator_signature());

    if (!buffer) {
      buffer = xacc::qalloc(nLogicalBits);
@@ -285,7 +285,7 @@ public:
    auto function = qcor::__internal::getCompositeInstruction(kernel, args...);

    auto nLogicalBits = function->nLogicalBits();
    auto accelerator = xacc::getAccelerator();
    auto accelerator = xacc::getAccelerator(function->accelerator_signature());
    if (!buffer) {
      buffer = xacc::qalloc(nLogicalBits);
    }
@@ -323,7 +323,7 @@ taskInitiate(QuantumKernel &&kernel, const std::string objectiveFunctionName,
    auto function = qcor::__internal::getCompositeInstruction(kernel, args...);

    auto nLogicalBits = function->nLogicalBits();
    auto accelerator = xacc::getAccelerator();
    auto accelerator = xacc::getAccelerator(function->accelerator_signature());
    auto buffer = xacc::qalloc(nLogicalBits);

    HeterogeneousMap m{std::make_pair("observable", observable),
@@ -342,7 +342,7 @@ Handle taskInitiate(QuantumKernel &&kernel,
  return qcor::submit([&](qcor::qpu_handler &q) {
    auto function = qcor::__internal::getCompositeInstruction(kernel, args...);
    auto nLogicalBits = function->nLogicalBits();
    auto accelerator = xacc::getAccelerator();
    auto accelerator = xacc::getAccelerator(function->accelerator_signature());
    auto buffer = xacc::qalloc(nLogicalBits);
    std::string allZsObsStr = "";
    for (int i = 0; i < nLogicalBits; i++) {
+0 −2
Original line number Diff line number Diff line
@@ -3,8 +3,6 @@

TEST(bell_state_tester, check_bell_state) {

  xacc::setAccelerator("local-ibm");

  auto bell = [&](qbit q) {
      H(q[0]);
      CX(q[0],q[1]);
+29 −19
Original line number Diff line number Diff line
@@ -21,6 +21,22 @@ def main(argv=None):

    if '--qcor-verbose' in sys.argv[1:]:
        verbose=True
        sys.argv.remove('--qcor-verbose')

    hasAcc = False
    accName = ''
    if '--accelerator' in sys.argv[1:]:
        hasAcc = True
        accidx = sys.argv.index('--accelerator')
        accName = sys.argv[accidx+1]
        sys.argv.remove(accName)
        sys.argv.remove('--accelerator')
    if '-a' in sys.argv[1:]:
        hasAcc = True
        accidx = sys.argv.index('-a')
        accName = sys.argv[accidx+1]
        sys.argv.remove(accName)
        sys.argv.remove('-a')

    filename = ''
    fileType = ''
@@ -35,17 +51,11 @@ def main(argv=None):
        idx = tmpFileName.find('.')
        expectedFile = '.'+tmpFileName[:idx]+'_out'+tmpFileName[idx:]
        sys.argv[0] = 'qcor-driver'
        if hasAcc:
            commands = [sys.argv[0]] + baseIncludes + ['--accelerator',accName] + sys.argv[1:]
        else:
            commands = [sys.argv[0]] + baseIncludes + sys.argv[1:]
        try:
            commands.remove('-std=gnu++14')
            commands.remove('-fPIE')
        except ValueError:
            pass
        try:
            commands.remove('-fPIE')
        except ValueError:
            pass
        #sys.argv[fileIdx+1:fileIdx+1] = baseIncludes

        if verbose:
            print('QCOR Driver: ', ' '.join([c for c in commands]))
        try: