diff --git a/llvm/test/tools/llvm-exegesis/X86/latency/latency-CMOV32rr.s b/llvm/test/tools/llvm-exegesis/X86/latency/latency-CMOV32rr.s index 9f6a5486b3ca5..2598c04cb09d5 100644 --- a/llvm/test/tools/llvm-exegesis/X86/latency/latency-CMOV32rr.s +++ b/llvm/test/tools/llvm-exegesis/X86/latency/latency-CMOV32rr.s @@ -1,5 +1,6 @@ # RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --skip-measurements -opcode-name=CMOV32rr -repetition-mode=duplicate | FileCheck %s # RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --skip-measurements -opcode-name=CMOV32rr -repetition-mode=loop | FileCheck %s +# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mode=latency --skip-measurements -opcode-name=CMOV32rr -repetition-mode=min | FileCheck %s CHECK: --- CHECK-NEXT: mode: latency diff --git a/llvm/tools/llvm-exegesis/llvm-exegesis.cpp b/llvm/tools/llvm-exegesis/llvm-exegesis.cpp index c17a29b2c34cb..459e9800f0835 100644 --- a/llvm/tools/llvm-exegesis/llvm-exegesis.cpp +++ b/llvm/tools/llvm-exegesis/llvm-exegesis.cpp @@ -348,14 +348,21 @@ static void runBenchmarkConfigurations( } InstructionBenchmark &Result = AllResults.front(); + // If any of our measurements failed, pretend they all have failed. + if (AllResults.size() > 1 && + any_of(AllResults, [](const InstructionBenchmark &R) { + return R.Measurements.empty(); + })) + Result.Measurements.clear(); + if (RepetitionMode == InstructionBenchmark::RepetitionModeE::AggregateMin) { - assert(!Result.Measurements.empty() && - "We're in an 'min' repetition mode, and need to aggregate new " - "result to the existing result."); for (const InstructionBenchmark &OtherResult : ArrayRef(AllResults).drop_front()) { llvm::append_range(Result.AssembledSnippet, OtherResult.AssembledSnippet); + // Aggregate measurements, but only iff all measurements succeeded. + if (Result.Measurements.empty()) + continue; assert(OtherResult.Measurements.size() == Result.Measurements.size() && "Expected to have identical number of measurements."); for (auto I : zip(Result.Measurements, OtherResult.Measurements)) {