[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