diff --git a/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h b/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h index f6673b18cb5a..b7b98d55cc65 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 f829de6d6cb3..e8b22b3d4bbb 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