[llvm] [ctx_prof] Extend `WorkloadImportsManager` to use the contextual profile (PR #98682)
Teresa Johnson via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 17 12:56:29 PDT 2024
================
@@ -672,14 +670,78 @@ class WorkloadImportsManager : public ModuleImportsManager {
});
}
}
+
+ void loadFromCtxProf() {
+ std::error_code EC;
+ auto BufferOrErr = MemoryBuffer::getFileOrSTDIN(ContextualProfile);
+ if (std::error_code EC = BufferOrErr.getError()) {
+ report_fatal_error("Failed to open contextual profile file");
+ return;
+ }
+ auto Buffer = std::move(BufferOrErr.get());
+
+ BitstreamCursor Cursor(*Buffer);
+ PGOCtxProfileReader Reader(Cursor);
+ auto Ctx = Reader.loadContexts();
+ if (!Ctx) {
+ report_fatal_error("Failed to parse contextual profiles");
+ return;
+ }
+ const auto &CtxMap = *Ctx;
+ DenseSet<GlobalValue::GUID> ContainedGUIDs;
+ for (const auto &[RootGuid, Root] : CtxMap) {
+ // Avoid ContainedGUIDs to get in/out of scope. Reuse its memory for
+ // subsequent roots, but clear its contents.
+ ContainedGUIDs.clear();
+
+ auto RootVI = Index.getValueInfo(RootGuid);
+ if (!RootVI) {
+ LLVM_DEBUG(dbgs() << "[Workload] Root " << RootGuid
+ << " not found in this linkage unit.\n");
+ continue;
+ }
+ if (RootVI.getSummaryList().size() != 1) {
+ LLVM_DEBUG(dbgs() << "[Workload] Root " << RootGuid
+ << " should have exactly one summary, but has "
+ << RootVI.getSummaryList().size() << ". Skipping.\n");
+ continue;
+ }
+ StringRef RootDefiningModule =
+ RootVI.getSummaryList().front()->modulePath();
+ LLVM_DEBUG(dbgs() << "[Workload] Root defining module for " << RootGuid
+ << " is : " << RootDefiningModule << "\n");
+ auto &Set = Workloads[RootDefiningModule];
+ Root.getContainedGuids(ContainedGUIDs);
+ for (auto Guid : ContainedGUIDs)
+ if (auto VI = Index.getValueInfo(Guid))
+ Set.insert(VI);
----------------
teresajohnson wrote:
The json case has some debug printing of the eventual Set contents - needed here too?
https://github.com/llvm/llvm-project/pull/98682
More information about the llvm-commits
mailing list