[Alignment][NFC] Adding a max function.

Summary:
This is patch is part of a series to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790

Reviewers: courbet

Subscribers: llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D68201

llvm-svn: 373196
This commit is contained in:
Guillaume Chatelet 2019-09-30 09:59:31 +00:00
parent 119416c564
commit 1367c6179c
2 changed files with 31 additions and 0 deletions

View File

@ -333,6 +333,14 @@ inline MaybeAlign operator/(MaybeAlign Lhs, uint64_t Divisor) {
return Lhs ? Lhs.getValue() / Divisor : MaybeAlign();
}
inline Align max(MaybeAlign Lhs, Align Rhs) {
return Lhs && *Lhs > Rhs ? *Lhs : Rhs;
}
inline Align max(Align Lhs, MaybeAlign Rhs) {
return Rhs && *Rhs > Lhs ? *Rhs : Lhs;
}
#undef ALIGN_CHECK_ISPOSITIVE
#undef ALIGN_CHECK_ISSET

View File

@ -227,6 +227,29 @@ TEST(AlignmentTest, AlignComparisons) {
}
}
TEST(AlignmentTest, Max) {
// We introduce std::max here to test ADL.
using std::max;
// Uses llvm::max.
EXPECT_EQ(max(MaybeAlign(), Align(2)), Align(2));
EXPECT_EQ(max(Align(2), MaybeAlign()), Align(2));
EXPECT_EQ(max(MaybeAlign(1), Align(2)), Align(2));
EXPECT_EQ(max(Align(2), MaybeAlign(1)), Align(2));
EXPECT_EQ(max(MaybeAlign(2), Align(2)), Align(2));
EXPECT_EQ(max(Align(2), MaybeAlign(2)), Align(2));
EXPECT_EQ(max(MaybeAlign(4), Align(2)), Align(4));
EXPECT_EQ(max(Align(2), MaybeAlign(4)), Align(4));
// Uses std::max.
EXPECT_EQ(max(Align(2), Align(4)), Align(4));
EXPECT_EQ(max(MaybeAlign(2), MaybeAlign(4)), MaybeAlign(4));
EXPECT_EQ(max(MaybeAlign(), MaybeAlign()), MaybeAlign());
}
TEST(AlignmentTest, AssumeAligned) {
EXPECT_EQ(assumeAligned(0), Align(1));
EXPECT_EQ(assumeAligned(0), Align());