diff options
-rw-r--r-- | llvm/docs/CommandGuide/llvm-exegesis.rst | 4 | ||||
-rw-r--r-- | llvm/tools/llvm-exegesis/llvm-exegesis.cpp | 18 |
2 files changed, 20 insertions, 2 deletions
diff --git a/llvm/docs/CommandGuide/llvm-exegesis.rst b/llvm/docs/CommandGuide/llvm-exegesis.rst index 1cba9788584..339095f10d1 100644 --- a/llvm/docs/CommandGuide/llvm-exegesis.rst +++ b/llvm/docs/CommandGuide/llvm-exegesis.rst @@ -174,6 +174,10 @@ OPTIONS Specify the numPoints parameters to be used for DBSCAN clustering (`analysis` mode). + .. option:: -ignore-invalid-sched-class=false + + If set, ignore instructions that do not have a sched class (class idx = 0). + EXIT STATUS ----------- diff --git a/llvm/tools/llvm-exegesis/llvm-exegesis.cpp b/llvm/tools/llvm-exegesis/llvm-exegesis.cpp index 09e9693a96a..7e2caf3198e 100644 --- a/llvm/tools/llvm-exegesis/llvm-exegesis.cpp +++ b/llvm/tools/llvm-exegesis/llvm-exegesis.cpp @@ -60,6 +60,11 @@ static llvm::cl::opt<unsigned> llvm::cl::desc("number of time to repeat the asm snippet"), llvm::cl::init(10000)); +static llvm::cl::opt<bool> IgnoreInvalidSchedClass( + "ignore-invalid-sched-class", + llvm::cl::desc("ignore instructions that do not define a sched class"), + llvm::cl::init(false)); + static llvm::cl::opt<unsigned> AnalysisNumPoints( "analysis-numpoints", llvm::cl::desc("minimum number of points in an analysis cluster"), @@ -120,6 +125,15 @@ void benchmarkMain() { X86Filter Filter; const LLVMState State; + const auto Opcode = GetOpcodeOrDie(State.getInstrInfo()); + + // Ignore instructions without a sched class if -ignore-invalid-sched-class is + // passed. + if (IgnoreInvalidSchedClass && + State.getInstrInfo().get(Opcode).getSchedClass() == 0) { + llvm::errs() << "ignoring instruction without sched class\n"; + return; + } // FIXME: Do not require SchedModel for latency. if (!State.getSubtargetInfo().getSchedModel().hasExtraProcessorInfo()) @@ -145,8 +159,8 @@ void benchmarkMain() { BenchmarkFile = "-"; const BenchmarkResultContext Context = getBenchmarkResultContext(State); - std::vector<InstructionBenchmark> Results = ExitOnErr(Runner->run( - GetOpcodeOrDie(State.getInstrInfo()), Filter, NumRepetitions)); + std::vector<InstructionBenchmark> Results = + ExitOnErr(Runner->run(Opcode, Filter, NumRepetitions)); for (InstructionBenchmark &Result : Results) ExitOnErr(Result.writeYaml(Context, BenchmarkFile)); |