mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
e6d6f49584
options. This commit changes the command line arguments (PassInfo::PassArgument) of two passes, MachineFunctionPrinter and MachineScheduler, to avoid collisions with command line options that have the same argument strings. This bug manifests when the PassList construct (defined in opt.cpp) is used in a tool that links with codegen passes. To reproduce the bug, paste the following lines into llc.cpp and run llc. #include "llvm/IR/LegacyPassNameParser.h" static llvm:🆑:list<const llvm::PassInfo*, bool, llvm::PassNameParser> PassList(llvm:🆑:desc("Optimizations available:")); rdar://problem/19212448 llvm-svn: 224186
68 lines
2.1 KiB
C++
68 lines
2.1 KiB
C++
//===-- MachineFunctionPrinterPass.cpp ------------------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// MachineFunctionPrinterPass implementation.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/CodeGen/Passes.h"
|
|
#include "llvm/CodeGen/MachineFunction.h"
|
|
#include "llvm/CodeGen/MachineFunctionPass.h"
|
|
#include "llvm/CodeGen/SlotIndexes.h"
|
|
#include "llvm/Support/Debug.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
|
|
using namespace llvm;
|
|
|
|
namespace {
|
|
/// MachineFunctionPrinterPass - This is a pass to dump the IR of a
|
|
/// MachineFunction.
|
|
///
|
|
struct MachineFunctionPrinterPass : public MachineFunctionPass {
|
|
static char ID;
|
|
|
|
raw_ostream &OS;
|
|
const std::string Banner;
|
|
|
|
MachineFunctionPrinterPass() : MachineFunctionPass(ID), OS(dbgs()) { }
|
|
MachineFunctionPrinterPass(raw_ostream &os, const std::string &banner)
|
|
: MachineFunctionPass(ID), OS(os), Banner(banner) {}
|
|
|
|
const char *getPassName() const override { return "MachineFunction Printer"; }
|
|
|
|
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
|
AU.setPreservesAll();
|
|
MachineFunctionPass::getAnalysisUsage(AU);
|
|
}
|
|
|
|
bool runOnMachineFunction(MachineFunction &MF) override {
|
|
OS << "# " << Banner << ":\n";
|
|
MF.print(OS, getAnalysisIfAvailable<SlotIndexes>());
|
|
return false;
|
|
}
|
|
};
|
|
|
|
char MachineFunctionPrinterPass::ID = 0;
|
|
}
|
|
|
|
char &llvm::MachineFunctionPrinterPassID = MachineFunctionPrinterPass::ID;
|
|
INITIALIZE_PASS(MachineFunctionPrinterPass, "machineinstr-printer",
|
|
"Machine Function Printer", false, false)
|
|
|
|
namespace llvm {
|
|
/// Returns a newly-created MachineFunction Printer pass. The
|
|
/// default banner is empty.
|
|
///
|
|
MachineFunctionPass *createMachineFunctionPrinterPass(raw_ostream &OS,
|
|
const std::string &Banner){
|
|
return new MachineFunctionPrinterPass(OS, Banner);
|
|
}
|
|
|
|
}
|