| //=-- MemProfSummaryBuilder.cpp - MemProf summary building ---------------=// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file contains MemProf summary builder. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/ProfileData/MemProfSummaryBuilder.h" |
| #include "llvm/ProfileData/MemProfCommon.h" |
| |
| using namespace llvm; |
| using namespace llvm::memprof; |
| |
| std::unique_ptr<MemProfSummary> MemProfSummaryBuilder::getSummary() { |
| return std::make_unique<MemProfSummary>(NumContexts, NumColdContexts, |
| NumHotContexts, MaxColdTotalSize, |
| MaxWarmTotalSize, MaxHotTotalSize); |
| } |
| |
| void MemProfSummaryBuilder::addRecord(uint64_t CSId, |
| const PortableMemInfoBlock &Info) { |
| auto I = Contexts.insert(CSId); |
| if (!I.second) |
| return; |
| NumContexts++; |
| auto AllocType = getAllocType(Info.getTotalLifetimeAccessDensity(), |
| Info.getAllocCount(), Info.getTotalLifetime()); |
| auto TotalSize = Info.getTotalSize(); |
| switch (AllocType) { |
| case AllocationType::Cold: |
| NumColdContexts++; |
| if (TotalSize > MaxColdTotalSize) |
| MaxColdTotalSize = TotalSize; |
| break; |
| case AllocationType::NotCold: |
| if (TotalSize > MaxWarmTotalSize) |
| MaxWarmTotalSize = TotalSize; |
| break; |
| case AllocationType::Hot: |
| NumHotContexts++; |
| if (TotalSize > MaxHotTotalSize) |
| MaxHotTotalSize = TotalSize; |
| break; |
| default: |
| assert(false); |
| } |
| } |
| |
| void MemProfSummaryBuilder::addRecord(const IndexedMemProfRecord &Record) { |
| for (auto &Alloc : Record.AllocSites) |
| addRecord(Alloc.CSId, Alloc.Info); |
| } |
| |
| void MemProfSummaryBuilder::addRecord(const MemProfRecord &Record) { |
| for (auto &Alloc : Record.AllocSites) |
| addRecord(computeFullStackId(Alloc.CallStack), Alloc.Info); |
| } |