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