Skip to content

Commit 473b059

Browse files
committed
[ORC] Add ExecutorAddrRange::fromPtrRange convenience method.
This can be used to construct an ExecutorAddrRange from a pair of pointers, or a pointer and a size. This will be used to reduce boilerplate in an upcoming patch.
1 parent 37b5f77 commit 473b059

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,19 @@ struct ExecutorAddrRange {
226226
ExecutorAddrRange(ExecutorAddr Start, ExecutorAddrDiff Size)
227227
: Start(Start), End(Start + Size) {}
228228

229+
template <typename T, typename UnwrapFn = ExecutorAddr::defaultUnwrap<T>>
230+
static ExecutorAddrRange fromPtrRange(T *Start, T *End,
231+
UnwrapFn &&Unwrap = UnwrapFn()) {
232+
return {ExecutorAddr::fromPtr(Start, Unwrap),
233+
ExecutorAddr::fromPtr(End, Unwrap)};
234+
}
235+
236+
template <typename T, typename UnwrapFn = ExecutorAddr::defaultUnwrap<T>>
237+
static ExecutorAddrRange fromPtrRange(T *Ptr, ExecutorAddrDiff Size,
238+
UnwrapFn &&Unwrap = UnwrapFn()) {
239+
return {ExecutorAddr::fromPtr(Ptr, std::forward<UnwrapFn>(Unwrap)), Size};
240+
}
241+
229242
bool empty() const { return Start == End; }
230243
ExecutorAddrDiff size() const { return End - Start; }
231244

llvm/unittests/ExecutionEngine/Orc/ExecutorAddressTest.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,16 @@ TEST(ExecutorAddrTest, AddrRanges) {
106106
EXPECT_LT(R0, R1);
107107
EXPECT_GE(R0, R0);
108108
EXPECT_GT(R1, R0);
109+
110+
// Check fromPtr support.
111+
char A[10];
112+
auto RP1 = ExecutorAddrRange::fromPtrRange(A, A + 10);
113+
EXPECT_EQ(RP1.Start.toPtr<char *>(), A);
114+
EXPECT_EQ(RP1.End.toPtr<char *>(), A + 10);
115+
116+
auto RP2 = ExecutorAddrRange::fromPtrRange(A, 10);
117+
EXPECT_EQ(RP2.Start.toPtr<char *>(), A);
118+
EXPECT_EQ(RP2.End.toPtr<char *>(), A + 10);
109119
}
110120

111121
TEST(ExecutorSymbolDef, PointerConversion) {

0 commit comments

Comments
 (0)