From 2e3af9d0b9031b0f6cc576ad5d23fc356e3bdf7a Mon Sep 17 00:00:00 2001 From: Aiden Grossman Date: Sat, 29 Nov 2025 23:41:17 +0000 Subject: [PATCH 1/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20ch?= =?UTF-8?q?anges=20to=20main=20this=20commit=20is=20based=20on?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created using spr 1.3.7 [skip ci] --- .../X86/snippet-generator-seed.test | 16 ++++++++++++++++ .../tools/llvm-exegesis/lib/SnippetGenerator.cpp | 15 ++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 llvm/test/tools/llvm-exegesis/X86/snippet-generator-seed.test diff --git a/llvm/test/tools/llvm-exegesis/X86/snippet-generator-seed.test b/llvm/test/tools/llvm-exegesis/X86/snippet-generator-seed.test new file mode 100644 index 0000000000000..54a0e4946fcd8 --- /dev/null +++ b/llvm/test/tools/llvm-exegesis/X86/snippet-generator-seed.test @@ -0,0 +1,16 @@ +# REQUIRES: exegesis-can-measure-latency, x86_64-linux + +# Check that the snippet we generate is exactly the same between runs when we +# use a fixed RNG seed. + +# RUN: llvm-exegesis -mtriple=x86_64-unknown-unknown -mode=latency -opcode-name=ADD64rr --benchmark-phase=prepare-snippet -random-generator-seed=5 | FileCheck %s + +# CHECK: --- +# CHECK: mode: latency +# CHECK: key: +# CHECK: instructions: +# CHECK: - 'ADD64rr RCX RCX RAX' +# CHECK: config: '' +# CHECK: register_initial_values: +# CHECK: - 'RCX=0x0' +# CHECK: - 'RAX=0x0' diff --git a/llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp b/llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp index 7023f1bfae193..17cdf328af84c 100644 --- a/llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp +++ b/llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp @@ -21,9 +21,17 @@ #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/Program.h" +#define DEBUG_TYPE "snippet-generator" + namespace llvm { namespace exegesis { +static cl::opt + RandomGeneratorSeed("random-generator-seed", + cl::desc("The seed value to use for the random number " + "generator when generating snippets."), + cl::init(0)); + std::vector getSingleton(CodeTemplate &&CT) { std::vector Result; Result.push_back(std::move(CT)); @@ -187,8 +195,13 @@ generateUnconstrainedCodeTemplates(const InstructionTemplate &Variant, } std::mt19937 &randomGenerator() { + unsigned RandomSeed = RandomGeneratorSeed; static std::random_device RandomDevice; - static std::mt19937 RandomGenerator(RandomDevice()); + if (RandomSeed == 0) { + RandomSeed = RandomDevice(); + } + LLVM_DEBUG(dbgs() << "Using random seed " << RandomSeed << ".\n"); + static std::mt19937 RandomGenerator(RandomSeed); return RandomGenerator; } From 1f179fe38a6bf8169d58c8fbe19cbcd52f50b358 Mon Sep 17 00:00:00 2001 From: Aiden Grossman Date: Mon, 1 Dec 2025 14:40:09 +0000 Subject: [PATCH 2/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20ch?= =?UTF-8?q?anges=20introduced=20through=20rebase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created using spr 1.3.7 [skip ci] --- llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp b/llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp index 17cdf328af84c..86d4e197b6063 100644 --- a/llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp +++ b/llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp @@ -195,11 +195,10 @@ generateUnconstrainedCodeTemplates(const InstructionTemplate &Variant, } std::mt19937 &randomGenerator() { - unsigned RandomSeed = RandomGeneratorSeed; static std::random_device RandomDevice; - if (RandomSeed == 0) { - RandomSeed = RandomDevice(); - } + unsigned RandomSeed = RandomGeneratorSeed.getNumOccurrences() + ? RandomGeneratorSeed + : RandomDevice(); LLVM_DEBUG(dbgs() << "Using random seed " << RandomSeed << ".\n"); static std::mt19937 RandomGenerator(RandomSeed); return RandomGenerator;