mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-24 22:24:54 +00:00
DebugInfo: Keep track of subprograms who's arguments have been promoted.
Matching behavior with DeadArgumentElimination (and leveraging some now-common infrastructure), keep track of the function from debug info metadata if arguments are promoted. This may produce interesting debug info - since the arguments may be missing or of different types... but at least backtraces, inlining, etc, will be correct. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212128 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -39,6 +39,7 @@
|
||||
#include "llvm/IR/CFG.h"
|
||||
#include "llvm/IR/CallSite.h"
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/DebugInfo.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/Instructions.h"
|
||||
#include "llvm/IR/LLVMContext.h"
|
||||
@@ -80,8 +81,10 @@ namespace {
|
||||
CallGraphNode *DoPromotion(Function *F,
|
||||
SmallPtrSet<Argument*, 8> &ArgsToPromote,
|
||||
SmallPtrSet<Argument*, 8> &ByValArgsToTransform);
|
||||
bool doInitialization(CallGraph &CG) override;
|
||||
/// The maximum number of elements to expand, or 0 for unlimited.
|
||||
unsigned maxElements;
|
||||
DenseMap<Function *, DISubprogram> FunctionDIs;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -604,6 +607,10 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
||||
Function *NF = Function::Create(NFTy, F->getLinkage(), F->getName());
|
||||
NF->copyAttributesFrom(F);
|
||||
|
||||
// Patch the pointer to LLVM function in debug info descriptor.
|
||||
auto DI = FunctionDIs.find(F);
|
||||
if (DI != FunctionDIs.end())
|
||||
DI->second.replaceFunction(NF);
|
||||
|
||||
DEBUG(dbgs() << "ARG PROMOTION: Promoting to:" << *NF << "\n"
|
||||
<< "From: " << *F);
|
||||
@@ -903,3 +910,8 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
|
||||
|
||||
return NF_CGN;
|
||||
}
|
||||
|
||||
bool ArgPromotion::doInitialization(CallGraph &CG) {
|
||||
FunctionDIs = makeSubprogramMap(CG.getModule());
|
||||
return CallGraphSCCPass::doInitialization(CG);
|
||||
}
|
||||
|
Reference in New Issue
Block a user