From 4ddc21624e8f4fdad6375a770ac86015bca70a65 Mon Sep 17 00:00:00 2001 From: Guillaume Chatelet Date: Thu, 3 Oct 2019 15:53:50 +0000 Subject: [PATCH] Revert "[Alignment][NFC] Allow constexpr Align" This reverts commit b3af236fb5fc6e50fcc1b54d868f0bff557f3fb1. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373619 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/Alignment.h | 26 ++++------------------ include/llvm/Support/MathExtras.h | 9 -------- lib/Target/AArch64/AArch64StackTagging.cpp | 2 +- unittests/Support/AlignmentTest.cpp | 10 --------- unittests/Support/MathExtrasTest.cpp | 19 ---------------- 5 files changed, 5 insertions(+), 61 deletions(-) diff --git a/include/llvm/Support/Alignment.h b/include/llvm/Support/Alignment.h index f94d7cdc9a1..3d8a4235b0e 100644 --- a/include/llvm/Support/Alignment.h +++ b/include/llvm/Support/Alignment.h @@ -58,10 +58,10 @@ public: constexpr Align() = default; /// Do not perform checks in case of copy/move construct/assign, because the /// checks have been performed when building `Other`. - constexpr Align(const Align &Other) = default; - constexpr Align &operator=(const Align &Other) = default; - constexpr Align(Align &&Other) = default; - constexpr Align &operator=(Align &&Other) = default; + Align(const Align &Other) = default; + Align &operator=(const Align &Other) = default; + Align(Align &&Other) = default; + Align &operator=(Align &&Other) = default; explicit Align(uint64_t Value) { assert(Value > 0 && "Value must not be 0"); @@ -80,24 +80,6 @@ public: /// would be better than /// `if (A > Align(1))` constexpr static const Align None() { return Align(); } - - /// This function is useful when initializing constexpr Align constants. - /// e.g. static constexpr Align kAlign16 = Align::Constant<16>(); - /// Most compilers (clang, gcc, icc) will be able to compute `ShiftValue` - /// at compile time with `Align::Align(uint64_t Value)` but to be - /// able to use Align as a constexpr constant use this method. - /// FIXME: When LLVM is C++17 ready `Align::Align(uint64_t Value)` - /// can be constexpr and we can dispatch between runtime (Log2_64) vs - /// compile time (CTLog2) versions using constexpr-if. Then this - /// function is no more necessary and we can add user defined literals - /// for convenience. - template constexpr static Align Constant() { - static_assert(kValue > 0 && llvm::isPowerOf2_64(kValue), - "Not a valid alignment"); - Align A; - A.ShiftValue = CTLog2(); - return A; - } }; /// Treats the value 0 as a 1, so Align is always at least 1. diff --git a/include/llvm/Support/MathExtras.h b/include/llvm/Support/MathExtras.h index 9570ae67a9d..775d19a698f 100644 --- a/include/llvm/Support/MathExtras.h +++ b/include/llvm/Support/MathExtras.h @@ -532,15 +532,6 @@ inline double Log2(double Value) { #endif } -/// Return the compile time log base 2 of the specified Value. -/// `kValue` has to be a power of two. -template static constexpr inline uint8_t CTLog2() { - static_assert(kValue > 0 && llvm::isPowerOf2_64(kValue), - "Value is not a valid power of 2"); - return 1 + CTLog2(); -} -template <> constexpr inline uint8_t CTLog2<1>() { return 0; } - /// Return the floor log base 2 of the specified value, -1 if the value is zero. /// (32 bit edition.) /// Ex. Log2_32(32) == 5, Log2_32(1) == 0, Log2_32(0) == -1, Log2_32(6) == 2 diff --git a/lib/Target/AArch64/AArch64StackTagging.cpp b/lib/Target/AArch64/AArch64StackTagging.cpp index 55c7afbd69f..0c52711a8d7 100644 --- a/lib/Target/AArch64/AArch64StackTagging.cpp +++ b/lib/Target/AArch64/AArch64StackTagging.cpp @@ -62,7 +62,7 @@ static cl::opt ClMergeInit( static cl::opt ClScanLimit("stack-tagging-merge-init-scan-limit", cl::init(40), cl::Hidden); -static constexpr Align kTagGranuleSize = Align::Constant<16>(); +static const Align kTagGranuleSize = Align(16); namespace { diff --git a/unittests/Support/AlignmentTest.cpp b/unittests/Support/AlignmentTest.cpp index 3d35a612b83..0b1435912b9 100644 --- a/unittests/Support/AlignmentTest.cpp +++ b/unittests/Support/AlignmentTest.cpp @@ -44,16 +44,6 @@ TEST(AlignmentTest, ValidCTors) { } } -TEST(AlignmentTest, CompileTimeConstant) { - EXPECT_EQ(Align::Constant<1>(), Align(1)); - EXPECT_EQ(Align::Constant<2>(), Align(2)); - EXPECT_EQ(Align::Constant<4>(), Align(4)); - EXPECT_EQ(Align::Constant<8>(), Align(8)); - EXPECT_EQ(Align::Constant<16>(), Align(16)); - EXPECT_EQ(Align::Constant<32>(), Align(32)); - EXPECT_EQ(Align::Constant<64>(), Align(64)); -} - TEST(AlignmentTest, CheckMaybeAlignHasValue) { EXPECT_TRUE(MaybeAlign(1)); EXPECT_TRUE(MaybeAlign(1).hasValue()); diff --git a/unittests/Support/MathExtrasTest.cpp b/unittests/Support/MathExtrasTest.cpp index 00d037ad110..01c83c9e14d 100644 --- a/unittests/Support/MathExtrasTest.cpp +++ b/unittests/Support/MathExtrasTest.cpp @@ -203,25 +203,6 @@ TEST(MathExtras, PowerOf2Floor) { EXPECT_EQ(4U, PowerOf2Floor(7U)); } -TEST(MathExtras, CTLog2) { - EXPECT_EQ(CTLog2<1ULL << 0>(), 0); - EXPECT_EQ(CTLog2<1ULL << 1>(), 1); - EXPECT_EQ(CTLog2<1ULL << 2>(), 2); - EXPECT_EQ(CTLog2<1ULL << 3>(), 3); - EXPECT_EQ(CTLog2<1ULL << 4>(), 4); - EXPECT_EQ(CTLog2<1ULL << 5>(), 5); - EXPECT_EQ(CTLog2<1ULL << 6>(), 6); - EXPECT_EQ(CTLog2<1ULL << 7>(), 7); - EXPECT_EQ(CTLog2<1ULL << 8>(), 8); - EXPECT_EQ(CTLog2<1ULL << 9>(), 9); - EXPECT_EQ(CTLog2<1ULL << 10>(), 10); - EXPECT_EQ(CTLog2<1ULL << 11>(), 11); - EXPECT_EQ(CTLog2<1ULL << 12>(), 12); - EXPECT_EQ(CTLog2<1ULL << 13>(), 13); - EXPECT_EQ(CTLog2<1ULL << 14>(), 14); - EXPECT_EQ(CTLog2<1ULL << 15>(), 15); -} - TEST(MathExtras, ByteSwap_32) { EXPECT_EQ(0x44332211u, ByteSwap_32(0x11223344)); EXPECT_EQ(0xDDCCBBAAu, ByteSwap_32(0xAABBCCDD)); -- 2.40.0