mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
4efb41707c
produce it. This adds a function to the TargetMachine that produces this analysis via a callback for each function. This in turn faves the way to produce a *different* TTI per-function with the correct subtarget cached. I've also done the necessary wiring in the opt tool to thread the target machine down and make it available to the pass registry so that we can construct this analysis from a target machine when available. llvm-svn: 227721
58 lines
1.7 KiB
C++
58 lines
1.7 KiB
C++
//===- NewPMDriver.h - Function to drive opt with the new PM ----*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
/// \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/StringRef.h"
|
|
|
|
namespace llvm {
|
|
class LLVMContext;
|
|
class Module;
|
|
class TargetMachine;
|
|
class tool_output_file;
|
|
|
|
namespace opt_tool {
|
|
enum OutputKind {
|
|
OK_NoOutput,
|
|
OK_OutputAssembly,
|
|
OK_OutputBitcode
|
|
};
|
|
enum VerifierKind {
|
|
VK_NoVerifier,
|
|
VK_VerifyInAndOut,
|
|
VK_VerifyEachPass
|
|
};
|
|
}
|
|
|
|
/// \brief 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.
|
|
bool runPassPipeline(StringRef Arg0, LLVMContext &Context, Module &M,
|
|
TargetMachine *TM, tool_output_file *Out,
|
|
StringRef PassPipeline, opt_tool::OutputKind OK,
|
|
opt_tool::VerifierKind VK);
|
|
}
|
|
|
|
#endif
|