1*7a6dacacSDimitry Andric //===- NewPMDriver.h - Function to drive llc with the new PM ----*- C++ -*-===// 2*7a6dacacSDimitry Andric // 3*7a6dacacSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*7a6dacacSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*7a6dacacSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*7a6dacacSDimitry Andric // 7*7a6dacacSDimitry Andric //===----------------------------------------------------------------------===// 8*7a6dacacSDimitry Andric /// \file 9*7a6dacacSDimitry Andric /// 10*7a6dacacSDimitry Andric /// A single function which is called to drive the llc behavior for the new 11*7a6dacacSDimitry Andric /// PassManager. 12*7a6dacacSDimitry Andric /// 13*7a6dacacSDimitry Andric /// This is only in a separate TU with a header to avoid including all of the 14*7a6dacacSDimitry Andric /// old pass manager headers and the new pass manager headers into the same 15*7a6dacacSDimitry Andric /// file. Eventually all of the routines here will get folded back into 16*7a6dacacSDimitry Andric /// llc.cpp. 17*7a6dacacSDimitry Andric /// 18*7a6dacacSDimitry Andric //===----------------------------------------------------------------------===// 19*7a6dacacSDimitry Andric #ifndef LLVM_TOOLS_LLC_NEWPMDRIVER_H 20*7a6dacacSDimitry Andric #define LLVM_TOOLS_LLC_NEWPMDRIVER_H 21*7a6dacacSDimitry Andric 22*7a6dacacSDimitry Andric #include "llvm/IR/DiagnosticHandler.h" 23*7a6dacacSDimitry Andric #include "llvm/Support/CodeGen.h" 24*7a6dacacSDimitry Andric #include <memory> 25*7a6dacacSDimitry Andric #include <vector> 26*7a6dacacSDimitry Andric 27*7a6dacacSDimitry Andric namespace llvm { 28*7a6dacacSDimitry Andric class Module; 29*7a6dacacSDimitry Andric class TargetLibraryInfoImpl; 30*7a6dacacSDimitry Andric class TargetMachine; 31*7a6dacacSDimitry Andric class ToolOutputFile; 32*7a6dacacSDimitry Andric class LLVMContext; 33*7a6dacacSDimitry Andric class MIRParser; 34*7a6dacacSDimitry Andric 35*7a6dacacSDimitry Andric struct LLCDiagnosticHandler : public DiagnosticHandler { 36*7a6dacacSDimitry Andric bool handleDiagnostics(const DiagnosticInfo &DI) override; 37*7a6dacacSDimitry Andric }; 38*7a6dacacSDimitry Andric 39*7a6dacacSDimitry Andric int compileModuleWithNewPM(StringRef Arg0, std::unique_ptr<Module> M, 40*7a6dacacSDimitry Andric std::unique_ptr<MIRParser> MIR, 41*7a6dacacSDimitry Andric std::unique_ptr<TargetMachine> Target, 42*7a6dacacSDimitry Andric std::unique_ptr<ToolOutputFile> Out, 43*7a6dacacSDimitry Andric std::unique_ptr<ToolOutputFile> DwoOut, 44*7a6dacacSDimitry Andric LLVMContext &Context, 45*7a6dacacSDimitry Andric const TargetLibraryInfoImpl &TLII, bool NoVerify, 46*7a6dacacSDimitry Andric StringRef PassPipeline, CodeGenFileType FileType); 47*7a6dacacSDimitry Andric } // namespace llvm 48*7a6dacacSDimitry Andric 49*7a6dacacSDimitry Andric #endif 50