Change Pass::print to take a raw ostream instead of std::ostream,

update all code that this affects.

llvm-svn: 79830
This commit is contained in:
Chris Lattner 2009-08-23 06:03:38 +00:00
parent 817b3012bc
commit 1362602eb2
50 changed files with 138 additions and 191 deletions

View File

@ -155,9 +155,7 @@ public:
/// ///
void initialize(Module &M); void initialize(Module &M);
virtual void print(std::ostream &o, const Module *M) const; void print(raw_ostream &o, Module *) const;
void print(std::ostream *o, const Module *M) const { if (o) print(*o, M); }
void dump() const;
protected: protected:
// destroy - Release memory for the call graph // destroy - Release memory for the call graph
@ -202,8 +200,7 @@ public:
/// dump - Print out this call graph node. /// dump - Print out this call graph node.
/// ///
void dump() const; void dump() const;
void print(std::ostream &OS) const; void print(raw_ostream &OS) const;
void print(std::ostream *OS) const { if (OS) print(*OS); }
//===--------------------------------------------------------------------- //===---------------------------------------------------------------------
// Methods to keep a call graph up to date with a function that has been // Methods to keep a call graph up to date with a function that has been

View File

@ -22,7 +22,6 @@
#define LLVM_ANALYSIS_DOMINATORS_H #define LLVM_ANALYSIS_DOMINATORS_H
#include "llvm/Pass.h" #include "llvm/Pass.h"
#include "llvm/BasicBlock.h"
#include "llvm/Function.h" #include "llvm/Function.h"
#include "llvm/Instructions.h" #include "llvm/Instructions.h"
#include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseMap.h"
@ -830,7 +829,7 @@ public:
DT->releaseMemory(); DT->releaseMemory();
} }
virtual void print(std::ostream &OS, const Module* M= 0) const; virtual void print(raw_ostream &OS, const Module* M= 0) const;
}; };
//===------------------------------------- //===-------------------------------------
@ -978,7 +977,7 @@ public:
/// print - Convert to human readable form /// print - Convert to human readable form
/// ///
virtual void print(std::ostream &OS, const Module* = 0) const; virtual void print(raw_ostream &OS, const Module* = 0) const;
}; };

View File

@ -37,8 +37,7 @@ public:
/// passed in, then the types are printed symbolically if possible, using the /// passed in, then the types are printed symbolically if possible, using the
/// symbol table from the module. /// symbol table from the module.
/// ///
void print(std::ostream &o, const Module *M) const; void print(raw_ostream &o, const Module *M) const;
void print(std::ostream *o, const Module *M) const { if (o) print(*o, M); }
private: private:
/// IncorporateType - Incorporate one type and all of its subtypes into the /// IncorporateType - Incorporate one type and all of its subtypes into the

View File

@ -22,11 +22,11 @@
#include "llvm/ADT/GraphTraits.h" #include "llvm/ADT/GraphTraits.h"
#include <vector> #include <vector>
#include <iosfwd>
namespace llvm { namespace llvm {
class BasicBlock; class BasicBlock;
class raw_ostream;
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
@ -98,8 +98,7 @@ public:
bool isLoop() const; bool isLoop() const;
/// print - Show contents in human readable format... /// print - Show contents in human readable format...
void print(std::ostream &O) const; void print(raw_ostream &O) const;
void print(std::ostream *O) const { if (O) print(*O); }
}; };
/// succ_begin/succ_end - define methods so that Intervals may be used /// succ_begin/succ_end - define methods so that Intervals may be used

View File

@ -60,10 +60,7 @@ public:
IntervalPartition(IntervalPartition &I, bool); IntervalPartition(IntervalPartition &I, bool);
// print - Show contents in human readable format... // print - Show contents in human readable format...
virtual void print(std::ostream &O, const Module* = 0) const; virtual void print(raw_ostream &O, const Module* = 0) const;
void print(std::ostream *O, const Module* M = 0) const {
if (O) print(*O, M);
}
// getRootInterval() - Return the root interval that contains the starting // getRootInterval() - Return the root interval that contains the starting
// block of the function. // block of the function.

View File

@ -938,7 +938,7 @@ public:
virtual void releaseMemory() { LI.releaseMemory(); } virtual void releaseMemory() { LI.releaseMemory(); }
virtual void print(std::ostream &O, const Module* M = 0) const; virtual void print(raw_ostream &O, const Module* M = 0) const;
virtual void getAnalysisUsage(AnalysisUsage &AU) const; virtual void getAnalysisUsage(AnalysisUsage &AU) const;

View File

@ -17,7 +17,6 @@
#include "llvm/Pass.h" #include "llvm/Pass.h"
#include "llvm/Analysis/ScalarEvolution.h" #include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Support/ConstantRange.h" #include "llvm/Support/ConstantRange.h"
#include <iosfwd>
#include <map> #include <map>
namespace llvm { namespace llvm {
@ -33,7 +32,7 @@ public:
LoopVR() : FunctionPass(&ID) {} LoopVR() : FunctionPass(&ID) {}
bool runOnFunction(Function &F); bool runOnFunction(Function &F);
virtual void print(std::ostream &os, const Module *) const; virtual void print(raw_ostream &os, const Module *) const;
void releaseMemory(); void releaseMemory();
void getAnalysisUsage(AnalysisUsage &AU) const; void getAnalysisUsage(AnalysisUsage &AU) const;

View File

@ -57,7 +57,7 @@ struct PostDominatorTree : public FunctionPass {
return DT->properlyDominates(A, B); return DT->properlyDominates(A, B);
} }
virtual void print(std::ostream &OS, const Module*) const; virtual void print(raw_ostream &OS, const Module*) const;
}; };
FunctionPass* createPostDomTree(); FunctionPass* createPostDomTree();

View File

@ -601,11 +601,7 @@ namespace llvm {
virtual bool runOnFunction(Function &F); virtual bool runOnFunction(Function &F);
virtual void releaseMemory(); virtual void releaseMemory();
virtual void getAnalysisUsage(AnalysisUsage &AU) const; virtual void getAnalysisUsage(AnalysisUsage &AU) const;
void print(raw_ostream &OS, const Module* = 0) const; virtual void print(raw_ostream &OS, const Module* = 0) const;
virtual void print(std::ostream &OS, const Module* = 0) const;
void print(std::ostream *OS, const Module* M = 0) const {
if (OS) print(*OS, M);
}
private: private:
FoldingSet<SCEV> UniqueSCEVs; FoldingSet<SCEV> UniqueSCEVs;

View File

@ -347,7 +347,7 @@ namespace llvm {
virtual bool runOnMachineFunction(MachineFunction&); virtual bool runOnMachineFunction(MachineFunction&);
/// print - Implement the dump method. /// print - Implement the dump method.
virtual void print(std::ostream &O, const Module* = 0) const; virtual void print(raw_ostream &O, const Module* = 0) const;
/// addIntervalsForSpills - Create new intervals for spilled defs / uses of /// addIntervalsForSpills - Create new intervals for spilled defs / uses of
/// the given interval. FIXME: It also returns the weight of the spill slot /// the given interval. FIXME: It also returns the weight of the spill slot

View File

@ -102,7 +102,7 @@ namespace llvm {
virtual bool runOnMachineFunction(MachineFunction&); virtual bool runOnMachineFunction(MachineFunction&);
/// print - Implement the dump method. /// print - Implement the dump method.
virtual void print(std::ostream &O, const Module* = 0) const; virtual void print(raw_ostream &O, const Module* = 0) const;
}; };
} }

View File

@ -162,7 +162,7 @@ public:
virtual void releaseMemory(); virtual void releaseMemory();
virtual void print(std::ostream &OS, const Module*) const; virtual void print(raw_ostream &OS, const Module*) const;
}; };
//===------------------------------------- //===-------------------------------------

View File

@ -30,9 +30,7 @@
#define LLVM_PASS_H #define LLVM_PASS_H
#include "llvm/Support/DataTypes.h" #include "llvm/Support/DataTypes.h"
#include "llvm/Support/Streams.h"
#include <cassert> #include <cassert>
#include <iosfwd>
#include <utility> #include <utility>
#include <vector> #include <vector>
@ -47,6 +45,7 @@ class ImmutablePass;
class PMStack; class PMStack;
class AnalysisResolver; class AnalysisResolver;
class PMDataManager; class PMDataManager;
class raw_ostream;
// AnalysisID - Use the PassInfo to identify a pass... // AnalysisID - Use the PassInfo to identify a pass...
typedef const PassInfo* AnalysisID; typedef const PassInfo* AnalysisID;
@ -103,8 +102,7 @@ public:
/// provide the Module* in case the analysis doesn't need it it can just be /// provide the Module* in case the analysis doesn't need it it can just be
/// ignored. /// ignored.
/// ///
virtual void print(std::ostream &O, const Module *M) const; virtual void print(raw_ostream &O, const Module *M) const;
void print(std::ostream *O, const Module *M) const { if (O) print(*O, M); }
void dump() const; // dump - Print to stderr. void dump() const; // dump - Print to stderr.
/// Each pass is responsible for assigning a pass manager to itself. /// Each pass is responsible for assigning a pass manager to itself.
@ -202,9 +200,6 @@ public:
AnalysisType &getAnalysisID(const PassInfo *PI, Function &F); AnalysisType &getAnalysisID(const PassInfo *PI, Function &F);
}; };
inline std::ostream &operator<<(std::ostream &OS, const Pass &P) {
P.print(OS, 0); return OS;
}
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
/// ModulePass class - This class is used to implement unstructured /// ModulePass class - This class is used to implement unstructured

View File

@ -223,8 +223,6 @@ inline raw_ostream &operator<<(raw_ostream &OS, const ConstantRange &CR) {
return OS; return OS;
} }
std::ostream &operator<<(std::ostream &OS, const ConstantRange &CR);
} // End llvm namespace } // End llvm namespace
#endif #endif

View File

@ -66,7 +66,7 @@ public:
virtual void passRegistered(const PassInfo *P) { virtual void passRegistered(const PassInfo *P) {
if (ignorablePass(P) || !Opt) return; if (ignorablePass(P) || !Opt) return;
if (findOption(P->getPassArgument()) != getNumOptions()) { if (findOption(P->getPassArgument()) != getNumOptions()) {
cerr << "Two passes with the same argument (-" errs() << "Two passes with the same argument (-"
<< P->getPassArgument() << ") attempted to be registered!\n"; << P->getPassArgument() << ") attempted to be registered!\n";
llvm_unreachable(0); llvm_unreachable(0);
} }

View File

@ -196,7 +196,6 @@ public:
raw_ostream &operator<<(const std::string &Str) { raw_ostream &operator<<(const std::string &Str) {
// Avoid the fast path, it would only increase code size for a marginal win. // Avoid the fast path, it would only increase code size for a marginal win.
write(Str.data(), Str.length()); write(Str.data(), Str.length());
return *this; return *this;
} }
@ -220,6 +219,7 @@ public:
this->operator<<(ftostr(N)); this->operator<<(ftostr(N));
return *this; return *this;
} }
/// write_hex - Output \arg N in hexadecimal, without any prefix or padding. /// write_hex - Output \arg N in hexadecimal, without any prefix or padding.
raw_ostream &write_hex(unsigned long long N); raw_ostream &write_hex(unsigned long long N);

View File

@ -26,9 +26,6 @@
#include "llvm/Support/Compiler.h" #include "llvm/Support/Compiler.h"
#include "llvm/Support/GraphWriter.h" #include "llvm/Support/GraphWriter.h"
#include "llvm/Config/config.h" #include "llvm/Config/config.h"
#include <iosfwd>
#include <sstream>
#include <fstream>
using namespace llvm; using namespace llvm;
namespace llvm { namespace llvm {
@ -96,7 +93,7 @@ namespace {
return false; return false;
} }
void print(std::ostream &OS, const Module* = 0) const {} void print(raw_ostream &OS, const Module* = 0) const {}
virtual void getAnalysisUsage(AnalysisUsage &AU) const { virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll(); AU.setPreservesAll();
@ -118,7 +115,7 @@ namespace {
return false; return false;
} }
void print(std::ostream &OS, const Module* = 0) const {} void print(raw_ostream &OS, const Module* = 0) const {}
virtual void getAnalysisUsage(AnalysisUsage &AU) const { virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll(); AU.setPreservesAll();
@ -150,7 +147,7 @@ namespace {
return false; return false;
} }
void print(std::ostream &OS, const Module* = 0) const {} void print(raw_ostream &OS, const Module* = 0) const {}
virtual void getAnalysisUsage(AnalysisUsage &AU) const { virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll(); AU.setPreservesAll();
@ -179,7 +176,7 @@ namespace {
cerr << "\n"; cerr << "\n";
return false; return false;
} }
void print(std::ostream &OS, const Module* = 0) const {} void print(raw_ostream &OS, const Module* = 0) const {}
virtual void getAnalysisUsage(AnalysisUsage &AU) const { virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll(); AU.setPreservesAll();

View File

@ -607,7 +607,7 @@ namespace {
//===------------------------------------------------------------------===// //===------------------------------------------------------------------===//
// Implement Analyize interface // Implement Analyize interface
// //
void print(std::ostream &O, const Module* M) const { void print(raw_ostream &O, const Module*) const {
PrintPointsToGraph(); PrintPointsToGraph();
} }
}; };

View File

@ -18,8 +18,7 @@
#include "llvm/IntrinsicInst.h" #include "llvm/IntrinsicInst.h"
#include "llvm/Support/CallSite.h" #include "llvm/Support/CallSite.h"
#include "llvm/Support/Compiler.h" #include "llvm/Support/Compiler.h"
#include "llvm/Support/Streams.h" #include "llvm/Support/raw_ostream.h"
#include <ostream>
using namespace llvm; using namespace llvm;
namespace { namespace {
@ -68,30 +67,21 @@ public:
AU.setPreservesAll(); AU.setPreservesAll();
} }
void print(std::ostream *o, const Module *M) const { virtual void print(raw_ostream &OS, const Module *) const {
if (o) print(*o, M); OS << "CallGraph Root is: ";
}
virtual void print(std::ostream &o, const Module *M) const {
o << "CallGraph Root is: ";
if (Function *F = getRoot()->getFunction()) if (Function *F = getRoot()->getFunction())
o << F->getNameStr() << "\n"; OS << F->getName() << "\n";
else else {
o << "<<null function: 0x" << getRoot() << ">>\n"; OS << "<<null function: 0x" << getRoot() << ">>\n";
}
CallGraph::print(o, M); CallGraph::print(OS, 0);
} }
virtual void releaseMemory() { virtual void releaseMemory() {
destroy(); destroy();
} }
/// dump - Print out this call graph.
///
inline void dump() const {
print(cerr, Mod);
}
CallGraphNode* getExternalCallingNode() const { return ExternalCallingNode; } CallGraphNode* getExternalCallingNode() const { return ExternalCallingNode; }
CallGraphNode* getCallsExternalNode() const { return CallsExternalNode; } CallGraphNode* getCallsExternalNode() const { return CallsExternalNode; }
@ -187,15 +177,11 @@ void CallGraph::destroy() {
} }
} }
void CallGraph::print(std::ostream &OS, const Module *M) const { void CallGraph::print(raw_ostream &OS, Module*) const {
for (CallGraph::const_iterator I = begin(), E = end(); I != E; ++I) for (CallGraph::const_iterator I = begin(), E = end(); I != E; ++I)
I->second->print(OS); I->second->print(OS);
} }
void CallGraph::dump() const {
print(cerr, 0);
}
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// Implementations of public modification methods // Implementations of public modification methods
// //
@ -242,21 +228,21 @@ CallGraphNode *CallGraph::getOrInsertFunction(const Function *F) {
return CGN = new CallGraphNode(const_cast<Function*>(F)); return CGN = new CallGraphNode(const_cast<Function*>(F));
} }
void CallGraphNode::print(std::ostream &OS) const { void CallGraphNode::print(raw_ostream &OS) const {
if (Function *F = getFunction()) if (Function *F = getFunction())
OS << "Call graph node for function: '" << F->getNameStr() <<"'\n"; OS << "Call graph node for function: '" << F->getName() <<"'\n";
else else
OS << "Call graph node <<null function: 0x" << this << ">>:\n"; OS << "Call graph node <<null function: 0x" << this << ">>:\n";
for (const_iterator I = begin(), E = end(); I != E; ++I) for (const_iterator I = begin(), E = end(); I != E; ++I)
if (Function *FI = I->second->getFunction()) if (Function *FI = I->second->getFunction())
OS << " Calls function '" << FI->getNameStr() <<"'\n"; OS << " Calls function '" << FI->getName() <<"'\n";
else else
OS << " Calls external node\n"; OS << " Calls external node\n";
OS << "\n"; OS << "\n";
} }
void CallGraphNode::dump() const { print(cerr); } void CallGraphNode::dump() const { print(errs()); }
/// removeCallEdgeFor - This method removes the edge in the node for the /// removeCallEdgeFor - This method removes the edge in the node for the
/// specified call site. Note that this method takes linear time, so it /// specified call site. Note that this method takes linear time, so it

View File

@ -20,6 +20,7 @@
#include "llvm/ADT/SCCIterator.h" #include "llvm/ADT/SCCIterator.h"
#include "llvm/PassManagers.h" #include "llvm/PassManagers.h"
#include "llvm/Function.h" #include "llvm/Function.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm; using namespace llvm;
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
@ -56,7 +57,7 @@ public:
// Print passes managed by this manager // Print passes managed by this manager
void dumpPassStructure(unsigned Offset) { void dumpPassStructure(unsigned Offset) {
llvm::cerr << std::string(Offset*2, ' ') << "Call Graph SCC Pass Manager\n"; errs().indent(Offset*2) << "Call Graph SCC Pass Manager\n";
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
Pass *P = getContainedPass(Index); Pass *P = getContainedPass(Index);
P->dumpPassStructure(Offset + 1); P->dumpPassStructure(Offset + 1);
@ -65,9 +66,8 @@ public:
} }
Pass *getContainedPass(unsigned N) { Pass *getContainedPass(unsigned N) {
assert ( N < PassVector.size() && "Pass number out of range!"); assert(N < PassVector.size() && "Pass number out of range!");
Pass *FP = static_cast<Pass *>(PassVector[N]); return static_cast<Pass *>(PassVector[N]);
return FP;
} }
virtual PassManagerType getPassManagerType() const { virtual PassManagerType getPassManagerType() const {

View File

@ -92,13 +92,12 @@ bool FindUsedTypes::runOnModule(Module &m) {
// passed in, then the types are printed symbolically if possible, using the // passed in, then the types are printed symbolically if possible, using the
// symbol table from the module. // symbol table from the module.
// //
void FindUsedTypes::print(std::ostream &OS, const Module *M) const { void FindUsedTypes::print(raw_ostream &OS, const Module *M) const {
raw_os_ostream RO(OS); OS << "Types in use by this module:\n";
RO << "Types in use by this module:\n";
for (std::set<const Type *>::const_iterator I = UsedTypes.begin(), for (std::set<const Type *>::const_iterator I = UsedTypes.begin(),
E = UsedTypes.end(); I != E; ++I) { E = UsedTypes.end(); I != E; ++I) {
RO << " "; OS << " ";
WriteTypeSymbolic(RO, *I, M); WriteTypeSymbolic(OS, *I, M);
RO << '\n'; OS << '\n';
} }
} }

View File

@ -59,7 +59,7 @@ namespace {
virtual void getAnalysisUsage(AnalysisUsage &AU) const { virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll(); AU.setPreservesAll();
} }
virtual void print(std::ostream &O, const Module *M) const {} virtual void print(raw_ostream &O, const Module *M) const {}
}; };
} }

View File

@ -37,8 +37,7 @@ bool Interval::isLoop() const {
} }
void Interval::print(std::ostream &O) const { void Interval::print(raw_ostream &OS) const {
raw_os_ostream OS(O);
OS << "-------------------------------------------------------------\n" OS << "-------------------------------------------------------------\n"
<< "Interval Contents:\n"; << "Interval Contents:\n";

View File

@ -32,7 +32,7 @@ void IntervalPartition::releaseMemory() {
RootInterval = 0; RootInterval = 0;
} }
void IntervalPartition::print(std::ostream &O, const Module*) const { void IntervalPartition::print(raw_ostream &O, const Module*) const {
for(unsigned i = 0, e = Intervals.size(); i != e; ++i) for(unsigned i = 0, e = Intervals.size(); i != e; ++i)
Intervals[i]->print(O); Intervals[i]->print(O);
} }

View File

@ -309,8 +309,7 @@ void LoopInfo::getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired<DominatorTree>(); AU.addRequired<DominatorTree>();
} }
void LoopInfo::print(std::ostream &OS, const Module*) const { void LoopInfo::print(raw_ostream &OS, const Module*) const {
raw_os_ostream OSS(OS); LI.print(OS);
LI.print(OSS);
} }

View File

@ -228,8 +228,7 @@ void LoopVR::getAnalysisUsage(AnalysisUsage &AU) const {
bool LoopVR::runOnFunction(Function &F) { Map.clear(); return false; } bool LoopVR::runOnFunction(Function &F) { Map.clear(); return false; }
void LoopVR::print(std::ostream &os, const Module *) const { void LoopVR::print(raw_ostream &OS, const Module *) const {
raw_os_ostream OS(os);
for (std::map<Value *, ConstantRange *>::const_iterator I = Map.begin(), for (std::map<Value *, ConstantRange *>::const_iterator I = Map.begin(),
E = Map.end(); I != E; ++I) { E = Map.end(); I != E; ++I) {
OS << *I->first << ": " << *I->second << '\n'; OS << *I->first << ": " << *I->second << '\n';

View File

@ -41,9 +41,8 @@ PostDominatorTree::~PostDominatorTree() {
delete DT; delete DT;
} }
void PostDominatorTree::print(std::ostream &OS, const Module *) const { void PostDominatorTree::print(raw_ostream &OS, const Module *) const {
raw_os_ostream OSS(OS); DT->print(OS);
DT->print(OSS);
} }

View File

@ -5193,7 +5193,3 @@ void ScalarEvolution::print(raw_ostream &OS, const Module* ) const {
PrintLoopInfo(OS, &SE, *I); PrintLoopInfo(OS, &SE, *I);
} }
void ScalarEvolution::print(std::ostream &o, const Module *M) const {
raw_os_ostream OS(o);
print(OS, M);
}

View File

@ -93,7 +93,7 @@ GCStrategy *GCModuleInfo::getOrCreateStrategy(const Module *M,
} }
} }
cerr << "unsupported GC: " << Name << "\n"; errs() << "unsupported GC: " << Name << "\n";
llvm_unreachable(0); llvm_unreachable(0);
} }

View File

@ -29,6 +29,7 @@
#include "llvm/Target/TargetRegisterInfo.h" #include "llvm/Target/TargetRegisterInfo.h"
#include "llvm/Support/Compiler.h" #include "llvm/Support/Compiler.h"
#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
using namespace llvm; using namespace llvm;
@ -108,7 +109,7 @@ GCStrategy::~GCStrategy() {
bool GCStrategy::initializeCustomLowering(Module &M) { return false; } bool GCStrategy::initializeCustomLowering(Module &M) { return false; }
bool GCStrategy::performCustomLowering(Function &F) { bool GCStrategy::performCustomLowering(Function &F) {
cerr << "gc " << getName() << " must override performCustomLowering.\n"; errs() << "gc " << getName() << " must override performCustomLowering.\n";
llvm_unreachable(0); llvm_unreachable(0);
return 0; return 0;
} }

View File

@ -16,8 +16,9 @@
#include "llvm/Module.h" #include "llvm/Module.h"
#include "llvm/Type.h" #include "llvm/Type.h"
#include "llvm/CodeGen/IntrinsicLowering.h" #include "llvm/CodeGen/IntrinsicLowering.h"
#include "llvm/Support/IRBuilder.h"
#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/IRBuilder.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetData.h" #include "llvm/Target/TargetData.h"
#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/SmallVector.h"
using namespace llvm; using namespace llvm;
@ -396,8 +397,8 @@ void IntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
case Intrinsic::stacksave: case Intrinsic::stacksave:
case Intrinsic::stackrestore: { case Intrinsic::stackrestore: {
if (!Warned) if (!Warned)
cerr << "WARNING: this target does not support the llvm.stack" errs() << "WARNING: this target does not support the llvm.stack"
<< (Callee->getIntrinsicID() == Intrinsic::stacksave ? << (Callee->getIntrinsicID() == Intrinsic::stacksave ?
"save" : "restore") << " intrinsic.\n"; "save" : "restore") << " intrinsic.\n";
Warned = true; Warned = true;
if (Callee->getIntrinsicID() == Intrinsic::stacksave) if (Callee->getIntrinsicID() == Intrinsic::stacksave)
@ -407,8 +408,8 @@ void IntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
case Intrinsic::returnaddress: case Intrinsic::returnaddress:
case Intrinsic::frameaddress: case Intrinsic::frameaddress:
cerr << "WARNING: this target does not support the llvm." errs() << "WARNING: this target does not support the llvm."
<< (Callee->getIntrinsicID() == Intrinsic::returnaddress ? << (Callee->getIntrinsicID() == Intrinsic::returnaddress ?
"return" : "frame") << "address intrinsic.\n"; "return" : "frame") << "address intrinsic.\n";
CI->replaceAllUsesWith(ConstantPointerNull::get( CI->replaceAllUsesWith(ConstantPointerNull::get(
cast<PointerType>(CI->getType()))); cast<PointerType>(CI->getType())));
@ -420,8 +421,8 @@ void IntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
case Intrinsic::pcmarker: case Intrinsic::pcmarker:
break; // Simply strip out pcmarker on unsupported architectures break; // Simply strip out pcmarker on unsupported architectures
case Intrinsic::readcyclecounter: { case Intrinsic::readcyclecounter: {
cerr << "WARNING: this target does not support the llvm.readcyclecoun" errs() << "WARNING: this target does not support the llvm.readcyclecoun"
<< "ter intrinsic. It is being lowered to a constant 0\n"; << "ter intrinsic. It is being lowered to a constant 0\n";
CI->replaceAllUsesWith(ConstantInt::get(Type::getInt64Ty(Context), 0)); CI->replaceAllUsesWith(ConstantInt::get(Type::getInt64Ty(Context), 0));
break; break;
} }

View File

@ -516,8 +516,7 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {
} }
/// print - Implement the dump method. /// print - Implement the dump method.
void LiveIntervals::print(std::ostream &O, const Module* ) const { void LiveIntervals::print(raw_ostream &OS, const Module* ) const {
raw_os_ostream OS(O);
OS << "********** INTERVALS **********\n"; OS << "********** INTERVALS **********\n";
for (const_iterator I = begin(), E = end(); I != E; ++I) { for (const_iterator I = begin(), E = end(); I != E; ++I) {
I->second->print(OS, tri_); I->second->print(OS, tri_);

View File

@ -53,8 +53,7 @@ bool LiveStacks::runOnMachineFunction(MachineFunction &) {
} }
/// print - Implement the dump method. /// print - Implement the dump method.
void LiveStacks::print(std::ostream &O, const Module*) const { void LiveStacks::print(raw_ostream &OS, const Module*) const {
raw_os_ostream OS(O);
OS << "********** INTERVALS **********\n"; OS << "********** INTERVALS **********\n";
for (const_iterator I = begin(), E = end(); I != E; ++I) { for (const_iterator I = begin(), E = end(); I != E; ++I) {

View File

@ -52,7 +52,6 @@ void MachineDominatorTree::releaseMemory() {
DT->releaseMemory(); DT->releaseMemory();
} }
void MachineDominatorTree::print(std::ostream &OS, const Module*) const { void MachineDominatorTree::print(raw_ostream &OS, const Module*) const {
raw_os_ostream OSS(OS); DT->print(OS);
DT->print(OSS);
} }

View File

@ -121,13 +121,10 @@ namespace {
} }
/// print - Implement the dump method. /// print - Implement the dump method.
virtual void print(std::ostream &O, const Module* M = 0) const { virtual void print(raw_ostream &O, const Module* M = 0) const {
LIs->print(O, M); LIs->print(O, M);
} }
void print(std::ostream *O, const Module* M = 0) const {
if (O) print(*O, M);
}
private: private:
MachineBasicBlock::iterator MachineBasicBlock::iterator

View File

@ -69,8 +69,8 @@ CCState::AnalyzeFormalArguments(const SmallVectorImpl<ISD::InputArg> &Ins,
ISD::ArgFlagsTy ArgFlags = Ins[i].Flags; ISD::ArgFlagsTy ArgFlags = Ins[i].Flags;
if (Fn(i, ArgVT, ArgVT, CCValAssign::Full, ArgFlags, *this)) { if (Fn(i, ArgVT, ArgVT, CCValAssign::Full, ArgFlags, *this)) {
#ifndef NDEBUG #ifndef NDEBUG
cerr << "Formal argument #" << i << " has unhandled type " errs() << "Formal argument #" << i << " has unhandled type "
<< ArgVT.getEVTString(); << ArgVT.getEVTString();
#endif #endif
llvm_unreachable(0); llvm_unreachable(0);
} }
@ -87,8 +87,8 @@ void CCState::AnalyzeReturn(const SmallVectorImpl<ISD::OutputArg> &Outs,
ISD::ArgFlagsTy ArgFlags = Outs[i].Flags; ISD::ArgFlagsTy ArgFlags = Outs[i].Flags;
if (Fn(i, VT, VT, CCValAssign::Full, ArgFlags, *this)) { if (Fn(i, VT, VT, CCValAssign::Full, ArgFlags, *this)) {
#ifndef NDEBUG #ifndef NDEBUG
cerr << "Return operand #" << i << " has unhandled type " errs() << "Return operand #" << i << " has unhandled type "
<< VT.getEVTString(); << VT.getEVTString();
#endif #endif
llvm_unreachable(0); llvm_unreachable(0);
} }
@ -106,8 +106,8 @@ void CCState::AnalyzeCallOperands(const SmallVectorImpl<ISD::OutputArg> &Outs,
ISD::ArgFlagsTy ArgFlags = Outs[i].Flags; ISD::ArgFlagsTy ArgFlags = Outs[i].Flags;
if (Fn(i, ArgVT, ArgVT, CCValAssign::Full, ArgFlags, *this)) { if (Fn(i, ArgVT, ArgVT, CCValAssign::Full, ArgFlags, *this)) {
#ifndef NDEBUG #ifndef NDEBUG
cerr << "Call operand #" << i << " has unhandled type " errs() << "Call operand #" << i << " has unhandled type "
<< ArgVT.getEVTString(); << ArgVT.getEVTString();
#endif #endif
llvm_unreachable(0); llvm_unreachable(0);
} }
@ -125,8 +125,8 @@ void CCState::AnalyzeCallOperands(SmallVectorImpl<EVT> &ArgVTs,
ISD::ArgFlagsTy ArgFlags = Flags[i]; ISD::ArgFlagsTy ArgFlags = Flags[i];
if (Fn(i, ArgVT, ArgVT, CCValAssign::Full, ArgFlags, *this)) { if (Fn(i, ArgVT, ArgVT, CCValAssign::Full, ArgFlags, *this)) {
#ifndef NDEBUG #ifndef NDEBUG
cerr << "Call operand #" << i << " has unhandled type " errs() << "Call operand #" << i << " has unhandled type "
<< ArgVT.getEVTString(); << ArgVT.getEVTString();
#endif #endif
llvm_unreachable(0); llvm_unreachable(0);
} }
@ -142,8 +142,8 @@ void CCState::AnalyzeCallResult(const SmallVectorImpl<ISD::InputArg> &Ins,
ISD::ArgFlagsTy Flags = Ins[i].Flags; ISD::ArgFlagsTy Flags = Ins[i].Flags;
if (Fn(i, VT, VT, CCValAssign::Full, Flags, *this)) { if (Fn(i, VT, VT, CCValAssign::Full, Flags, *this)) {
#ifndef NDEBUG #ifndef NDEBUG
cerr << "Call result #" << i << " has unhandled type " errs() << "Call result #" << i << " has unhandled type "
<< VT.getEVTString(); << VT.getEVTString();
#endif #endif
llvm_unreachable(0); llvm_unreachable(0);
} }
@ -155,8 +155,8 @@ void CCState::AnalyzeCallResult(const SmallVectorImpl<ISD::InputArg> &Ins,
void CCState::AnalyzeCallResult(EVT VT, CCAssignFn Fn) { void CCState::AnalyzeCallResult(EVT VT, CCAssignFn Fn) {
if (Fn(0, VT, VT, CCValAssign::Full, ISD::ArgFlagsTy(), *this)) { if (Fn(0, VT, VT, CCValAssign::Full, ISD::ArgFlagsTy(), *this)) {
#ifndef NDEBUG #ifndef NDEBUG
cerr << "Call result has unhandled type " errs() << "Call result has unhandled type "
<< VT.getEVTString(); << VT.getEVTString();
#endif #endif
llvm_unreachable(0); llvm_unreachable(0);
} }

View File

@ -35,6 +35,7 @@
#include "llvm/Support/Compiler.h" #include "llvm/Support/Compiler.h"
#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h" #include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallPtrSet.h"
@ -950,7 +951,9 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
switch (Node->getOpcode()) { switch (Node->getOpcode()) {
default: default:
#ifndef NDEBUG #ifndef NDEBUG
cerr << "NODE: "; Node->dump(&DAG); cerr << "\n"; errs() << "NODE: ";
Node->dump(&DAG);
errs() << "\n";
#endif #endif
llvm_unreachable("Do not know how to legalize this operator!"); llvm_unreachable("Do not know how to legalize this operator!");

View File

@ -659,7 +659,7 @@ bool SelectionDAG::RemoveNodeFromCSEMaps(SDNode *N) {
if (!Erased && N->getValueType(N->getNumValues()-1) != MVT::Flag && if (!Erased && N->getValueType(N->getNumValues()-1) != MVT::Flag &&
!N->isMachineOpcode() && !doNotCSE(N)) { !N->isMachineOpcode() && !doNotCSE(N)) {
N->dump(this); N->dump(this);
cerr << "\n"; errs() << "\n";
llvm_unreachable("Node is not in map!"); llvm_unreachable("Node is not in map!");
} }
#endif #endif
@ -5644,16 +5644,17 @@ static void DumpNodes(const SDNode *N, unsigned indent, const SelectionDAG *G) {
if (N->getOperand(i).getNode()->hasOneUse()) if (N->getOperand(i).getNode()->hasOneUse())
DumpNodes(N->getOperand(i).getNode(), indent+2, G); DumpNodes(N->getOperand(i).getNode(), indent+2, G);
else else
cerr << "\n" << std::string(indent+2, ' ') errs() << "\n" << std::string(indent+2, ' ')
<< (void*)N->getOperand(i).getNode() << ": <multiple use>"; << (void*)N->getOperand(i).getNode() << ": <multiple use>";
cerr << "\n" << std::string(indent, ' '); errs() << "\n";
errs().indent(indent);
N->dump(G); N->dump(G);
} }
void SelectionDAG::dump() const { void SelectionDAG::dump() const {
cerr << "SelectionDAG has " << AllNodes.size() << " nodes:"; errs() << "SelectionDAG has " << AllNodes.size() << " nodes:";
for (allnodes_const_iterator I = allnodes_begin(), E = allnodes_end(); for (allnodes_const_iterator I = allnodes_begin(), E = allnodes_end();
I != E; ++I) { I != E; ++I) {
@ -5664,7 +5665,7 @@ void SelectionDAG::dump() const {
if (getRoot().getNode()) DumpNodes(getRoot().getNode(), 2, this); if (getRoot().getNode()) DumpNodes(getRoot().getNode(), 2, this);
cerr << "\n\n"; errs() << "\n\n";
} }
void SDNode::printr(raw_ostream &OS, const SelectionDAG *G) const { void SDNode::printr(raw_ostream &OS, const SelectionDAG *G) const {

View File

@ -2792,7 +2792,7 @@ bool SimpleRegisterCoalescing::runOnMachineFunction(MachineFunction &fn) {
} }
/// print - Implement the dump method. /// print - Implement the dump method.
void SimpleRegisterCoalescing::print(std::ostream &O, const Module* m) const { void SimpleRegisterCoalescing::print(raw_ostream &O, const Module* m) const {
li_->print(O, m); li_->print(O, m);
} }

View File

@ -137,10 +137,7 @@ namespace llvm {
} }
/// print - Implement the dump method. /// print - Implement the dump method.
virtual void print(std::ostream &O, const Module* = 0) const; virtual void print(raw_ostream &O, const Module* = 0) const;
void print(std::ostream *O, const Module* M = 0) const {
if (O) print(*O, M);
}
private: private:
/// joinIntervals - join compatible live intervals /// joinIntervals - join compatible live intervals

View File

@ -597,9 +597,4 @@ void ConstantRange::dump() const {
print(errs()); print(errs());
} }
std::ostream &llvm::operator<<(std::ostream &o,
const ConstantRange &CR) {
raw_os_ostream OS(o);
OS << CR;
return o;
}

View File

@ -2635,7 +2635,7 @@ PPCTargetLowering::LowerCall_SVR4(SDValue Chain, SDValue Callee,
if (Result) { if (Result) {
#ifndef NDEBUG #ifndef NDEBUG
cerr << "Call operand #" << i << " has unhandled type " errs() << "Call operand #" << i << " has unhandled type "
<< ArgVT.getEVTString() << "\n"; << ArgVT.getEVTString() << "\n";
#endif #endif
llvm_unreachable(0); llvm_unreachable(0);

View File

@ -55,7 +55,7 @@ void ExtAddrMode::print(raw_ostream &OS) const {
void ExtAddrMode::dump() const { void ExtAddrMode::dump() const {
print(errs()); print(errs());
cerr << '\n'; errs() << '\n';
} }

View File

@ -48,9 +48,8 @@ bool DominatorTree::runOnFunction(Function &F) {
return false; return false;
} }
void DominatorTree::print(std::ostream &OS, const Module *) const { void DominatorTree::print(raw_ostream &OS, const Module *) const {
raw_os_ostream OSS(OS); DT->print(OS);
DT->print(OSS);
} }
@ -264,8 +263,7 @@ DominanceFrontier::calculate(const DominatorTree &DT,
return *Result; return *Result;
} }
void DominanceFrontierBase::print(std::ostream &O, const Module* ) const { void DominanceFrontierBase::print(raw_ostream &OS, const Module* ) const {
raw_os_ostream OS(O);
for (const_iterator I = begin(), E = end(); I != E; ++I) { for (const_iterator I = begin(), E = end(); I != E; ++I) {
OS << " DomFrontier for BB"; OS << " DomFrontier for BB";
if (I->first) if (I->first)

View File

@ -19,6 +19,7 @@
#include "llvm/ModuleProvider.h" #include "llvm/ModuleProvider.h"
#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/STLExtras.h"
#include "llvm/Support/ManagedStatic.h" #include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/System/Atomic.h" #include "llvm/System/Atomic.h"
#include "llvm/System/Mutex.h" #include "llvm/System/Mutex.h"
#include "llvm/System/Threading.h" #include "llvm/System/Threading.h"
@ -45,7 +46,7 @@ bool Pass::mustPreserveAnalysisID(const PassInfo *AnalysisID) const {
// dumpPassStructure - Implement the -debug-passes=Structure option // dumpPassStructure - Implement the -debug-passes=Structure option
void Pass::dumpPassStructure(unsigned Offset) { void Pass::dumpPassStructure(unsigned Offset) {
cerr << std::string(Offset*2, ' ') << getPassName() << "\n"; errs().indent(Offset*2) << getPassName() << "\n";
} }
/// getPassName - Return a nice clean name for a pass. This usually /// getPassName - Return a nice clean name for a pass. This usually
@ -62,13 +63,13 @@ const char *Pass::getPassName() const {
// to print out the contents of an analysis. Otherwise it is not necessary to // to print out the contents of an analysis. Otherwise it is not necessary to
// implement this method. // implement this method.
// //
void Pass::print(std::ostream &O,const Module*) const { void Pass::print(raw_ostream &O,const Module*) const {
O << "Pass::print not implemented for pass: '" << getPassName() << "'!\n"; O << "Pass::print not implemented for pass: '" << getPassName() << "'!\n";
} }
// dump - call print(cerr); // dump - call print(cerr);
void Pass::dump() const { void Pass::dump() const {
print(*cerr.stream(), 0); print(errs(), 0);
} }
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//

View File

@ -34,27 +34,31 @@ namespace {
static char ID; // Pass ID, replacement for typeid static char ID; // Pass ID, replacement for typeid
ExternalFunctionsPassedConstants() : ModulePass(&ID) {} ExternalFunctionsPassedConstants() : ModulePass(&ID) {}
virtual bool runOnModule(Module &M) { virtual bool runOnModule(Module &M) {
for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
if (I->isDeclaration()) { if (!I->isDeclaration()) continue;
bool PrintedFn = false;
for (Value::use_iterator UI = I->use_begin(), E = I->use_end(); bool PrintedFn = false;
UI != E; ++UI) for (Value::use_iterator UI = I->use_begin(), E = I->use_end();
if (Instruction *User = dyn_cast<Instruction>(*UI)) { UI != E; ++UI) {
CallSite CS = CallSite::get(User); Instruction *User = dyn_cast<Instruction>(*UI);
if (CS.getInstruction()) { if (!User) continue;
for (CallSite::arg_iterator AI = CS.arg_begin(),
E = CS.arg_end(); AI != E; ++AI) CallSite CS = CallSite::get(User);
if (isa<Constant>(*AI)) { if (!CS.getInstruction()) continue;
if (!PrintedFn) {
errs() << "Function '" << I->getName() << "':\n"; for (CallSite::arg_iterator AI = CS.arg_begin(),
PrintedFn = true; E = CS.arg_end(); AI != E; ++AI) {
} if (!isa<Constant>(*AI)) continue;
errs() << *User;
break; if (!PrintedFn) {
} errs() << "Function '" << I->getName() << "':\n";
} PrintedFn = true;
} }
errs() << *User;
break;
}
} }
}
return false; return false;
} }
@ -78,7 +82,7 @@ namespace {
AU.addRequiredTransitive<CallGraph>(); AU.addRequiredTransitive<CallGraph>();
} }
virtual bool runOnModule(Module &M) { virtual bool runOnModule(Module &M) {
getAnalysis<CallGraph>().print(std::cerr, &M); getAnalysis<CallGraph>().print(errs(), &M);
return false; return false;
} }
}; };

View File

@ -70,8 +70,7 @@ namespace {
return false; return false;
} }
void print(std::ostream &OS) const {} void print(raw_ostream &OS, const llvm::Module*) const {}
void print(std::ostream &OS, const llvm::Module*) const {}
virtual void getAnalysisUsage(AnalysisUsage &AU) const { virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired<CallGraph>(); AU.addRequired<CallGraph>();

View File

@ -39,7 +39,7 @@ namespace {
CFGSCC() : FunctionPass(&ID) {} CFGSCC() : FunctionPass(&ID) {}
bool runOnFunction(Function& func); bool runOnFunction(Function& func);
void print(std::ostream &O, const Module* = 0) const { } void print(raw_ostream &O, const Module* = 0) const { }
virtual void getAnalysisUsage(AnalysisUsage &AU) const { virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll(); AU.setPreservesAll();
@ -53,7 +53,7 @@ namespace {
// run - Print out SCCs in the call graph for the specified module. // run - Print out SCCs in the call graph for the specified module.
bool runOnModule(Module &M); bool runOnModule(Module &M);
void print(std::ostream &O, const Module* = 0) const { } void print(raw_ostream &O, const Module* = 0) const { }
// getAnalysisUsage - This pass requires the CallGraph. // getAnalysisUsage - This pass requires the CallGraph.
virtual void getAnalysisUsage(AnalysisUsage &AU) const { virtual void getAnalysisUsage(AnalysisUsage &AU) const {

View File

@ -140,7 +140,7 @@ struct CallGraphSCCPassPrinter : public CallGraphSCCPass {
Function *F = SCC[i]->getFunction(); Function *F = SCC[i]->getFunction();
if (F) { if (F) {
outs().flush(); outs().flush();
getAnalysisID<Pass>(PassToPrint).print(cout, F->getParent()); getAnalysisID<Pass>(PassToPrint).print(outs(), F->getParent());
cout << std::flush; cout << std::flush;
} }
} }
@ -169,7 +169,7 @@ struct ModulePassPrinter : public ModulePass {
if (!Quiet) { if (!Quiet) {
outs() << "Printing analysis '" << PassToPrint->getPassName() << "':\n"; outs() << "Printing analysis '" << PassToPrint->getPassName() << "':\n";
outs().flush(); outs().flush();
getAnalysisID<Pass>(PassToPrint).print(cout, &M); getAnalysisID<Pass>(PassToPrint).print(outs(), &M);
cout << std::flush; cout << std::flush;
} }
@ -199,7 +199,7 @@ struct FunctionPassPrinter : public FunctionPass {
} }
// Get and print pass... // Get and print pass...
outs().flush(); outs().flush();
getAnalysisID<Pass>(PassToPrint).print(cout, F.getParent()); getAnalysisID<Pass>(PassToPrint).print(outs(), F.getParent());
cout << std::flush; cout << std::flush;
return false; return false;
} }
@ -224,7 +224,7 @@ struct LoopPassPrinter : public LoopPass {
if (!Quiet) { if (!Quiet) {
outs() << "Printing analysis '" << PassToPrint->getPassName() << "':\n"; outs() << "Printing analysis '" << PassToPrint->getPassName() << "':\n";
outs().flush(); outs().flush();
getAnalysisID<Pass>(PassToPrint).print(cout, getAnalysisID<Pass>(PassToPrint).print(outs(),
L->getHeader()->getParent()->getParent()); L->getHeader()->getParent()->getParent());
cout << std::flush; cout << std::flush;
} }
@ -256,7 +256,7 @@ struct BasicBlockPassPrinter : public BasicBlockPass {
// Get and print pass... // Get and print pass...
outs().flush(); outs().flush();
getAnalysisID<Pass>(PassToPrint).print(cout, BB.getParent()->getParent()); getAnalysisID<Pass>(PassToPrint).print(outs(), BB.getParent()->getParent());
cout << std::flush; cout << std::flush;
return false; return false;
} }

View File

@ -2071,7 +2071,7 @@ void DAGISelEmitter::EmitInstructionSelector(raw_ostream &OS) {
<< "}\n\n"; << "}\n\n";
OS << "void CannotYetSelectIntrinsic(SDValue N) DISABLE_INLINE {\n" OS << "void CannotYetSelectIntrinsic(SDValue N) DISABLE_INLINE {\n"
<< " cerr << \"Cannot yet select: \";\n" << " errs() << \"Cannot yet select: \";\n"
<< " unsigned iid = cast<ConstantSDNode>(N.getOperand(" << " unsigned iid = cast<ConstantSDNode>(N.getOperand("
<< "N.getOperand(0).getValueType() == MVT::Other))->getZExtValue();\n" << "N.getOperand(0).getValueType() == MVT::Other))->getZExtValue();\n"
<< " llvm_report_error(\"Cannot yet select: intrinsic %\" +\n" << " llvm_report_error(\"Cannot yet select: intrinsic %\" +\n"