mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-24 13:18:17 +00:00
Introduce DebugInfoProbe. This is used to monitor how llvm optimizer is treating debugging information.
It generates output that lools like 8 times line number info lost by Scalar Replacement of Aggregates (SSAUp) 1 times line number info lost by Simplify well-known library calls 12 times variable info lost by Jump Threading git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127381 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -14,8 +14,10 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Analysis/LoopPass.h"
|
||||
#include "llvm/DebugInfoProbe.h"
|
||||
#include "llvm/Assembly/PrintModulePass.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/ManagedStatic.h"
|
||||
#include "llvm/Support/Timer.h"
|
||||
using namespace llvm;
|
||||
|
||||
@@ -51,6 +53,20 @@ public:
|
||||
char PrintLoopPass::ID = 0;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// DebugInfoProbe
|
||||
|
||||
static DebugInfoProbeInfo *TheDebugProbe;
|
||||
static void createDebugInfoProbe() {
|
||||
if (TheDebugProbe) return;
|
||||
|
||||
// Constructed the first time this is called. This guarantees that the
|
||||
// object will be constructed, if -enable-debug-info-probe is set,
|
||||
// before static globals, thus it will be destroyed before them.
|
||||
static ManagedStatic<DebugInfoProbeInfo> DIP;
|
||||
TheDebugProbe = &*DIP;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// LPPassManager
|
||||
//
|
||||
@@ -223,6 +239,7 @@ void LPPassManager::getAnalysisUsage(AnalysisUsage &Info) const {
|
||||
bool LPPassManager::runOnFunction(Function &F) {
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
bool Changed = false;
|
||||
createDebugInfoProbe();
|
||||
|
||||
// Collect inherited analysis from Module level pass manager.
|
||||
populateInheritedAnalysis(TPM->activeStack);
|
||||
@@ -254,19 +271,21 @@ bool LPPassManager::runOnFunction(Function &F) {
|
||||
// Run all passes on the current Loop.
|
||||
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
|
||||
LoopPass *P = getContainedPass(Index);
|
||||
|
||||
dumpPassInfo(P, EXECUTION_MSG, ON_LOOP_MSG,
|
||||
CurrentLoop->getHeader()->getName());
|
||||
dumpRequiredSet(P);
|
||||
|
||||
initializeAnalysisImpl(P);
|
||||
|
||||
if (TheDebugProbe)
|
||||
TheDebugProbe->initialize(P, F);
|
||||
{
|
||||
PassManagerPrettyStackEntry X(P, *CurrentLoop->getHeader());
|
||||
TimeRegion PassTimer(getPassTimer(P));
|
||||
|
||||
Changed |= P->runOnLoop(CurrentLoop, *this);
|
||||
}
|
||||
if (TheDebugProbe)
|
||||
TheDebugProbe->finalize(P, F);
|
||||
|
||||
if (Changed)
|
||||
dumpPassInfo(P, MODIFICATION_MSG, ON_LOOP_MSG,
|
||||
|
||||
Reference in New Issue
Block a user