36 const char *getPassName()
const;
40 bool doFinalization(
Module &M);
46 "Create Garbage Collector Module Metadata",
false,
false)
51 : F(F), S(S), FrameSize(~0LL) {}
69 const std::string &
Name) {
71 if (NMI != StrategyMap.
end())
72 return NMI->getValue();
76 if (Name ==
I->getName()) {
81 StrategyList.push_back(S);
86 dbgs() <<
"unsupported GC: " << Name <<
"\n";
91 assert(!F.
isDeclaration() &&
"Can only get GCFunctionInfo for a definition!");
95 if (I != FInfoMap.
end())
110 StrategyList.clear();
122 const char *Printer::getPassName()
const {
123 return "Print Garbage Collector Information";
142 bool Printer::runOnFunction(
Function &
F) {
143 if (F.
hasGC())
return false;
145 GCFunctionInfo *FD = &getAnalysis<GCModuleInfo>().getFunctionInfo(F);
150 OS <<
"\t" << RI->Num <<
"\t" << RI->StackOffset <<
"[sp]\n";
154 PE = FD->
end(); PI != PE; ++PI) {
156 OS <<
"\t" << PI->Label->getName() <<
": "
157 <<
DescKind(PI->Kind) <<
", live = {";
161 OS <<
" " << RI->Num;
173 bool Printer::doFinalization(
Module &M) {
174 GCModuleInfo *GMI = getAnalysisIfAvailable<GCModuleInfo>();
175 assert(GMI &&
"Printer didn't require GCModuleInfo?!");
static PassRegistry * getPassRegistry()
The main container class for the LLVM Intermediate Representation.
void setValue(const ValueTy &V)
virtual void getAnalysisUsage(AnalysisUsage &) const
const char * getGC() const
iterator find(StringRef Key)
print alias Alias Set Printer
StringRef getName() const
std::vector< GCPoint >::iterator iterator
AnalysisUsage & addRequired()
#define llvm_unreachable(msg)
GCFunctionInfo & getFunctionInfo(const Function &F)
ID
LLVM Calling Convention Representation.
list_type::const_iterator iterator
StringMapIterator< GCStrategy * > iterator
FunctionPass * createGCInfoPrinter(raw_ostream &OS)
roots_iterator roots_end()
Instr is the return address of a call.
Instr is a loop (backwards branch).
roots_iterator roots_begin()
live_iterator live_begin(const iterator &p)
Instr is a return instruction.
raw_ostream & dbgs()
dbgs - Return a circular-buffered debug stream.
MapEntryTy & GetOrCreateValue(StringRef Key, InitTy Val)
bool isDeclaration() const
void initializeGCModuleInfoPass(PassRegistry &)
Instr is a call instruction.
GCFunctionInfo * insertFunctionInfo(const Function &F)
const Function & getFunction() const
live_iterator live_end(const iterator &p)
iterator find(const KeyT &Val)
std::vector< GCRoot >::iterator roots_iterator
std::vector< GCRoot >::const_iterator live_iterator