mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-25 16:24:23 +00:00
DebugInfo: Provide a utility for building a mapping from llvm::Function*s to llvm::DISubprograms
Update DeadArgumentElimintation to use this, with the intent of reusing the functionality for ArgumentPromotion as well. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212122 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1526,3 +1526,22 @@ unsigned llvm::getDebugMetadataVersionFromModule(const Module &M) {
|
||||
return 0;
|
||||
return cast<ConstantInt>(Val)->getZExtValue();
|
||||
}
|
||||
|
||||
llvm::DenseMap<llvm::Function *, llvm::DISubprogram> llvm::makeSubprogramMap(Module &M) {
|
||||
DenseMap<Function *, DISubprogram> R;
|
||||
|
||||
NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu");
|
||||
if (!CU_Nodes)
|
||||
return R;
|
||||
|
||||
for (MDNode *N : CU_Nodes->operands()) {
|
||||
DICompileUnit CUNode(N);
|
||||
DIArray SPs = CUNode.getSubprograms();
|
||||
for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i) {
|
||||
DISubprogram SP(SPs.getElement(i));
|
||||
if (Function *F = SP.getFunction())
|
||||
R.insert(std::make_pair(F, SP));
|
||||
}
|
||||
}
|
||||
return R;
|
||||
}
|
||||
|
Reference in New Issue
Block a user