diff options
author | Amir Ayupov <aaupov@fb.com> | 2024-05-01 21:53:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-01 21:53:49 +0200 |
commit | f2d71305792dbcc48c67d9cfde4d8c33c582fb74 (patch) | |
tree | 1fb5661ad413a6773fa34d9be36672fa2c52ef30 | |
parent | fc382db239abea827e7f2ad7a0e18eee17ff5709 (diff) |
[BOLT][NFC] Simplify DataAggregator::getFallthroughsInTrace (#90752)
-rw-r--r-- | bolt/include/bolt/Profile/DataAggregator.h | 8 | ||||
-rw-r--r-- | bolt/lib/Profile/DataAggregator.cpp | 36 |
2 files changed, 14 insertions, 30 deletions
diff --git a/bolt/include/bolt/Profile/DataAggregator.h b/bolt/include/bolt/Profile/DataAggregator.h index 84f76caae9db..f2fa59bcaa1a 100644 --- a/bolt/include/bolt/Profile/DataAggregator.h +++ b/bolt/include/bolt/Profile/DataAggregator.h @@ -198,14 +198,8 @@ private: /// A trace is region of code executed between two LBR entries supplied in /// execution order. /// - /// Return true if the trace is valid, false otherwise. - bool - recordTrace(BinaryFunction &BF, const LBREntry &First, const LBREntry &Second, - uint64_t Count, - SmallVector<std::pair<uint64_t, uint64_t>, 16> &Branches) const; - /// Return a vector of offsets corresponding to a trace in a function - /// (see recordTrace() above). + /// if the trace is valid, std::nullopt otherwise. std::optional<SmallVector<std::pair<uint64_t, uint64_t>, 16>> getFallthroughsInTrace(BinaryFunction &BF, const LBREntry &First, const LBREntry &Second, uint64_t Count = 1) const; diff --git a/bolt/lib/Profile/DataAggregator.cpp b/bolt/lib/Profile/DataAggregator.cpp index 70e324cc0165..5108392c824c 100644 --- a/bolt/lib/Profile/DataAggregator.cpp +++ b/bolt/lib/Profile/DataAggregator.cpp @@ -861,14 +861,17 @@ bool DataAggregator::doTrace(const LBREntry &First, const LBREntry &Second, return true; } -bool DataAggregator::recordTrace( - BinaryFunction &BF, const LBREntry &FirstLBR, const LBREntry &SecondLBR, - uint64_t Count, - SmallVector<std::pair<uint64_t, uint64_t>, 16> &Branches) const { +std::optional<SmallVector<std::pair<uint64_t, uint64_t>, 16>> +DataAggregator::getFallthroughsInTrace(BinaryFunction &BF, + const LBREntry &FirstLBR, + const LBREntry &SecondLBR, + uint64_t Count) const { + SmallVector<std::pair<uint64_t, uint64_t>, 16> Branches; + BinaryContext &BC = BF.getBinaryContext(); if (!BF.isSimple()) - return false; + return std::nullopt; assert(BF.hasCFG() && "can only record traces in CFG state"); @@ -877,13 +880,13 @@ bool DataAggregator::recordTrace( const uint64_t To = SecondLBR.From - BF.getAddress(); if (From > To) - return false; + return std::nullopt; const BinaryBasicBlock *FromBB = BF.getBasicBlockContainingOffset(From); const BinaryBasicBlock *ToBB = BF.getBasicBlockContainingOffset(To); if (!FromBB || !ToBB) - return false; + return std::nullopt; // Adjust FromBB if the first LBR is a return from the last instruction in // the previous block (that instruction should be a call). @@ -907,7 +910,7 @@ bool DataAggregator::recordTrace( // within the same basic block, e.g. when two call instructions are in the // same block. In this case we skip the processing. if (FromBB == ToBB) - return true; + return Branches; // Process blocks in the original layout order. BinaryBasicBlock *BB = BF.getLayout().getBlock(FromBB->getIndex()); @@ -921,7 +924,7 @@ bool DataAggregator::recordTrace( LLVM_DEBUG(dbgs() << "no fall-through for the trace:\n" << " " << FirstLBR << '\n' << " " << SecondLBR << '\n'); - return false; + return std::nullopt; } const MCInst *Instr = BB->getLastNonPseudoInstr(); @@ -945,20 +948,7 @@ bool DataAggregator::recordTrace( BI.Count += Count; } - return true; -} - -std::optional<SmallVector<std::pair<uint64_t, uint64_t>, 16>> -DataAggregator::getFallthroughsInTrace(BinaryFunction &BF, - const LBREntry &FirstLBR, - const LBREntry &SecondLBR, - uint64_t Count) const { - SmallVector<std::pair<uint64_t, uint64_t>, 16> Res; - - if (!recordTrace(BF, FirstLBR, SecondLBR, Count, Res)) - return std::nullopt; - - return Res; + return Branches; } bool DataAggregator::recordEntry(BinaryFunction &BF, uint64_t To, bool Mispred, |