//===- subzero/src/IceCompiler.h - Compiler driver --------------*- C++ -*-===//
//
//                        The Subzero Code Generator
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
///
/// \file
/// This file declares the driver for translating bitcode to native code.
///
//===----------------------------------------------------------------------===//

#ifndef SUBZERO_SRC_ICECOMPILER_H
#define SUBZERO_SRC_ICECOMPILER_H

#include "IceDefs.h"

namespace llvm {
class DataStreamer;
}

namespace Ice {

class ClFlagsExtra;

/// A compiler driver. It may be called to handle a single compile request.
class Compiler {
  Compiler(const Compiler &) = delete;
  Compiler &operator=(const Compiler &) = delete;

public:
  Compiler() = default;

  /// Run the compiler with the given GlobalContext for compilation state. Upon
  /// error, the Context's error status will be set.
  void run(const ClFlagsExtra &ExtraFlags, GlobalContext &Ctx,
           std::unique_ptr<llvm::DataStreamer> &&InputStream);
};

} // end of namespace Ice

#endif // SUBZERO_SRC_ICECOMPILER_H
