Commit 14191596 authored by Miloš Stojanović's avatar Miloš Stojanović
Browse files

[llvm-exegesis] Improve error reporting in Target.cpp

Followup to D74085.
Replace the use of `report_fatal_error()` with returning the error to
`llvm-exegesis.cpp` and handling it there.

Differential Revision: https://reviews.llvm.org/D74113
parent b3576f60
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ std::unique_ptr<SnippetGenerator> ExegesisTarget::createSnippetGenerator(
  return nullptr;
}

std::unique_ptr<BenchmarkRunner>
Expected<std::unique_ptr<BenchmarkRunner>>
ExegesisTarget::createBenchmarkRunner(InstructionBenchmark::ModeE Mode,
                                      const LLVMState &State) const {
  PfmCountersInfo PfmCounters = State.getPfmCounters();
@@ -66,14 +66,16 @@ ExegesisTarget::createBenchmarkRunner(InstructionBenchmark::ModeE Mode,
      const char *ModeName = Mode == InstructionBenchmark::Latency
                                 ? "latency"
                                 : "inverse_throughput";
      report_fatal_error(Twine("can't run '").concat(ModeName).concat("' mode, "
                               "sched model does not define a cycle counter."));
      return make_error<Failure>(
          Twine("can't run '")
              .concat(ModeName)
              .concat("' mode, sched model does not define a cycle counter."));
    }
    return createLatencyBenchmarkRunner(State, Mode);
  case InstructionBenchmark::Uops:
    if (!PfmCounters.UopsCounter && !PfmCounters.IssueCounters)
      report_fatal_error("can't run 'uops' mode, sched model does not define "
                         "uops or issue counters.");
      return make_error<Failure>("can't run 'uops' mode, sched model does not "
                                 "define uops or issue counters.");
    return createUopsBenchmarkRunner(State);
  }
  return nullptr;
+1 −1
Original line number Diff line number Diff line
@@ -132,7 +132,7 @@ public:
                         const LLVMState &State,
                         const SnippetGenerator::Options &Opts) const;
  // Creates a benchmark runner for the given mode.
  std::unique_ptr<BenchmarkRunner>
  Expected<std::unique_ptr<BenchmarkRunner>>
  createBenchmarkRunner(InstructionBenchmark::ModeE Mode,
                        const LLVMState &State) const;

+2 −2
Original line number Diff line number Diff line
@@ -263,8 +263,8 @@ void benchmarkMain() {

  const LLVMState State(CpuName);

  const std::unique_ptr<BenchmarkRunner> Runner =
      State.getExegesisTarget().createBenchmarkRunner(BenchmarkMode, State);
  const std::unique_ptr<BenchmarkRunner> Runner = ExitOnErr(
      State.getExegesisTarget().createBenchmarkRunner(BenchmarkMode, State));
  if (!Runner) {
    ExitWithError("cannot create benchmark runner");
  }