mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
abd471f672
Summary: Get rid of OpcodeName. To remove the opcode name from an old file: ``` cat old_file | sed '/opcode_name.*/d' ``` Reviewers: gchatelet Subscribers: tschuett, llvm-commits Differential Revision: https://reviews.llvm.org/D48121 llvm-svn: 334691
135 lines
4.5 KiB
C++
135 lines
4.5 KiB
C++
//===-- BenchmarkResultTest.cpp ---------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "BenchmarkResult.h"
|
|
#include "llvm/ADT/SmallString.h"
|
|
#include "llvm/Support/Error.h"
|
|
#include "llvm/Support/Path.h"
|
|
#include "llvm/Support/YAMLTraits.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
#include "gmock/gmock.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using ::testing::AllOf;
|
|
using ::testing::Eq;
|
|
using ::testing::get;
|
|
using ::testing::Pointwise;
|
|
using ::testing::Property;
|
|
|
|
namespace exegesis {
|
|
|
|
bool operator==(const BenchmarkMeasure &A, const BenchmarkMeasure &B) {
|
|
return std::tie(A.Key, A.Value) == std::tie(B.Key, B.Value);
|
|
}
|
|
|
|
static std::string Dump(const llvm::MCInst &McInst) {
|
|
std::string Buffer;
|
|
llvm::raw_string_ostream OS(Buffer);
|
|
McInst.print(OS);
|
|
return Buffer;
|
|
}
|
|
|
|
MATCHER(EqMCInst, "") {
|
|
const std::string Lhs = Dump(get<0>(arg));
|
|
const std::string Rhs = Dump(get<1>(arg));
|
|
if (Lhs != Rhs) {
|
|
*result_listener << Lhs << " <=> " << Rhs;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
namespace {
|
|
|
|
static constexpr const unsigned kInstrId = 5;
|
|
static constexpr const char kInstrName[] = "Instruction5";
|
|
static constexpr const unsigned kReg1Id = 1;
|
|
static constexpr const char kReg1Name[] = "Reg1";
|
|
static constexpr const unsigned kReg2Id = 2;
|
|
static constexpr const char kReg2Name[] = "Reg2";
|
|
|
|
TEST(BenchmarkResultTest, WriteToAndReadFromDisk) {
|
|
llvm::ExitOnError ExitOnErr;
|
|
BenchmarkResultContext Ctx;
|
|
Ctx.addInstrEntry(kInstrId, kInstrName);
|
|
Ctx.addRegEntry(kReg1Id, kReg1Name);
|
|
Ctx.addRegEntry(kReg2Id, kReg2Name);
|
|
|
|
InstructionBenchmark ToDisk;
|
|
|
|
ToDisk.Key.Instructions.push_back(llvm::MCInstBuilder(kInstrId)
|
|
.addReg(kReg1Id)
|
|
.addReg(kReg2Id)
|
|
.addImm(123)
|
|
.addFPImm(0.5));
|
|
ToDisk.Key.Config = "config";
|
|
ToDisk.Mode = InstructionBenchmark::Latency;
|
|
ToDisk.CpuName = "cpu_name";
|
|
ToDisk.LLVMTriple = "llvm_triple";
|
|
ToDisk.NumRepetitions = 1;
|
|
ToDisk.Measurements.push_back(BenchmarkMeasure{"a", 1, "debug a"});
|
|
ToDisk.Measurements.push_back(BenchmarkMeasure{"b", 2, ""});
|
|
ToDisk.Error = "error";
|
|
ToDisk.Info = "info";
|
|
|
|
llvm::SmallString<64> Filename;
|
|
std::error_code EC;
|
|
EC = llvm::sys::fs::createUniqueDirectory("BenchmarkResultTestDir", Filename);
|
|
ASSERT_FALSE(EC);
|
|
llvm::sys::path::append(Filename, "data.yaml");
|
|
ExitOnErr(ToDisk.writeYaml(Ctx, Filename));
|
|
|
|
{
|
|
// One-element version.
|
|
const auto FromDisk =
|
|
ExitOnErr(InstructionBenchmark::readYaml(Ctx, Filename));
|
|
|
|
EXPECT_THAT(FromDisk.Key.Instructions,
|
|
Pointwise(EqMCInst(), ToDisk.Key.Instructions));
|
|
EXPECT_EQ(FromDisk.Key.Config, ToDisk.Key.Config);
|
|
EXPECT_EQ(FromDisk.Mode, ToDisk.Mode);
|
|
EXPECT_EQ(FromDisk.CpuName, ToDisk.CpuName);
|
|
EXPECT_EQ(FromDisk.LLVMTriple, ToDisk.LLVMTriple);
|
|
EXPECT_EQ(FromDisk.NumRepetitions, ToDisk.NumRepetitions);
|
|
EXPECT_THAT(FromDisk.Measurements, ToDisk.Measurements);
|
|
EXPECT_THAT(FromDisk.Error, ToDisk.Error);
|
|
EXPECT_EQ(FromDisk.Info, ToDisk.Info);
|
|
}
|
|
{
|
|
// Vector version.
|
|
const auto FromDiskVector =
|
|
ExitOnErr(InstructionBenchmark::readYamls(Ctx, Filename));
|
|
ASSERT_EQ(FromDiskVector.size(), size_t{1});
|
|
const auto FromDisk = FromDiskVector[0];
|
|
EXPECT_THAT(FromDisk.Key.Instructions,
|
|
Pointwise(EqMCInst(), ToDisk.Key.Instructions));
|
|
EXPECT_EQ(FromDisk.Key.Config, ToDisk.Key.Config);
|
|
EXPECT_EQ(FromDisk.Mode, ToDisk.Mode);
|
|
EXPECT_EQ(FromDisk.CpuName, ToDisk.CpuName);
|
|
EXPECT_EQ(FromDisk.LLVMTriple, ToDisk.LLVMTriple);
|
|
EXPECT_EQ(FromDisk.NumRepetitions, ToDisk.NumRepetitions);
|
|
EXPECT_THAT(FromDisk.Measurements, ToDisk.Measurements);
|
|
EXPECT_THAT(FromDisk.Error, ToDisk.Error);
|
|
EXPECT_EQ(FromDisk.Info, ToDisk.Info);
|
|
}
|
|
}
|
|
|
|
TEST(BenchmarkResultTest, BenchmarkMeasureStats) {
|
|
BenchmarkMeasureStats Stats;
|
|
Stats.push(BenchmarkMeasure{"a", 0.5, "debug a"});
|
|
Stats.push(BenchmarkMeasure{"a", 1.5, "debug a"});
|
|
Stats.push(BenchmarkMeasure{"a", -1.0, "debug a"});
|
|
Stats.push(BenchmarkMeasure{"a", 0.0, "debug a"});
|
|
EXPECT_EQ(Stats.min(), -1.0);
|
|
EXPECT_EQ(Stats.max(), 1.5);
|
|
EXPECT_EQ(Stats.avg(), 0.25); // (0.5+1.5-1.0+0.0) / 4
|
|
}
|
|
} // namespace
|
|
} // namespace exegesis
|