From: Clement Courbet Date: Wed, 6 Jun 2018 09:42:36 +0000 (+0000) Subject: [llvm-exegesis] move Mode from Key to BenchmarResult. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=62b34fa89a9cabfebe56848e25be4413ee009520;p=platform%2Fupstream%2Fllvm.git [llvm-exegesis] move Mode from Key to BenchmarResult. Moves the Mode field out of the Key. The existing yaml benchmark results can be fixed with the following script: ``` readonly FILE=$1 readonly MODE=latency # Change to uops to fix a uops benchmark. cat $FILE | \ sed "/^\ \+mode:\ \+$MODE$/d" | \ sed "/^cpu_name.*$/i mode: $MODE" ``` Differential Revision: https://reviews.llvm.org/D47813 Authored by: Guillaume Chatelet llvm-svn: 334079 --- diff --git a/llvm/tools/llvm-exegesis/lib/Analysis.cpp b/llvm/tools/llvm-exegesis/lib/Analysis.cpp index bf13272..df353dc 100644 --- a/llvm/tools/llvm-exegesis/lib/Analysis.cpp +++ b/llvm/tools/llvm-exegesis/lib/Analysis.cpp @@ -319,9 +319,8 @@ bool Analysis::SchedClassCluster::measurementsMatch( std::vector SchedClassPoint(NumMeasurements); // Latency case. assert(!Clustering.getPoints().empty()); - const InstructionBenchmarkKey::ModeE Mode = - Clustering.getPoints()[0].Key.Mode; - if (Mode == InstructionBenchmarkKey::Latency) { + const InstructionBenchmark::ModeE Mode = Clustering.getPoints()[0].Mode; + if (Mode == InstructionBenchmark::Latency) { if (NumMeasurements != 1) { llvm::errs() << "invalid number of measurements in latency mode: expected 1, got " @@ -337,7 +336,7 @@ bool Analysis::SchedClassCluster::measurementsMatch( std::max(SchedClassPoint[0].Value, WLE->Cycles); } ClusterCenterPoint[0].Value = Representative[0].avg(); - } else if (Mode == InstructionBenchmarkKey::Uops) { + } else if (Mode == InstructionBenchmark::Uops) { for (int I = 0, E = Representative.size(); I < E; ++I) { // Find the pressure on ProcResIdx `Key`. uint16_t ProcResIdx = 0; diff --git a/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp b/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp index 441aee0..87b25b4 100644 --- a/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp +++ b/llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp @@ -68,12 +68,12 @@ template <> struct MappingTraits { }; template <> -struct ScalarEnumerationTraits { +struct ScalarEnumerationTraits { static void enumeration(IO &Io, - exegesis::InstructionBenchmarkKey::ModeE &Value) { - Io.enumCase(Value, "", exegesis::InstructionBenchmarkKey::Unknown); - Io.enumCase(Value, "latency", exegesis::InstructionBenchmarkKey::Latency); - Io.enumCase(Value, "uops", exegesis::InstructionBenchmarkKey::Uops); + exegesis::InstructionBenchmark::ModeE &Value) { + Io.enumCase(Value, "", exegesis::InstructionBenchmark::Unknown); + Io.enumCase(Value, "latency", exegesis::InstructionBenchmark::Latency); + Io.enumCase(Value, "uops", exegesis::InstructionBenchmark::Uops); } }; @@ -81,13 +81,13 @@ template <> struct MappingTraits { static void mapping(IO &Io, exegesis::InstructionBenchmarkKey &Obj) { Io.mapRequired("opcode_name", Obj.OpcodeName); Io.mapOptional("instructions", Obj.Instructions); - Io.mapRequired("mode", Obj.Mode); Io.mapOptional("config", Obj.Config); } }; template <> struct MappingTraits { static void mapping(IO &Io, exegesis::InstructionBenchmark &Obj) { + Io.mapRequired("mode", Obj.Mode); Io.mapRequired("key", Obj.Key); Io.mapRequired("cpu_name", Obj.CpuName); Io.mapRequired("llvm_triple", Obj.LLVMTriple); diff --git a/llvm/tools/llvm-exegesis/lib/BenchmarkResult.h b/llvm/tools/llvm-exegesis/lib/BenchmarkResult.h index 9b87482..421e210 100644 --- a/llvm/tools/llvm-exegesis/lib/BenchmarkResult.h +++ b/llvm/tools/llvm-exegesis/lib/BenchmarkResult.h @@ -34,8 +34,6 @@ struct InstructionBenchmarkKey { // The LLVM opcode name. std::string OpcodeName; // FIXME: Deprecated, use Instructions below. std::vector Instructions; - enum ModeE { Unknown, Latency, Uops }; - ModeE Mode; // An opaque configuration, that can be used to separate several benchmarks of // the same instruction under different configurations. std::string Config; @@ -50,6 +48,8 @@ struct BenchmarkMeasure { // The result of an instruction benchmark. struct InstructionBenchmark { InstructionBenchmarkKey Key; + enum ModeE { Unknown, Latency, Uops }; + ModeE Mode; std::string CpuName; std::string LLVMTriple; int NumRepetitions = 0; diff --git a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp index 75b2a1d..0599c8e 100644 --- a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp +++ b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp @@ -37,7 +37,7 @@ InstructionBenchmark BenchmarkRunner::run(unsigned Opcode, InstructionBenchmark InstrBenchmark; InstrBenchmark.Key.OpcodeName = State.getInstrInfo().getName(Opcode); - InstrBenchmark.Key.Mode = getMode(); + InstrBenchmark.Mode = getMode(); InstrBenchmark.CpuName = State.getCpuName(); InstrBenchmark.LLVMTriple = State.getTriple(); InstrBenchmark.NumRepetitions = NumRepetitions; diff --git a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.h b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.h index 1382951..5dfd05e 100644 --- a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.h +++ b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.h @@ -54,7 +54,7 @@ protected: const llvm::MCRegisterInfo &MCRegisterInfo; private: - virtual InstructionBenchmarkKey::ModeE getMode() const = 0; + virtual InstructionBenchmark::ModeE getMode() const = 0; virtual llvm::Expected> createSnippet(RegisterAliasingTrackerCache &RATC, unsigned Opcode, diff --git a/llvm/tools/llvm-exegesis/lib/Latency.cpp b/llvm/tools/llvm-exegesis/lib/Latency.cpp index 633189e..9c4ed56 100644 --- a/llvm/tools/llvm-exegesis/lib/Latency.cpp +++ b/llvm/tools/llvm-exegesis/lib/Latency.cpp @@ -52,8 +52,8 @@ static llvm::Error makeError(llvm::Twine Msg) { LatencyBenchmarkRunner::~LatencyBenchmarkRunner() = default; -InstructionBenchmarkKey::ModeE LatencyBenchmarkRunner::getMode() const { - return InstructionBenchmarkKey::Latency; +InstructionBenchmark::ModeE LatencyBenchmarkRunner::getMode() const { + return InstructionBenchmark::Latency; } llvm::Expected> diff --git a/llvm/tools/llvm-exegesis/lib/Latency.h b/llvm/tools/llvm-exegesis/lib/Latency.h index 9dd0039..1e6150e 100644 --- a/llvm/tools/llvm-exegesis/lib/Latency.h +++ b/llvm/tools/llvm-exegesis/lib/Latency.h @@ -25,7 +25,7 @@ public: ~LatencyBenchmarkRunner() override; private: - InstructionBenchmarkKey::ModeE getMode() const override; + InstructionBenchmark::ModeE getMode() const override; llvm::Expected> createSnippet(RegisterAliasingTrackerCache &RATC, unsigned OpcodeIndex, diff --git a/llvm/tools/llvm-exegesis/lib/Uops.cpp b/llvm/tools/llvm-exegesis/lib/Uops.cpp index 145bfad..b90ab1a 100644 --- a/llvm/tools/llvm-exegesis/lib/Uops.cpp +++ b/llvm/tools/llvm-exegesis/lib/Uops.cpp @@ -141,8 +141,8 @@ static llvm::Error makeError(llvm::Twine Msg) { UopsBenchmarkRunner::~UopsBenchmarkRunner() = default; -InstructionBenchmarkKey::ModeE UopsBenchmarkRunner::getMode() const { - return InstructionBenchmarkKey::Uops; +InstructionBenchmark::ModeE UopsBenchmarkRunner::getMode() const { + return InstructionBenchmark::Uops; } llvm::Expected> diff --git a/llvm/tools/llvm-exegesis/lib/Uops.h b/llvm/tools/llvm-exegesis/lib/Uops.h index 4fe7cb42..a58fa1c 100644 --- a/llvm/tools/llvm-exegesis/lib/Uops.h +++ b/llvm/tools/llvm-exegesis/lib/Uops.h @@ -25,7 +25,7 @@ public: ~UopsBenchmarkRunner() override; private: - InstructionBenchmarkKey::ModeE getMode() const override; + InstructionBenchmark::ModeE getMode() const override; llvm::Expected> createSnippet(RegisterAliasingTrackerCache &RATC, unsigned Opcode, diff --git a/llvm/unittests/tools/llvm-exegesis/BenchmarkResultTest.cpp b/llvm/unittests/tools/llvm-exegesis/BenchmarkResultTest.cpp index 2c12c82..181b5af 100644 --- a/llvm/unittests/tools/llvm-exegesis/BenchmarkResultTest.cpp +++ b/llvm/unittests/tools/llvm-exegesis/BenchmarkResultTest.cpp @@ -45,8 +45,8 @@ TEST(BenchmarkResultTest, WriteToAndReadFromDisk) { ToDisk.Key.OpcodeName = "name"; ToDisk.Key.Instructions.push_back(llvm::MCInstBuilder(kInstrId)); - ToDisk.Key.Mode = InstructionBenchmarkKey::Latency; ToDisk.Key.Config = "config"; + ToDisk.Mode = InstructionBenchmark::Latency; ToDisk.CpuName = "cpu_name"; ToDisk.LLVMTriple = "llvm_triple"; ToDisk.NumRepetitions = 1; @@ -69,8 +69,8 @@ TEST(BenchmarkResultTest, WriteToAndReadFromDisk) { EXPECT_EQ(FromDisk.Key.OpcodeName, ToDisk.Key.OpcodeName); EXPECT_THAT(FromDisk.Key.Instructions, Pointwise(EqMCInst(), ToDisk.Key.Instructions)); - EXPECT_EQ(FromDisk.Key.Mode, ToDisk.Key.Mode); 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); @@ -87,8 +87,8 @@ TEST(BenchmarkResultTest, WriteToAndReadFromDisk) { EXPECT_EQ(FromDisk.Key.OpcodeName, ToDisk.Key.OpcodeName); EXPECT_THAT(FromDisk.Key.Instructions, Pointwise(EqMCInst(), ToDisk.Key.Instructions)); - EXPECT_EQ(FromDisk.Key.Mode, ToDisk.Key.Mode); 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);