mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
Enable *BasicBlockPass::createPrinterPass()
Enables raw_ostream I/O for BasicBlockPass. llvm-svn: 174776
This commit is contained in:
parent
43a4e46c11
commit
e7fdf91e88
@ -23,6 +23,7 @@
|
||||
namespace llvm {
|
||||
class FunctionPass;
|
||||
class ModulePass;
|
||||
class BasicBlockPass;
|
||||
class raw_ostream;
|
||||
|
||||
/// createPrintModulePass - Create and return a pass that writes the
|
||||
@ -37,6 +38,11 @@ namespace llvm {
|
||||
raw_ostream *OS,
|
||||
bool DeleteStream=false);
|
||||
|
||||
/// createPrintBasicBlockPass - Create and return a pass that writes the
|
||||
/// BB to the specified raw_ostream.
|
||||
BasicBlockPass *createPrintBasicBlockPass(raw_ostream *OS,
|
||||
bool DeleteStream=false,
|
||||
const std::string &Banner = "");
|
||||
} // End llvm namespace
|
||||
|
||||
#endif
|
||||
|
@ -217,6 +217,7 @@ void initializePreVerifierPass(PassRegistry&);
|
||||
void initializePrintDbgInfoPass(PassRegistry&);
|
||||
void initializePrintFunctionPassPass(PassRegistry&);
|
||||
void initializePrintModulePassPass(PassRegistry&);
|
||||
void initializePrintBasicBlockPassPass(PassRegistry&);
|
||||
void initializeProcessImplicitDefsPass(PassRegistry&);
|
||||
void initializeProfileEstimatorPassPass(PassRegistry&);
|
||||
void initializeProfileInfoAnalysisGroup(PassRegistry&);
|
||||
|
@ -151,6 +151,7 @@ namespace {
|
||||
(void) llvm::createMergeFunctionsPass();
|
||||
(void) llvm::createPrintModulePass(0);
|
||||
(void) llvm::createPrintFunctionPass("", 0);
|
||||
(void) llvm::createPrintBasicBlockPass(0);
|
||||
(void) llvm::createDbgInfoPrinterPass();
|
||||
(void) llvm::createModuleDebugInfoPrinterPass();
|
||||
(void) llvm::createPartialInliningPass();
|
||||
|
@ -39,6 +39,7 @@ void llvm::initializeCore(PassRegistry &Registry) {
|
||||
initializeDominatorTreePass(Registry);
|
||||
initializePrintModulePassPass(Registry);
|
||||
initializePrintFunctionPassPass(Registry);
|
||||
initializePrintBasicBlockPassPass(Registry);
|
||||
initializeVerifierPass(Registry);
|
||||
initializePreVerifierPass(Registry);
|
||||
}
|
||||
|
@ -143,8 +143,7 @@ PassManagerType FunctionPass::getPotentialPassManagerType() const {
|
||||
|
||||
Pass *BasicBlockPass::createPrinterPass(raw_ostream &O,
|
||||
const std::string &Banner) const {
|
||||
|
||||
llvm_unreachable("BasicBlockPass printing unsupported.");
|
||||
return createPrintBasicBlockPass(&O, false, Banner);
|
||||
}
|
||||
|
||||
bool BasicBlockPass::doInitialization(Function &) {
|
||||
|
@ -73,6 +73,31 @@ namespace {
|
||||
AU.setPreservesAll();
|
||||
}
|
||||
};
|
||||
|
||||
class PrintBasicBlockPass : public BasicBlockPass {
|
||||
std::string Banner;
|
||||
raw_ostream *Out; // raw_ostream to print on
|
||||
bool DeleteStream; // Delete the ostream in our dtor?
|
||||
public:
|
||||
static char ID;
|
||||
PrintBasicBlockPass() : BasicBlockPass(ID), Out(&dbgs()),
|
||||
DeleteStream(false) {}
|
||||
PrintBasicBlockPass(const std::string &B, raw_ostream *o, bool DS)
|
||||
: BasicBlockPass(ID), Banner(B), Out(o), DeleteStream(DS) {}
|
||||
|
||||
~PrintBasicBlockPass() {
|
||||
if (DeleteStream) delete Out;
|
||||
}
|
||||
|
||||
bool runOnBasicBlock(BasicBlock &BB) {
|
||||
(*Out) << Banner << BB;
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesAll();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
char PrintModulePass::ID = 0;
|
||||
@ -81,6 +106,9 @@ INITIALIZE_PASS(PrintModulePass, "print-module",
|
||||
char PrintFunctionPass::ID = 0;
|
||||
INITIALIZE_PASS(PrintFunctionPass, "print-function",
|
||||
"Print function to stderr", false, false)
|
||||
char PrintBasicBlockPass::ID = 0;
|
||||
INITIALIZE_PASS(PrintBasicBlockPass, "print-bb",
|
||||
"Print BB to stderr", false, false)
|
||||
|
||||
/// createPrintModulePass - Create and return a pass that writes the
|
||||
/// module to the specified raw_ostream.
|
||||
@ -98,3 +126,11 @@ FunctionPass *llvm::createPrintFunctionPass(const std::string &Banner,
|
||||
return new PrintFunctionPass(Banner, OS, DeleteStream);
|
||||
}
|
||||
|
||||
/// createPrintBasicBlockPass - Create and return a pass that writes the
|
||||
/// BB to the specified raw_ostream.
|
||||
BasicBlockPass *llvm::createPrintBasicBlockPass(llvm::raw_ostream *OS,
|
||||
bool DeleteStream,
|
||||
const std::string &Banner) {
|
||||
return new PrintBasicBlockPass(Banner, OS, DeleteStream);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user