Skip to content

Commit 9344a7c

Browse files
authored
[orc-rt] Add SPS serialization for AllocAction and AllocActionPair. (#157620)
1 parent 6a60042 commit 9344a7c

File tree

3 files changed

+97
-0
lines changed

3 files changed

+97
-0
lines changed

orc-rt/include/orc-rt/SPSAllocAction.h

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,57 @@
1515
#define ORC_RT_SPSALLOCACTION_H
1616

1717
#include "orc-rt/AllocAction.h"
18+
#include "orc-rt/SPSWrapperFunctionBuffer.h"
1819
#include "orc-rt/SimplePackedSerialization.h"
1920

2021
namespace orc_rt {
2122

23+
struct SPSAllocAction;
24+
25+
template <> class SPSSerializationTraits<SPSAllocAction, AllocAction> {
26+
public:
27+
static size_t size(const AllocAction &AA) {
28+
return SPSArgList<SPSExecutorAddr, SPSWrapperFunctionBuffer>::size(
29+
ExecutorAddr::fromPtr(AA.Fn), AA.ArgData);
30+
}
31+
32+
static bool serialize(SPSOutputBuffer &OB, const AllocAction &AA) {
33+
return SPSArgList<SPSExecutorAddr, SPSWrapperFunctionBuffer>::serialize(
34+
OB, ExecutorAddr::fromPtr(AA.Fn), AA.ArgData);
35+
}
36+
37+
static bool deserialize(SPSInputBuffer &IB, AllocAction &AA) {
38+
ExecutorAddr Fn;
39+
WrapperFunctionBuffer ArgData;
40+
if (!SPSArgList<SPSExecutorAddr, SPSWrapperFunctionBuffer>::deserialize(
41+
IB, Fn, ArgData))
42+
return false;
43+
AA.Fn = Fn.toPtr<AllocActionFn>();
44+
AA.ArgData = std::move(ArgData);
45+
return true;
46+
}
47+
};
48+
49+
struct SPSAllocActionPair;
50+
51+
template <> class SPSSerializationTraits<SPSAllocActionPair, AllocActionPair> {
52+
public:
53+
static size_t size(const AllocActionPair &AAP) {
54+
return SPSArgList<SPSAllocAction, SPSAllocAction>::size(AAP.Finalize,
55+
AAP.Dealloc);
56+
}
57+
58+
static bool serialize(SPSOutputBuffer &OB, const AllocActionPair &AAP) {
59+
return SPSArgList<SPSAllocAction, SPSAllocAction>::serialize(
60+
OB, AAP.Finalize, AAP.Dealloc);
61+
}
62+
63+
static bool deserialize(SPSInputBuffer &IB, AllocActionPair &AAP) {
64+
return SPSArgList<SPSAllocAction, SPSAllocAction>::deserialize(
65+
IB, AAP.Finalize, AAP.Dealloc);
66+
}
67+
};
68+
2269
template <typename... SPSArgTs> struct AllocActionSPSDeserializer {
2370
template <typename... ArgTs>
2471
bool deserialize(const char *ArgData, size_t ArgSize, ArgTs &...Args) {

orc-rt/unittests/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ add_orc_rt_unittest(CoreTests
2424
RTTITest.cpp
2525
ScopeExitTest.cpp
2626
SimplePackedSerializationTest.cpp
27+
SPSAllocActionTest.cpp
2728
SPSMemoryFlagsTest.cpp
2829
SPSWrapperFunctionTest.cpp
2930
SPSWrapperFunctionBufferTest.cpp
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
//===-- SPSAllocActionTest.cpp --------------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
//
9+
// Test SPS serialization for AllocAction APIs.
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
#include "orc-rt/SPSAllocAction.h"
14+
15+
#include "SimplePackedSerializationTestUtils.h"
16+
#include "gtest/gtest.h"
17+
18+
using namespace orc_rt;
19+
20+
static bool AAEQ(const AllocAction &LHS, const AllocAction &RHS) {
21+
if (LHS.Fn != RHS.Fn)
22+
return false;
23+
if (LHS.ArgData.size() != RHS.ArgData.size())
24+
return false;
25+
return memcmp(LHS.ArgData.data(), RHS.ArgData.data(), LHS.ArgData.size()) ==
26+
0;
27+
}
28+
29+
static bool AAPEQ(const AllocActionPair &LHS, const AllocActionPair &RHS) {
30+
return AAEQ(LHS.Finalize, RHS.Finalize) && AAEQ(LHS.Dealloc, RHS.Dealloc);
31+
}
32+
33+
static orc_rt_WrapperFunctionBuffer noopAction(const char *ArgData,
34+
size_t ArgSize) {
35+
return WrapperFunctionBuffer().release();
36+
}
37+
38+
TEST(SPSAllocActionTest, AllocActionSerialization) {
39+
AllocAction AA(noopAction, WrapperFunctionBuffer::copyFrom("hello, world!"));
40+
blobSerializationRoundTrip<SPSAllocAction>(AA, AAEQ);
41+
}
42+
43+
TEST(SPSAllocActionTest, AllocActionPairSerialization) {
44+
AllocActionPair AAP;
45+
AAP.Finalize = {noopAction, WrapperFunctionBuffer::copyFrom("foo")};
46+
AAP.Dealloc = {noopAction, WrapperFunctionBuffer::copyFrom("foo")};
47+
48+
blobSerializationRoundTrip<SPSAllocActionPair>(AAP, AAPEQ);
49+
}

0 commit comments

Comments
 (0)