brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 2faf49e Raw
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