summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/docs/CommandGuide/llvm-exegesis.rst4
-rw-r--r--llvm/tools/llvm-exegesis/llvm-exegesis.cpp18
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));
OpenPOWER on IntegriCloud