1//===- NewPMDriver.h - Function to drive opt with the new PM ----*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8/// \file 9/// 10/// A single function which is called to drive the opt behavior for the new 11/// PassManager. 12/// 13/// This is only in a separate TU with a header to avoid including all of the 14/// old pass manager headers and the new pass manager headers into the same 15/// file. Eventually all of the routines here will get folded back into 16/// opt.cpp. 17/// 18//===----------------------------------------------------------------------===// 19 20#ifndef LLVM_TOOLS_OPT_NEWPMDRIVER_H 21#define LLVM_TOOLS_OPT_NEWPMDRIVER_H 22 23namespace llvm { 24class StringRef; 25class LLVMContext; 26class Module; 27class TargetMachine; 28class ToolOutputFile; 29 30namespace opt_tool { 31enum OutputKind { 32 OK_NoOutput, 33 OK_OutputAssembly, 34 OK_OutputBitcode, 35 OK_OutputThinLTOBitcode, 36}; 37enum VerifierKind { 38 VK_NoVerifier, 39 VK_VerifyInAndOut, 40 VK_VerifyEachPass 41}; 42enum PGOKind { 43 NoPGO, 44 InstrGen, 45 InstrUse, 46 SampleUse 47}; 48enum CSPGOKind { NoCSPGO, CSInstrGen, CSInstrUse }; 49} 50 51/// Driver function to run the new pass manager over a module. 52/// 53/// This function only exists factored away from opt.cpp in order to prevent 54/// inclusion of the new pass manager headers and the old headers into the same 55/// file. It's interface is consequentially somewhat ad-hoc, but will go away 56/// when the transition finishes. 57/// 58/// ThinLTOLinkOut is only used when OK is OK_OutputThinLTOBitcode, and can be 59/// nullptr. 60bool runPassPipeline(StringRef Arg0, Module &M, TargetMachine *TM, 61 ToolOutputFile *Out, ToolOutputFile *ThinLinkOut, 62 ToolOutputFile *OptRemarkFile, StringRef PassPipeline, 63 opt_tool::OutputKind OK, opt_tool::VerifierKind VK, 64 bool ShouldPreserveAssemblyUseListOrder, 65 bool ShouldPreserveBitcodeUseListOrder, 66 bool EmitSummaryIndex, bool EmitModuleHash, 67 bool EnableDebugify); 68} // namespace llvm 69 70#endif 71