[llvm] [llvm-exegesis] Add CLI Option to set Fixed RNG seed (PR #170013)
Aiden Grossman via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 1 06:40:17 PST 2025
https://github.com/boomanaiden154 updated https://github.com/llvm/llvm-project/pull/170013
>From ee843445ebc71c427addb8238687d808ec043c75 Mon Sep 17 00:00:00 2001
From: Aiden Grossman <aidengrossman at google.com>
Date: Sat, 29 Nov 2025 23:41:12 +0000
Subject: [PATCH 1/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
=?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Created using spr 1.3.7
---
.../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<unsigned>
+ RandomGeneratorSeed("random-generator-seed",
+ cl::desc("The seed value to use for the random number "
+ "generator when generating snippets."),
+ cl::init(0));
+
std::vector<CodeTemplate> getSingleton(CodeTemplate &&CT) {
std::vector<CodeTemplate> 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 f2e0f357e94c52efe332c96932fd37fd3f6e9014 Mon Sep 17 00:00:00 2001
From: Aiden Grossman <aidengrossman at google.com>
Date: Mon, 1 Dec 2025 14:40:04 +0000
Subject: [PATCH 2/2] feedback
Created using spr 1.3.7
---
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;
More information about the llvm-commits
mailing list