|  | //=-- 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); | 
|  | } |