[PATCH] D144500: [BOLT] initial version of stale profile matching
Amir Ayupov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu May 11 18:01:39 PDT 2023
Amir added a comment.
I'd rather move changes to llvm/lib/Transforms/Utils/SampleProfileInference.cpp to a separate diff to test with existing users and land separately as the changes don't seem to be specific to BOLT.
================
Comment at: bolt/lib/Profile/StaleProfileMatching.cpp:138
+/// and initialize its jumps and metadata.
+void createFlowFunction(const BinaryFunction::BasicBlockOrderType &BlockOrder,
+ FlowFunction &Func) {
----------------
Can we return FlowFunction object from this function?
================
Comment at: bolt/lib/Profile/StaleProfileMatching.cpp:146
+ // Create FlowBlock for every basic block in the binary function
+ DenseMap<const BinaryBasicBlock *, uint64_t> BlockIndex;
+ for (const BinaryBasicBlock *BB : BlockOrder) {
----------------
Do we really need this? since we're calling updateLayoutIndices, we have BB->getLayoutIndex().
================
Comment at: bolt/lib/Profile/StaleProfileMatching.cpp:285-287
+ if (MatchedSrcBlock != nullptr) {
+ OutWeight[MatchedSrcBlock->Index] += YamlSI.Count;
+ }
----------------
================
Comment at: bolt/lib/Profile/StaleProfileMatching.cpp:289-291
+ if (MatchedDstBlock != nullptr) {
+ InWeight[MatchedDstBlock->Index] += YamlSI.Count;
+ }
----------------
================
Comment at: bolt/lib/Profile/StaleProfileMatching.cpp:312
+
+ // Start bfs from the source
+ std::queue<uint64_t> Queue;
----------------
Can we use llvm/ADT/GraphTraits + BreadthFirstIterator to avoid reimplementing this?
================
Comment at: bolt/lib/Profile/StaleProfileMatching.cpp:383-386
+ bool HasExitBlocks = false;
+ for (size_t I = 1; I < Func.Blocks.size(); I++) {
+ if (Func.Blocks[I].isExit()) {
+ HasExitBlocks = true;
----------------
Please use `llvm::any_of`
================
Comment at: bolt/lib/Profile/StaleProfileMatching.cpp:505
+ setOrUpdateAnnotation(Instr, "CTCTakenCount", Block.Flow);
+ setOrUpdateAnnotation(Instr, "CTCMispredCount", 0);
+ } else if (BC.MIB->isCall(Instr)) {
----------------
It's just removing CTCMispredCount annotation if it exists.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D144500/new/
https://reviews.llvm.org/D144500
More information about the llvm-commits
mailing list