return nullptr;
}
-std::unique_ptr<BenchmarkRunner>
+Expected<std::unique_ptr<BenchmarkRunner>>
ExegesisTarget::createBenchmarkRunner(InstructionBenchmark::ModeE Mode,
const LLVMState &State) const {
PfmCountersInfo PfmCounters = State.getPfmCounters();
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;
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;
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");
}