@@ -217,7 +217,6 @@ class SampleProfileLoader {
217
217
void buildEdges (Function &F);
218
218
bool propagateThroughEdges (Function &F, bool UpdateBlockCount);
219
219
void computeDominanceAndLoopInfo (Function &F);
220
- unsigned getOffset (const DILocation *DIL) const ;
221
220
void clearFunctionData ();
222
221
223
222
// / \brief Map basic blocks to their computed weights.
@@ -473,13 +472,6 @@ void SampleProfileLoader::clearFunctionData() {
473
472
CoverageTracker.clear ();
474
473
}
475
474
476
- // / Returns the line offset to the start line of the subprogram.
477
- // / We assume that a single function will not exceed 65535 LOC.
478
- unsigned SampleProfileLoader::getOffset (const DILocation *DIL) const {
479
- return (DIL->getLine () - DIL->getScope ()->getSubprogram ()->getLine ()) &
480
- 0xffff ;
481
- }
482
-
483
475
#ifndef NDEBUG
484
476
// / \brief Print the weight of edge \p E on stream \p OS.
485
477
// /
@@ -549,7 +541,7 @@ ErrorOr<uint64_t> SampleProfileLoader::getInstWeight(const Instruction &Inst) {
549
541
return 0 ;
550
542
551
543
const DILocation *DIL = DLoc;
552
- uint32_t LineOffset = getOffset (DIL);
544
+ uint32_t LineOffset = FunctionSamples:: getOffset (DIL);
553
545
uint32_t Discriminator = DIL->getBaseDiscriminator ();
554
546
ErrorOr<uint64_t > R = FS->findSamplesAt (LineOffset, Discriminator);
555
547
if (R) {
@@ -649,8 +641,9 @@ SampleProfileLoader::findCalleeFunctionSamples(const Instruction &Inst) const {
649
641
if (FS == nullptr )
650
642
return nullptr ;
651
643
652
- return FS->findFunctionSamplesAt (
653
- LineLocation (getOffset (DIL), DIL->getBaseDiscriminator ()), CalleeName);
644
+ return FS->findFunctionSamplesAt (LineLocation (FunctionSamples::getOffset (DIL),
645
+ DIL->getBaseDiscriminator ()),
646
+ CalleeName);
654
647
}
655
648
656
649
// / Returns a vector of FunctionSamples that are the indirect call targets
@@ -670,16 +663,16 @@ SampleProfileLoader::findIndirectCallFunctionSamples(
670
663
if (FS == nullptr )
671
664
return R;
672
665
673
- uint32_t LineOffset = getOffset (DIL);
666
+ uint32_t LineOffset = FunctionSamples:: getOffset (DIL);
674
667
uint32_t Discriminator = DIL->getBaseDiscriminator ();
675
668
676
669
auto T = FS->findCallTargetMapAt (LineOffset, Discriminator);
677
670
Sum = 0 ;
678
671
if (T)
679
672
for (const auto &T_C : T.get ())
680
673
Sum += T_C.second ;
681
- if (const FunctionSamplesMap *M = FS->findFunctionSamplesMapAt (
682
- LineLocation ( getOffset (DIL), DIL->getBaseDiscriminator ()))) {
674
+ if (const FunctionSamplesMap *M = FS->findFunctionSamplesMapAt (LineLocation (
675
+ FunctionSamples:: getOffset (DIL), DIL->getBaseDiscriminator ()))) {
683
676
if (M->empty ())
684
677
return R;
685
678
for (const auto &NameFS : *M) {
@@ -710,20 +703,7 @@ SampleProfileLoader::findFunctionSamples(const Instruction &Inst) const {
710
703
if (!DIL)
711
704
return Samples;
712
705
713
- const DILocation *PrevDIL = DIL;
714
- for (DIL = DIL->getInlinedAt (); DIL; DIL = DIL->getInlinedAt ()) {
715
- S.push_back (std::make_pair (
716
- LineLocation (getOffset (DIL), DIL->getBaseDiscriminator ()),
717
- PrevDIL->getScope ()->getSubprogram ()->getLinkageName ()));
718
- PrevDIL = DIL;
719
- }
720
- if (S.size () == 0 )
721
- return Samples;
722
- const FunctionSamples *FS = Samples;
723
- for (int i = S.size () - 1 ; i >= 0 && FS != nullptr ; i--) {
724
- FS = FS->findFunctionSamplesAt (S[i].first , S[i].second );
725
- }
726
- return FS;
706
+ return Samples->findFunctionSamples (DIL);
727
707
}
728
708
729
709
bool SampleProfileLoader::inlineCallInstruction (Instruction *I) {
@@ -1281,7 +1261,7 @@ void SampleProfileLoader::propagateWeights(Function &F) {
1281
1261
if (!DLoc)
1282
1262
continue ;
1283
1263
const DILocation *DIL = DLoc;
1284
- uint32_t LineOffset = getOffset (DIL);
1264
+ uint32_t LineOffset = FunctionSamples:: getOffset (DIL);
1285
1265
uint32_t Discriminator = DIL->getBaseDiscriminator ();
1286
1266
1287
1267
const FunctionSamples *FS = findFunctionSamples (I);
0 commit comments