From c0320e731fdf2e1977b03111325b62f2b04dcd5f Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Sun, 29 Jan 2023 15:08:02 -0800 Subject: [PATCH] [ORC] Add ordering to ExecutorAddrRanges. This allows ranges to be sorted and used as map keys. --- .../ExecutionEngine/Orc/Shared/ExecutorAddress.h | 21 +++++++++++++++++++++ .../ExecutionEngine/Orc/ExecutorAddressTest.cpp | 5 +++++ 2 files changed, 26 insertions(+) diff --git a/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h b/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h index f6673b1..b7b98d5 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h @@ -206,6 +206,27 @@ struct ExecutorAddrRange { const ExecutorAddrRange &RHS) { return !(LHS == RHS); } + friend bool operator<(const ExecutorAddrRange &LHS, + const ExecutorAddrRange &RHS) { + return LHS.Start < RHS.Start || + (LHS.Start == RHS.Start && LHS.End < RHS.End); + } + friend bool operator<=(const ExecutorAddrRange &LHS, + const ExecutorAddrRange &RHS) { + return LHS.Start < RHS.Start || + (LHS.Start == RHS.Start && LHS.End <= RHS.End); + } + friend bool operator>(const ExecutorAddrRange &LHS, + const ExecutorAddrRange &RHS) { + return LHS.Start > RHS.Start || + (LHS.Start == RHS.Start && LHS.End > RHS.End); + } + friend bool operator>=(const ExecutorAddrRange &LHS, + const ExecutorAddrRange &RHS) { + return LHS.Start > RHS.Start || + (LHS.Start == RHS.Start && LHS.End >= RHS.End); + } + bool contains(ExecutorAddr Addr) const { return Start <= Addr && Addr < End; } bool overlaps(const ExecutorAddrRange &Other) { return !(Other.End <= Start || End <= Other.Start); diff --git a/llvm/unittests/ExecutionEngine/Orc/ExecutorAddressTest.cpp b/llvm/unittests/ExecutionEngine/Orc/ExecutorAddressTest.cpp index f829de6..e8b22b3 100644 --- a/llvm/unittests/ExecutionEngine/Orc/ExecutorAddressTest.cpp +++ b/llvm/unittests/ExecutionEngine/Orc/ExecutorAddressTest.cpp @@ -100,6 +100,11 @@ TEST(ExecutorAddrTest, AddrRanges) { EXPECT_FALSE(R1.overlaps(R2)); EXPECT_TRUE(R1.overlaps(R3)); EXPECT_TRUE(R1.overlaps(R4)); + + EXPECT_LE(R0, R0); + EXPECT_LT(R0, R1); + EXPECT_GE(R0, R0); + EXPECT_GT(R1, R0); } } // namespace -- 2.7.4