mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-03 11:26:08 +00:00

Split out of D140908 as suggested, and added unit testing. Differential Revision: https://reviews.llvm.org/D144314
58 lines
2.0 KiB
C++
58 lines
2.0 KiB
C++
//===- ModuleSummaryIndexTest.cpp - ModuleSummaryIndex Unit Tests-============//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/IR/ModuleSummaryIndex.h"
|
|
#include "llvm/AsmParser/Parser.h"
|
|
#include "llvm/Support/SourceMgr.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace llvm;
|
|
|
|
namespace {
|
|
|
|
static std::unique_ptr<ModuleSummaryIndex> makeLLVMIndex(const char *Summary) {
|
|
SMDiagnostic Err;
|
|
std::unique_ptr<ModuleSummaryIndex> Index =
|
|
parseSummaryIndexAssemblyString(Summary, Err);
|
|
if (!Index)
|
|
Err.print("ModuleSummaryIndexTest", errs());
|
|
return Index;
|
|
}
|
|
|
|
TEST(ModuleSummaryIndexTest, MemProfSummaryPrinting) {
|
|
std::unique_ptr<ModuleSummaryIndex> Index = makeLLVMIndex(R"Summary(
|
|
^0 = module: (path: "test.o", hash: (0, 0, 0, 0, 0))
|
|
^1 = gv: (guid: 23, summaries: (function: (module: ^0, flags: (linkage: external), insts: 2, allocs: ((versions: (none), memProf: ((type: notcold, stackIds: (1, 2, 3, 4)), (type: cold, stackIds: (1, 2, 3, 5))))))))
|
|
^2 = gv: (guid: 25, summaries: (function: (module: ^0, flags: (linkage: external), insts: 22, calls: ((callee: ^1)), callsites: ((callee: ^1, clones: (0), stackIds: (3, 4)), (callee: ^1, clones: (0), stackIds: (3, 5))))))
|
|
)Summary");
|
|
|
|
std::string Data;
|
|
raw_string_ostream OS(Data);
|
|
|
|
ASSERT_NE(Index, nullptr);
|
|
auto *CallsiteSummary =
|
|
cast<FunctionSummary>(Index->getGlobalValueSummary(/*guid=*/25));
|
|
for (auto &CI : CallsiteSummary->callsites())
|
|
OS << "\n" << CI;
|
|
|
|
auto *AllocSummary =
|
|
cast<FunctionSummary>(Index->getGlobalValueSummary(/*guid=*/23));
|
|
for (auto &AI : AllocSummary->allocs())
|
|
OS << "\n" << AI;
|
|
|
|
OS.flush();
|
|
EXPECT_EQ(Data, R"(
|
|
Callee: 23 Clones: 0 StackIds: 2, 3
|
|
Callee: 23 Clones: 0 StackIds: 2, 4
|
|
Versions: 0 MIB:
|
|
AllocType 1 StackIds: 0, 1, 2, 3
|
|
AllocType 2 StackIds: 0, 1, 2, 4
|
|
)");
|
|
}
|
|
} // end anonymous namespace
|