[llvm] [orc-rt] Add SPS serialization for ExecutorAddr. (PR #157242)

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Sat Sep 6 00:59:07 PDT 2025


https://github.com/lhames created https://github.com/llvm/llvm-project/pull/157242

None

>From 370e1db3b1075150162da4c94cc1c31c6958da4b Mon Sep 17 00:00:00 2001
From: Lang Hames <lhames at gmail.com>
Date: Sat, 6 Sep 2025 17:28:35 +1000
Subject: [PATCH] [orc-rt] Add SPS serialization for ExecutorAddr.

---
 .../orc-rt/SimplePackedSerialization.h        | 26 ++++++++++++++++---
 .../SimplePackedSerializationTest.cpp         |  6 +++++
 2 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/orc-rt/include/orc-rt/SimplePackedSerialization.h b/orc-rt/include/orc-rt/SimplePackedSerialization.h
index 292e6a0fc23ca..4c1343c70cf27 100644
--- a/orc-rt/include/orc-rt/SimplePackedSerialization.h
+++ b/orc-rt/include/orc-rt/SimplePackedSerialization.h
@@ -35,6 +35,7 @@
 #define ORC_RT_SIMPLEPACKEDSERIALIZATION_H
 
 #include "orc-rt/Error.h"
+#include "orc-rt/ExecutorAddress.h"
 #include "orc-rt/bit.h"
 #include "orc-rt/span.h"
 
@@ -174,9 +175,6 @@ class SPSSerializationTraits<
 /// Any empty placeholder suitable as a substitute for void when deserializing
 class SPSEmpty {};
 
-/// Represents an address in the executor.
-class SPSExecutorAddr {};
-
 /// SPS tag type for tuples.
 ///
 /// A blob tuple should be serialized by serializing each of the elements in
@@ -511,9 +509,31 @@ template <> class SPSSerializationTraits<SPSString, std::string_view> {
   }
 };
 
+/// Represents an address in the executor.
+class SPSExecutorAddr {};
+
 /// SPS tag type for errors.
 class SPSError;
 
+template <> class SPSSerializationTraits<SPSExecutorAddr, ExecutorAddr> {
+public:
+  static size_t size(const ExecutorAddr &A) {
+    return SPSArgList<uint64_t>::size(A.getValue());
+  }
+
+  static bool serialize(SPSOutputBuffer &OB, const ExecutorAddr &A) {
+    return SPSArgList<uint64_t>::serialize(OB, A.getValue());
+  }
+
+  static bool deserialize(SPSInputBuffer &IB, ExecutorAddr &A) {
+    uint64_t Value;
+    if (!SPSArgList<uint64_t>::deserialize(IB, Value))
+      return false;
+    A = ExecutorAddr(Value);
+    return true;
+  }
+};
+
 /// Helper type for serializing Errors.
 ///
 /// llvm::Errors are move-only, and not inspectable except by consuming them.
diff --git a/orc-rt/unittests/SimplePackedSerializationTest.cpp b/orc-rt/unittests/SimplePackedSerializationTest.cpp
index 9ccedef69628f..09cc168d88645 100644
--- a/orc-rt/unittests/SimplePackedSerializationTest.cpp
+++ b/orc-rt/unittests/SimplePackedSerializationTest.cpp
@@ -108,6 +108,12 @@ TEST(SimplePackedSerializationTest, SequenceSerialization) {
   blobSerializationRoundTrip<SPSSequence<int32_t>, std::vector<int32_t>>(V);
 }
 
+TEST(SimplePackedSerializationTest, ExecutorAddr) {
+  int X = 42;
+  auto A = ExecutorAddr::fromPtr(&X);
+  blobSerializationRoundTrip<SPSExecutorAddr>(A);
+}
+
 TEST(SimplePackedSerializationTest, StringViewCharSequenceSerialization) {
   const char *HW = "Hello, world!";
   blobSerializationRoundTrip<SPSString, std::string_view>(std::string_view(HW));



More information about the llvm-commits mailing list