Index: llvm/include/llvm/ADT/STLExtras.h =================================================================== --- llvm/include/llvm/ADT/STLExtras.h +++ llvm/include/llvm/ADT/STLExtras.h @@ -1796,6 +1796,11 @@ std::equal(adl_begin(Range) + 1, adl_end(Range), adl_begin(Range))); } +/// Returns true iff all Values in the initializer lists are same. +template bool is_splat(std::initializer_list Values) { + return is_splat>(std::move(Values)); +} + /// Provide a container algorithm similar to C++ Library Fundamentals v2's /// `erase_if` which is equivalent to: /// Index: llvm/unittests/ADT/STLExtrasTest.cpp =================================================================== --- llvm/unittests/ADT/STLExtrasTest.cpp +++ llvm/unittests/ADT/STLExtrasTest.cpp @@ -606,7 +606,7 @@ EXPECT_EQ(EIR.end(), I); } -TEST(STLExtrasTest, splat) { +TEST(STLExtrasTest, IsSplat) { std::vector V; EXPECT_FALSE(is_splat(V)); @@ -621,6 +621,13 @@ EXPECT_FALSE(is_splat(V)); } +TEST(STLExtrasTest, IsSplatInitializerList) { + EXPECT_TRUE(is_splat({1})); + EXPECT_TRUE(is_splat({1, 1})); + EXPECT_FALSE(is_splat({1, 2})); + EXPECT_TRUE(is_splat({1, 1, 1})); +} + TEST(STLExtrasTest, to_address) { int *V1 = new int; EXPECT_EQ(V1, to_address(V1));