mirror of
https://github.com/intel/llvm.git
synced 2026-01-27 06:06:34 +08:00
[llvm-exegesis] Allow setting dump file name
This will be used for writing test cases. ~~ Huawei RRI, OS Lab Reviewed By: courbet Differential Revision: https://reviews.llvm.org/D147700
This commit is contained in:
@@ -1,23 +1,24 @@
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=assemble-measured-code -opcode-name=ADDPSrr -repetition-mode=duplicate -dump-object-to-disk=1 2>&1 | FileCheck %s --check-prefix=CHECK-ON
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=assemble-measured-code -opcode-name=ADDPSrr -repetition-mode=loop -dump-object-to-disk=1 2>&1 | FileCheck %s --check-prefix=CHECK-ON
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=assemble-measured-code -opcode-name=ADDPSrr -repetition-mode=duplicate -dump-object-to-disk=0 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=assemble-measured-code -opcode-name=ADDPSrr -repetition-mode=loop -dump-object-to-disk=0 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=assemble-measured-code -opcode-name=ADDPSrr -repetition-mode=duplicate -dump-object-to-disk 2>&1 | FileCheck %s --check-prefix=CHECK-ON
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=assemble-measured-code -opcode-name=ADDPSrr -repetition-mode=loop -dump-object-to-disk 2>&1 | FileCheck %s --check-prefix=CHECK-ON
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=assemble-measured-code -opcode-name=ADDPSrr -repetition-mode=duplicate 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=assemble-measured-code -opcode-name=ADDPSrr -repetition-mode=loop 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=assemble-measured-code -opcode-name=ADDPSrr -repetition-mode=duplicate 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=assemble-measured-code -opcode-name=ADDPSrr -repetition-mode=loop 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-and-assemble-snippet -opcode-name=ADDPSrr -repetition-mode=duplicate -dump-object-to-disk=1 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-and-assemble-snippet -opcode-name=ADDPSrr -repetition-mode=loop -dump-object-to-disk=1 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-and-assemble-snippet -opcode-name=ADDPSrr -repetition-mode=duplicate -dump-object-to-disk=0 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-and-assemble-snippet -opcode-name=ADDPSrr -repetition-mode=loop -dump-object-to-disk=0 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-and-assemble-snippet -opcode-name=ADDPSrr -repetition-mode=duplicate 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-and-assemble-snippet -opcode-name=ADDPSrr -repetition-mode=loop 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-and-assemble-snippet -opcode-name=ADDPSrr -repetition-mode=duplicate 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-and-assemble-snippet -opcode-name=ADDPSrr -repetition-mode=loop 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-snippet -opcode-name=ADDPSrr -repetition-mode=duplicate -dump-object-to-disk=1 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-snippet -opcode-name=ADDPSrr -repetition-mode=loop -dump-object-to-disk=1 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-snippet -opcode-name=ADDPSrr -repetition-mode=duplicate -dump-object-to-disk=0 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-snippet -opcode-name=ADDPSrr -repetition-mode=loop -dump-object-to-disk=0 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-snippet -opcode-name=ADDPSrr -repetition-mode=duplicate 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-snippet -opcode-name=ADDPSrr -repetition-mode=loop 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-snippet -opcode-name=ADDPSrr -repetition-mode=duplicate 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=prepare-snippet -opcode-name=ADDPSrr -repetition-mode=loop 2>&1 | FileCheck %s --check-prefix=CHECK-OFF
|
||||
|
||||
# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --benchmark-phase=assemble-measured-code -opcode-name=ADDPSrr -repetition-mode=duplicate -dump-object-to-disk=%t.mydmpfile.o 2>&1 | FileCheck %s --check-prefix=DUMP-FILE-NAME
|
||||
# RUN: llvm-objdump -d %t.mydmpfile.o | FileCheck %s --check-prefix=ASM
|
||||
CHECK-ON: Check generated assembly with
|
||||
CHECK-OFF-NOT: Check generated assembly with
|
||||
DUMP-FILE-NAME: Check generated assembly with: {{.*}}objdump -d {{.*}}mydmpfile
|
||||
ASM: addps
|
||||
ASM: retq
|
||||
|
||||
@@ -193,15 +193,16 @@ BenchmarkRunner::getRunnableConfiguration(
|
||||
return std::move(RC);
|
||||
}
|
||||
|
||||
Expected<Benchmark>
|
||||
BenchmarkRunner::runConfiguration(RunnableConfiguration &&RC,
|
||||
bool DumpObjectToDisk) const {
|
||||
Expected<Benchmark> BenchmarkRunner::runConfiguration(
|
||||
RunnableConfiguration &&RC,
|
||||
const std::optional<StringRef> &DumpFile) const {
|
||||
Benchmark &InstrBenchmark = RC.InstrBenchmark;
|
||||
object::OwningBinary<object::ObjectFile> &ObjectFile = RC.ObjectFile;
|
||||
|
||||
if (DumpObjectToDisk &&
|
||||
BenchmarkPhaseSelector > BenchmarkPhaseSelectorE::PrepareAndAssembleSnippet) {
|
||||
auto ObjectFilePath = writeObjectFile(ObjectFile.getBinary()->getData());
|
||||
if (DumpFile && BenchmarkPhaseSelector >
|
||||
BenchmarkPhaseSelectorE::PrepareAndAssembleSnippet) {
|
||||
auto ObjectFilePath =
|
||||
writeObjectFile(ObjectFile.getBinary()->getData(), *DumpFile);
|
||||
if (Error E = ObjectFilePath.takeError()) {
|
||||
InstrBenchmark.Error = toString(std::move(E));
|
||||
return std::move(InstrBenchmark);
|
||||
@@ -238,11 +239,16 @@ BenchmarkRunner::runConfiguration(RunnableConfiguration &&RC,
|
||||
return std::move(InstrBenchmark);
|
||||
}
|
||||
|
||||
Expected<std::string> BenchmarkRunner::writeObjectFile(StringRef Buffer) const {
|
||||
Expected<std::string>
|
||||
BenchmarkRunner::writeObjectFile(StringRef Buffer, StringRef FileName) const {
|
||||
int ResultFD = 0;
|
||||
SmallString<256> ResultPath;
|
||||
SmallString<256> ResultPath = FileName;
|
||||
if (Error E = errorCodeToError(
|
||||
sys::fs::createTemporaryFile("snippet", "o", ResultFD, ResultPath)))
|
||||
FileName.empty() ? sys::fs::createTemporaryFile("snippet", "o",
|
||||
ResultFD, ResultPath)
|
||||
: sys::fs::openFileForReadWrite(
|
||||
FileName, ResultFD, sys::fs::CD_CreateAlways,
|
||||
sys::fs::OF_None)))
|
||||
return std::move(E);
|
||||
raw_fd_ostream OFS(ResultFD, true /*ShouldClose*/);
|
||||
OFS.write(Buffer.data(), Buffer.size());
|
||||
|
||||
@@ -63,8 +63,9 @@ public:
|
||||
unsigned NumRepetitions, unsigned LoopUnrollFactor,
|
||||
const SnippetRepetitor &Repetitor) const;
|
||||
|
||||
Expected<Benchmark> runConfiguration(RunnableConfiguration &&RC,
|
||||
bool DumpObjectToDisk) const;
|
||||
Expected<Benchmark>
|
||||
runConfiguration(RunnableConfiguration &&RC,
|
||||
const std::optional<StringRef> &DumpFile) const;
|
||||
|
||||
// Scratch space to run instructions that touch memory.
|
||||
struct ScratchSpace {
|
||||
@@ -114,7 +115,8 @@ private:
|
||||
unsigned MinInstructions,
|
||||
unsigned LoopBodySize) const;
|
||||
|
||||
Expected<std::string> writeObjectFile(StringRef Buffer) const;
|
||||
Expected<std::string> writeObjectFile(StringRef Buffer,
|
||||
StringRef FileName) const;
|
||||
|
||||
const std::unique_ptr<ScratchSpace> Scratch;
|
||||
};
|
||||
|
||||
@@ -242,11 +242,11 @@ static cl::opt<std::string>
|
||||
cl::desc("Target a specific cpu type (-mcpu=help for details)"),
|
||||
cl::value_desc("cpu-name"), cl::cat(Options), cl::init("native"));
|
||||
|
||||
static cl::opt<bool> DumpObjectToDisk(
|
||||
"dump-object-to-disk",
|
||||
cl::desc("dumps the generated benchmark object to disk "
|
||||
"and prints a message to access it (default = false)"),
|
||||
cl::cat(BenchmarkOptions), cl::init(false));
|
||||
static cl::opt<std::string>
|
||||
DumpObjectToDisk("dump-object-to-disk",
|
||||
cl::desc("dumps the generated benchmark object to disk "
|
||||
"and prints a message to access it"),
|
||||
cl::ValueOptional, cl::cat(BenchmarkOptions));
|
||||
|
||||
static ExitOnError ExitOnErr("llvm-exegesis error: ");
|
||||
|
||||
@@ -381,8 +381,11 @@ static void runBenchmarkConfigurations(
|
||||
Repetitors) {
|
||||
auto RC = ExitOnErr(Runner.getRunnableConfiguration(
|
||||
Conf, NumRepetitions, LoopBodySize, *Repetitor));
|
||||
std::optional<StringRef> DumpFile;
|
||||
if (DumpObjectToDisk.getNumOccurrences())
|
||||
DumpFile = DumpObjectToDisk;
|
||||
AllResults.emplace_back(
|
||||
ExitOnErr(Runner.runConfiguration(std::move(RC), DumpObjectToDisk)));
|
||||
ExitOnErr(Runner.runConfiguration(std::move(RC), DumpFile)));
|
||||
}
|
||||
Benchmark &Result = AllResults.front();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user