136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===- NewPMDriver.h - Function to drive opt with the new PM ----*- C++ -*-===//
236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//                     The LLVM Compiler Infrastructure
436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// This file is distributed under the University of Illinois Open Source
636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// License. See LICENSE.TXT for details.
736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// \file
1036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines///
1136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// A single function which is called to drive the opt behavior for the new
1236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// PassManager.
1336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines///
1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// This is only in a separate TU with a header to avoid including all of the
1536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// old pass manager headers and the new pass manager headers into the same
1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// file. Eventually all of the routines here will get folded back into
1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// opt.cpp.
1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines///
1936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
2036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#ifndef LLVM_TOOLS_OPT_NEW_PM_DRIVER_H
2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#define LLVM_TOOLS_OPT_NEW_PM_DRIVER_H
2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/ADT/StringRef.h"
2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesnamespace llvm {
2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass LLVMContext;
2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass Module;
2936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass tool_output_file;
3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesnamespace opt_tool {
3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesenum OutputKind {
3336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  OK_NoOutput,
3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  OK_OutputAssembly,
3536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  OK_OutputBitcode
3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines};
3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesenum VerifierKind {
3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  VK_NoVerifier,
3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  VK_VerifyInAndOut,
4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  VK_VerifyEachPass
4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines};
4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// \brief Driver function to run the new pass manager over a module.
4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines///
4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// This function only exists factored away from opt.cpp in order to prevent
4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// inclusion of the new pass manager headers and the old headers into the same
4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// file. It's interface is consequentially somewhat ad-hoc, but will go away
4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// when the transition finishes.
5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesbool runPassPipeline(StringRef Arg0, LLVMContext &Context, Module &M,
5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                     tool_output_file *Out, StringRef PassPipeline,
5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                     opt_tool::OutputKind OK, opt_tool::VerifierKind VK);
5336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#endif
56