Make HeaderLineno a local variable.

http://reviews.llvm.org/D13576

As we are using hierarchical profile, there is no need to keep HeaderLineno a member variable. This is because each level of the inline stack will have its own header lineno. One should use the head lineno of its own inline stack level instead of the actual symbol.

llvm-svn: 249848
This commit is contained in:
Dehao Chen 2015-10-09 16:50:16 +00:00
parent 848055ad16
commit 41dc5a6e86
1 changed files with 9 additions and 13 deletions

View File

@ -123,10 +123,6 @@ protected:
bool propagateThroughEdges(Function &F); bool propagateThroughEdges(Function &F);
void computeDominanceAndLoopInfo(Function &F); void computeDominanceAndLoopInfo(Function &F);
/// \brief Line number for the function header. Used to compute absolute
/// line numbers from the relative line numbers found in the profile.
unsigned HeaderLineno;
/// \brief Map basic blocks to their computed weights. /// \brief Map basic blocks to their computed weights.
/// ///
/// The weight of a basic block is defined to be the maximum /// The weight of a basic block is defined to be the maximum
@ -226,14 +222,16 @@ SampleProfileLoader::getInstWeight(const Instruction &Inst) const {
if (!DLoc) if (!DLoc)
return std::error_code(); return std::error_code();
unsigned Lineno = DLoc.getLine();
if (Lineno < HeaderLineno)
return std::error_code();
const DILocation *DIL = DLoc;
const FunctionSamples *FS = findFunctionSamples(Inst); const FunctionSamples *FS = findFunctionSamples(Inst);
if (!FS) if (!FS)
return std::error_code(); return std::error_code();
const DILocation *DIL = DLoc;
unsigned Lineno = DLoc.getLine();
unsigned HeaderLineno = DIL->getScope()->getSubprogram()->getLine();
if (Lineno < HeaderLineno)
return std::error_code();
ErrorOr<unsigned> R = ErrorOr<unsigned> R =
FS->findSamplesAt(Lineno - HeaderLineno, DIL->getDiscriminator()); FS->findSamplesAt(Lineno - HeaderLineno, DIL->getDiscriminator());
if (R) if (R)
@ -837,13 +835,11 @@ void SampleProfileLoader::computeDominanceAndLoopInfo(Function &F) {
bool SampleProfileLoader::emitAnnotations(Function &F) { bool SampleProfileLoader::emitAnnotations(Function &F) {
bool Changed = false; bool Changed = false;
// Initialize invariants used during computation and propagation. if (getFunctionLoc(F) == 0)
HeaderLineno = getFunctionLoc(F);
if (HeaderLineno == 0)
return false; return false;
DEBUG(dbgs() << "Line number for the first instruction in " << F.getName() DEBUG(dbgs() << "Line number for the first instruction in " << F.getName()
<< ": " << HeaderLineno << "\n"); << ": " << getFunctionLoc(F) << "\n");
Changed |= inlineHotFunctions(F); Changed |= inlineHotFunctions(F);