diff options
author | Clement Courbet <courbet@google.com> | 2018-05-17 08:12:29 +0000 |
---|---|---|
committer | Clement Courbet <courbet@google.com> | 2018-05-17 08:12:29 +0000 |
commit | 295a554ce4a29ab2ef5e9ab538ac83596a536635 (patch) | |
tree | 2bb66578ef79379869c71cd47850b712d03ac02e /llvm/tools/llvm-exegesis/llvm-exegesis.cpp | |
parent | ee110fb735651d63252f70104d39c5a0376ee20d (diff) | |
download | bcm5719-llvm-295a554ce4a29ab2ef5e9ab538ac83596a536635.tar.gz bcm5719-llvm-295a554ce4a29ab2ef5e9ab538ac83596a536635.zip |
Revert r332579 "[llvm-exegesis] Update to cover latency through another opcode."
The revision failed to update the ARM tests.
llvm-svn: 332580
Diffstat (limited to 'llvm/tools/llvm-exegesis/llvm-exegesis.cpp')
-rw-r--r-- | llvm/tools/llvm-exegesis/llvm-exegesis.cpp | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/llvm/tools/llvm-exegesis/llvm-exegesis.cpp b/llvm/tools/llvm-exegesis/llvm-exegesis.cpp index 2b77288d288..a872c759093 100644 --- a/llvm/tools/llvm-exegesis/llvm-exegesis.cpp +++ b/llvm/tools/llvm-exegesis/llvm-exegesis.cpp @@ -76,23 +76,14 @@ static llvm::cl::opt<std::string> AnalysisClustersFile("analysis-clusters-file", namespace exegesis { -static unsigned GetOpcodeOrDie(const llvm::MCInstrInfo &MCInstrInfo) { - if (OpcodeName.empty() && (OpcodeIndex == 0)) - llvm::report_fatal_error( - "please provide one and only one of 'opcode-index' or 'opcode-name'"); - if (OpcodeIndex > 0) - return OpcodeIndex; - // Resolve opcode name -> opcode. - for (unsigned I = 0, E = MCInstrInfo.getNumOpcodes(); I < E; ++I) - if (MCInstrInfo.getName(I) == OpcodeName) - return I; - llvm::report_fatal_error(llvm::Twine("unknown opcode ").concat(OpcodeName)); -} - void benchmarkMain() { if (exegesis::pfm::pfmInitialize()) llvm::report_fatal_error("cannot initialize libpfm"); + if (OpcodeName.empty() == (OpcodeIndex == 0)) + llvm::report_fatal_error( + "please provide one and only one of 'opcode-index' or 'opcode-name'"); + llvm::InitializeNativeTarget(); llvm::InitializeNativeTargetAsmPrinter(); @@ -101,26 +92,37 @@ void benchmarkMain() { const LLVMState State; - // FIXME: Do not require SchedModel for latency. if (!State.getSubtargetInfo().getSchedModel().hasExtraProcessorInfo()) llvm::report_fatal_error("sched model is missing extra processor info!"); + unsigned Opcode = OpcodeIndex; + if (Opcode == 0) { + // Resolve opcode name -> opcode. + for (unsigned I = 0, E = State.getInstrInfo().getNumOpcodes(); I < E; ++I) { + if (State.getInstrInfo().getName(I) == OpcodeName) { + Opcode = I; + break; + } + } + if (Opcode == 0) { + llvm::report_fatal_error( + llvm::Twine("unknown opcode ").concat(OpcodeName)); + } + } + std::unique_ptr<BenchmarkRunner> Runner; switch (BenchmarkMode) { case BenchmarkModeE::Latency: - Runner = llvm::make_unique<LatencyBenchmarkRunner>(State); + Runner = llvm::make_unique<LatencyBenchmarkRunner>(); break; case BenchmarkModeE::Uops: - Runner = llvm::make_unique<UopsBenchmarkRunner>(State); + Runner = llvm::make_unique<UopsBenchmarkRunner>(); break; case BenchmarkModeE::Analysis: llvm_unreachable("not a benchmark"); } - if (NumRepetitions == 0) - llvm::report_fatal_error("--num-repetitions must be greater than zero"); - - Runner->run(GetOpcodeOrDie(State.getInstrInfo()), Filter, NumRepetitions) + Runner->run(State, Opcode, NumRepetitions > 0 ? NumRepetitions : 1, Filter) .writeYamlOrDie(BenchmarkFile); exegesis::pfm::pfmTerminate(); } |