63 lines · cpp
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-exception6//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 16using namespace llvm;17using namespace llvm::memprof;18 19std::unique_ptr<MemProfSummary> MemProfSummaryBuilder::getSummary() {20 return std::make_unique<MemProfSummary>(NumContexts, NumColdContexts,21 NumHotContexts, MaxColdTotalSize,22 MaxWarmTotalSize, MaxHotTotalSize);23}24 25void MemProfSummaryBuilder::addRecord(uint64_t CSId,26 const PortableMemInfoBlock &Info) {27 auto I = Contexts.insert(CSId);28 if (!I.second)29 return;30 NumContexts++;31 auto AllocType = getAllocType(Info.getTotalLifetimeAccessDensity(),32 Info.getAllocCount(), 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 54void MemProfSummaryBuilder::addRecord(const IndexedMemProfRecord &Record) {55 for (auto &Alloc : Record.AllocSites)56 addRecord(Alloc.CSId, Alloc.Info);57}58 59void MemProfSummaryBuilder::addRecord(const MemProfRecord &Record) {60 for (auto &Alloc : Record.AllocSites)61 addRecord(computeFullStackId(Alloc.CallStack), Alloc.Info);62}63