diff --git a/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h b/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h index 1264531e8f0df..5d545f8abdb99 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h @@ -14,7 +14,6 @@ #define LLVM_EXECUTIONENGINE_ORC_SHARED_EXECUTORADDRESS_H #include "llvm/ADT/DenseMapInfo.h" -#include "llvm/ADT/identity.h" #include "llvm/ExecutionEngine/Orc/Shared/SimplePackedSerialization.h" #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/raw_ostream.h" @@ -30,45 +29,6 @@ using ExecutorAddrDiff = uint64_t; /// Represents an address in the executor process. class ExecutorAddr { public: - /// A wrap/unwrap function that leaves pointers unmodified. - template using rawPtr = llvm::identity; - - /// Default wrap function to use on this host. - template using defaultWrap = rawPtr; - - /// Default unwrap function to use on this host. - template using defaultUnwrap = rawPtr; - - /// Merges a tag into the raw address value: - /// P' = P | (TagValue << TagOffset). - class Tag { - public: - constexpr Tag(uintptr_t TagValue, uintptr_t TagOffset) - : TagMask(TagValue << TagOffset) {} - - template constexpr T *operator()(T *P) { - return reinterpret_cast(reinterpret_cast(P) | TagMask); - } - - private: - uintptr_t TagMask; - }; - - /// Strips a tag of the given length from the given offset within the pointer: - /// P' = P & ~(((1 << TagLen) -1) << TagOffset) - class Untag { - public: - constexpr Untag(uintptr_t TagLen, uintptr_t TagOffset) - : UntagMask(~(((1 << TagLen) - 1) << TagOffset)) {} - - template constexpr T *operator()(T *P) { - return reinterpret_cast(reinterpret_cast(P) & UntagMask); - } - - private: - uintptr_t UntagMask; - }; - ExecutorAddr() = default; /// Create an ExecutorAddr from the given value. @@ -76,30 +36,27 @@ class ExecutorAddr { /// Create an ExecutorAddr from the given pointer. /// Warning: This should only be used when JITing in-process. - template > - static ExecutorAddr fromPtr(T *Ptr, UnwrapFn &&Unwrap = UnwrapFn()) { + template static ExecutorAddr fromPtr(T *Value) { return ExecutorAddr( - static_cast(reinterpret_cast(Unwrap(Ptr)))); + static_cast(reinterpret_cast(Value))); } /// Cast this ExecutorAddr to a pointer of the given type. /// Warning: This should only be used when JITing in-process. - template > - std::enable_if_t::value, T> - toPtr(WrapFn &&Wrap = WrapFn()) const { + template + std::enable_if_t::value, T> toPtr() const { uintptr_t IntPtr = static_cast(Addr); assert(IntPtr == Addr && "ExecutorAddr value out of range for uintptr_t"); - return Wrap(reinterpret_cast(IntPtr)); + return reinterpret_cast(IntPtr); } /// Cast this ExecutorAddr to a pointer of the given function type. /// Warning: This should only be used when JITing in-process. - template > - std::enable_if_t::value, T *> - toPtr(WrapFn &&Wrap = WrapFn()) const { + template + std::enable_if_t::value, T *> toPtr() const { uintptr_t IntPtr = static_cast(Addr); assert(IntPtr == Addr && "ExecutorAddr value out of range for uintptr_t"); - return Wrap(reinterpret_cast(IntPtr)); + return reinterpret_cast(IntPtr); } uint64_t getValue() const { return Addr; } diff --git a/llvm/unittests/ExecutionEngine/Orc/ExecutorAddressTest.cpp b/llvm/unittests/ExecutionEngine/Orc/ExecutorAddressTest.cpp index f829de6d6cb3c..7cbfdffd49bcf 100644 --- a/llvm/unittests/ExecutionEngine/Orc/ExecutorAddressTest.cpp +++ b/llvm/unittests/ExecutionEngine/Orc/ExecutorAddressTest.cpp @@ -58,26 +58,6 @@ TEST(ExecutorAddrTest, PtrConversionWithFunctionType) { EXPECT_EQ(FPtr, &F); } -TEST(ExecutorAddrTest, WrappingAndUnwrapping) { - constexpr uintptr_t RawAddr = 0x123456; - int *RawPtr = (int *)RawAddr; - - constexpr uintptr_t TagOffset = 8 * (sizeof(uintptr_t) - 1); - uintptr_t TagVal = 0xA5; - uintptr_t TagBits = TagVal << TagOffset; - void *TaggedPtr = (void *)((uintptr_t)RawPtr | TagBits); - - ExecutorAddr EA = - ExecutorAddr::fromPtr(TaggedPtr, ExecutorAddr::Untag(8, TagOffset)); - - EXPECT_EQ(EA.getValue(), RawAddr); - - void *ReconstitutedTaggedPtr = - EA.toPtr(ExecutorAddr::Tag(TagVal, TagOffset)); - - EXPECT_EQ(TaggedPtr, ReconstitutedTaggedPtr); -} - TEST(ExecutorAddrTest, AddrRanges) { ExecutorAddr A0(0), A1(1), A2(2), A3(3); ExecutorAddrRange R0(A0, A1), R1(A1, A2), R2(A2, A3), R3(A0, A2), R4(A1, A3);