mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
39765fa3ed
Summary: In order to enable mass testing of opt under NPM, specifically passes specified via -foo-pass. This is gated under a new opt flag -enable-new-pm. Currently the pass flag parser looks for legacy PM passes with the name "foo" (for opt arg "-foo") and creates a PassInfo for each one. Here we take the (legacy PM) pass name and try to match it with one defined in (NPM) PassRegistry.def. Ultimately if we want all tests to pass like this, we'll need to port all passes to NPM and register them in PassRegistry.def under the same name as they were reigstered in the legacy PM. Maybe at some point we'll migrate all -foo to --passes=foo, but that would be after the NPM switch. Flipping on the flag causes 2XXX failures under check-llvm. By far most of them are passes either not ported to NPM or don't have the same name in PassRegistry.def as their old name. Reviewers: hans, echristo, asbirlea, leonardchan Subscribers: llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D82320
73 lines
2.3 KiB
C++
73 lines
2.3 KiB
C++
//===- NewPMDriver.h - Function to drive opt with the new PM ----*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
/// \file
|
|
///
|
|
/// A single function which is called to drive the opt behavior for the new
|
|
/// PassManager.
|
|
///
|
|
/// This is only in a separate TU with a header to avoid including all of the
|
|
/// old pass manager headers and the new pass manager headers into the same
|
|
/// file. Eventually all of the routines here will get folded back into
|
|
/// opt.cpp.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_TOOLS_OPT_NEWPMDRIVER_H
|
|
#define LLVM_TOOLS_OPT_NEWPMDRIVER_H
|
|
|
|
#include "llvm/ADT/ArrayRef.h"
|
|
|
|
namespace llvm {
|
|
class StringRef;
|
|
class Module;
|
|
class TargetMachine;
|
|
class ToolOutputFile;
|
|
|
|
namespace opt_tool {
|
|
enum OutputKind {
|
|
OK_NoOutput,
|
|
OK_OutputAssembly,
|
|
OK_OutputBitcode,
|
|
OK_OutputThinLTOBitcode,
|
|
};
|
|
enum VerifierKind {
|
|
VK_NoVerifier,
|
|
VK_VerifyInAndOut,
|
|
VK_VerifyEachPass
|
|
};
|
|
enum PGOKind {
|
|
NoPGO,
|
|
InstrGen,
|
|
InstrUse,
|
|
SampleUse
|
|
};
|
|
enum CSPGOKind { NoCSPGO, CSInstrGen, CSInstrUse };
|
|
}
|
|
|
|
/// Driver function to run the new pass manager over a module.
|
|
///
|
|
/// This function only exists factored away from opt.cpp in order to prevent
|
|
/// inclusion of the new pass manager headers and the old headers into the same
|
|
/// file. It's interface is consequentially somewhat ad-hoc, but will go away
|
|
/// when the transition finishes.
|
|
///
|
|
/// ThinLTOLinkOut is only used when OK is OK_OutputThinLTOBitcode, and can be
|
|
/// nullptr.
|
|
bool runPassPipeline(StringRef Arg0, Module &M, TargetMachine *TM,
|
|
ToolOutputFile *Out, ToolOutputFile *ThinLinkOut,
|
|
ToolOutputFile *OptRemarkFile, StringRef PassPipeline,
|
|
ArrayRef<StringRef> PassInfos, opt_tool::OutputKind OK,
|
|
opt_tool::VerifierKind VK,
|
|
bool ShouldPreserveAssemblyUseListOrder,
|
|
bool ShouldPreserveBitcodeUseListOrder,
|
|
bool EmitSummaryIndex, bool EmitModuleHash,
|
|
bool EnableDebugify, bool Coroutines);
|
|
} // namespace llvm
|
|
|
|
#endif
|