| 1 | //=-- MemProfSummaryBuilder.cpp - MemProf summary building ---------------=// |
| 2 | // |
| 3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| 4 | // See https://llvm.org/LICENSE.txt for license information. |
| 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| 6 | // |
| 7 | //===----------------------------------------------------------------------===// |
| 8 | // |
| 9 | // This file contains MemProf summary builder. |
| 10 | // |
| 11 | //===----------------------------------------------------------------------===// |
| 12 | |
| 13 | #include "llvm/ProfileData/MemProfSummaryBuilder.h" |
| 14 | #include "llvm/ProfileData/MemProfCommon.h" |
| 15 | |
| 16 | using namespace llvm; |
| 17 | using namespace llvm::memprof; |
| 18 | |
| 19 | std::unique_ptr<MemProfSummary> MemProfSummaryBuilder::getSummary() { |
| 20 | return std::make_unique<MemProfSummary>(args&: NumContexts, args&: NumColdContexts, |
| 21 | args&: NumHotContexts, args&: MaxColdTotalSize, |
| 22 | args&: MaxWarmTotalSize, args&: MaxHotTotalSize); |
| 23 | } |
| 24 | |
| 25 | void MemProfSummaryBuilder::addRecord(uint64_t CSId, |
| 26 | const PortableMemInfoBlock &Info) { |
| 27 | auto I = Contexts.insert(V: CSId); |
| 28 | if (!I.second) |
| 29 | return; |
| 30 | NumContexts++; |
| 31 | auto AllocType = getAllocType(TotalLifetimeAccessDensity: Info.getTotalLifetimeAccessDensity(), |
| 32 | AllocCount: Info.getAllocCount(), TotalLifetime: Info.getTotalLifetime()); |
| 33 | auto TotalSize = Info.getTotalSize(); |
| 34 | switch (AllocType) { |
| 35 | case AllocationType::Cold: |
| 36 | NumColdContexts++; |
| 37 | if (TotalSize > MaxColdTotalSize) |
| 38 | MaxColdTotalSize = TotalSize; |
| 39 | break; |
| 40 | case AllocationType::NotCold: |
| 41 | if (TotalSize > MaxWarmTotalSize) |
| 42 | MaxWarmTotalSize = TotalSize; |
| 43 | break; |
| 44 | case AllocationType::Hot: |
| 45 | NumHotContexts++; |
| 46 | if (TotalSize > MaxHotTotalSize) |
| 47 | MaxHotTotalSize = TotalSize; |
| 48 | break; |
| 49 | default: |
| 50 | assert(false); |
| 51 | } |
| 52 | } |
| 53 | |
| 54 | void MemProfSummaryBuilder::addRecord(const IndexedMemProfRecord &Record) { |
| 55 | for (auto &Alloc : Record.AllocSites) |
| 56 | addRecord(CSId: Alloc.CSId, Info: Alloc.Info); |
| 57 | } |
| 58 | |
| 59 | void MemProfSummaryBuilder::addRecord(const MemProfRecord &Record) { |
| 60 | for (auto &Alloc : Record.AllocSites) |
| 61 | addRecord(CSId: computeFullStackId(CallStack: Alloc.CallStack), Info: Alloc.Info); |
| 62 | } |
| 63 | |